// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// 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"
#ifdef __cplusplus

struct  BFu33_BFu0c_Vp  {
  __tsu64 v1:33;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu33_BFu0c_Vp) C1{ FL:33 Fc:0 Fp}



static void Test_BFu33_BFu0c_Vp()
{
  {
    init_simple_test("BFu33_BFu0c_Vp");
    static BFu33_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0c_Vp");
    check_field_offset(lv, v2, 8, "BFu33_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0c_Vp(Test_BFu33_BFu0c_Vp, "BFu33_BFu0c_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i  {
  __tsu64 v1:33;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu0i) C1{ FL:33 Fi:0}



static void Test_BFu33_BFu0i()
{
  {
    init_simple_test("BFu33_BFu0i");
    static BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i(Test_BFu33_BFu0i, "BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu0c  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu0i_BFu0c) C1{ FL:33 Fi:0 Fc:0}



static void Test_BFu33_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu0i_BFu0c");
    static BFu33_BFu0i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu0c(Test_BFu33_BFu0i_BFu0c, "BFu33_BFu0i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu0i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu0i_BFu0i) C1{ FL:33 Fi:0 Fi:0}



static void Test_BFu33_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu0i");
    static BFu33_BFu0i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu0i(Test_BFu33_BFu0i_BFu0i, "BFu33_BFu0i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu0i_BFu0ll) C1{ FL:33 Fi:0 FL:0}



static void Test_BFu33_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu0ll");
    static BFu33_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu0ll(Test_BFu33_BFu0i_BFu0ll, "BFu33_BFu0i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu0s  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu0i_BFu0s) C1{ FL:33 Fi:0 Fs:0}



static void Test_BFu33_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu0i_BFu0s");
    static BFu33_BFu0i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu0s(Test_BFu33_BFu0i_BFu0s, "BFu33_BFu0i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu15i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu33_BFu0i_BFu15i) C1{ FL:33 Fi:0 Fi:15}



static void Test_BFu33_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu15i");
    static BFu33_BFu0i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu33_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu33_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu15i(Test_BFu33_BFu0i_BFu15i, "BFu33_BFu0i_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu15ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu33_BFu0i_BFu15ll) C1{ FL:33 Fi:0 FL:15}



static void Test_BFu33_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu15ll");
    static BFu33_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu33_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu33_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu15ll(Test_BFu33_BFu0i_BFu15ll, "BFu33_BFu0i_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu15s  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu33_BFu0i_BFu15s) C1{ FL:33 Fi:0 Fs:15}



static void Test_BFu33_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu33_BFu0i_BFu15s");
    static BFu33_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu33_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu33_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu15s(Test_BFu33_BFu0i_BFu15s, "BFu33_BFu0i_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu16i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu33_BFu0i_BFu16i) C1{ FL:33 Fi:0 Fi:16}



static void Test_BFu33_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu16i");
    static BFu33_BFu0i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu33_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu33_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu16i(Test_BFu33_BFu0i_BFu16i, "BFu33_BFu0i_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu16ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu33_BFu0i_BFu16ll) C1{ FL:33 Fi:0 FL:16}



static void Test_BFu33_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu16ll");
    static BFu33_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu33_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu33_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu16ll(Test_BFu33_BFu0i_BFu16ll, "BFu33_BFu0i_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu16s  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu33_BFu0i_BFu16s) C1{ FL:33 Fi:0 Fs:16}



static void Test_BFu33_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu33_BFu0i_BFu16s");
    static BFu33_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu33_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu33_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu16s(Test_BFu33_BFu0i_BFu16s, "BFu33_BFu0i_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu17i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu33_BFu0i_BFu17i) C1{ FL:33 Fi:0 Fi:17}



static void Test_BFu33_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu17i");
    static BFu33_BFu0i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu33_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu33_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu17i(Test_BFu33_BFu0i_BFu17i, "BFu33_BFu0i_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu17ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu33_BFu0i_BFu17ll) C1{ FL:33 Fi:0 FL:17}



static void Test_BFu33_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu17ll");
    static BFu33_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu33_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu33_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu17ll(Test_BFu33_BFu0i_BFu17ll, "BFu33_BFu0i_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu1c  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu33_BFu0i_BFu1c) C1{ FL:33 Fi:0 Fc:1}



static void Test_BFu33_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu33_BFu0i_BFu1c");
    static BFu33_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu33_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu1c(Test_BFu33_BFu0i_BFu1c, "BFu33_BFu0i_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu1i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu33_BFu0i_BFu1i) C1{ FL:33 Fi:0 Fi:1}



static void Test_BFu33_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu1i");
    static BFu33_BFu0i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu33_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu1i(Test_BFu33_BFu0i_BFu1i, "BFu33_BFu0i_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu1ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu33_BFu0i_BFu1ll) C1{ FL:33 Fi:0 FL:1}



static void Test_BFu33_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu1ll");
    static BFu33_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu33_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu1ll(Test_BFu33_BFu0i_BFu1ll, "BFu33_BFu0i_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu1s  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu33_BFu0i_BFu1s) C1{ FL:33 Fi:0 Fs:1}



static void Test_BFu33_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu33_BFu0i_BFu1s");
    static BFu33_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu33_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu1s(Test_BFu33_BFu0i_BFu1s, "BFu33_BFu0i_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu31i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu33_BFu0i_BFu31i) C1{ FL:33 Fi:0 Fi:31}



static void Test_BFu33_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu31i");
    static BFu33_BFu0i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu33_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu33_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu31i(Test_BFu33_BFu0i_BFu31i, "BFu33_BFu0i_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu31ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu33_BFu0i_BFu31ll) C1{ FL:33 Fi:0 FL:31}



static void Test_BFu33_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu31ll");
    static BFu33_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu33_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu33_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu31ll(Test_BFu33_BFu0i_BFu31ll, "BFu33_BFu0i_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu32i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu33_BFu0i_BFu32i) C1{ FL:33 Fi:0 Fi:32}



static void Test_BFu33_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu32i");
    static BFu33_BFu0i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu33_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu33_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu32i(Test_BFu33_BFu0i_BFu32i, "BFu33_BFu0i_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu32ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu33_BFu0i_BFu32ll) C1{ FL:33 Fi:0 FL:32}



static void Test_BFu33_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu32ll");
    static BFu33_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu33_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu33_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu32ll(Test_BFu33_BFu0i_BFu32ll, "BFu33_BFu0i_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu33  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu33_BFu0i_BFu33) C1{ FL:33 Fi:0 FL:33}



static void Test_BFu33_BFu0i_BFu33()
{
  {
    init_simple_test("BFu33_BFu0i_BFu33");
    static BFu33_BFu0i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "BFu33_BFu0i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu33(Test_BFu33_BFu0i_BFu33, "BFu33_BFu0i_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu7c  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu33_BFu0i_BFu7c) C1{ FL:33 Fi:0 Fc:7}



static void Test_BFu33_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu33_BFu0i_BFu7c");
    static BFu33_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu33_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu7c(Test_BFu33_BFu0i_BFu7c, "BFu33_BFu0i_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu7i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu33_BFu0i_BFu7i) C1{ FL:33 Fi:0 Fi:7}



static void Test_BFu33_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu7i");
    static BFu33_BFu0i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu33_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu7i(Test_BFu33_BFu0i_BFu7i, "BFu33_BFu0i_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu7ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu33_BFu0i_BFu7ll) C1{ FL:33 Fi:0 FL:7}



static void Test_BFu33_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu7ll");
    static BFu33_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu33_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu7ll(Test_BFu33_BFu0i_BFu7ll, "BFu33_BFu0i_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu7s  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu33_BFu0i_BFu7s) C1{ FL:33 Fi:0 Fs:7}



static void Test_BFu33_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu33_BFu0i_BFu7s");
    static BFu33_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu33_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu7s(Test_BFu33_BFu0i_BFu7s, "BFu33_BFu0i_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu8c  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu33_BFu0i_BFu8c) C1{ FL:33 Fi:0 Fc:8}



static void Test_BFu33_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu33_BFu0i_BFu8c");
    static BFu33_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu33_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu8c(Test_BFu33_BFu0i_BFu8c, "BFu33_BFu0i_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu8i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu33_BFu0i_BFu8i) C1{ FL:33 Fi:0 Fi:8}



static void Test_BFu33_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu8i");
    static BFu33_BFu0i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu33_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu8i(Test_BFu33_BFu0i_BFu8i, "BFu33_BFu0i_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu8ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu33_BFu0i_BFu8ll) C1{ FL:33 Fi:0 FL:8}



static void Test_BFu33_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu8ll");
    static BFu33_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu33_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu8ll(Test_BFu33_BFu0i_BFu8ll, "BFu33_BFu0i_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu8s  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu33_BFu0i_BFu8s) C1{ FL:33 Fi:0 Fs:8}



static void Test_BFu33_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu33_BFu0i_BFu8s");
    static BFu33_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu33_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu8s(Test_BFu33_BFu0i_BFu8s, "BFu33_BFu0i_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu9i  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu33_BFu0i_BFu9i) C1{ FL:33 Fi:0 Fi:9}



static void Test_BFu33_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu33_BFu0i_BFu9i");
    static BFu33_BFu0i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu33_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu33_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu9i(Test_BFu33_BFu0i_BFu9i, "BFu33_BFu0i_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu9ll  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu33_BFu0i_BFu9ll) C1{ FL:33 Fi:0 FL:9}



static void Test_BFu33_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu33_BFu0i_BFu9ll");
    static BFu33_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu33_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu33_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu9ll(Test_BFu33_BFu0i_BFu9ll, "BFu33_BFu0i_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_BFu9s  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu33_BFu0i_BFu9s) C1{ FL:33 Fi:0 Fs:9}



static void Test_BFu33_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu33_BFu0i_BFu9s");
    static BFu33_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu33_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu33_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_BFu9s(Test_BFu33_BFu0i_BFu9s, "BFu33_BFu0i_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_C  {
  __tsu64 v1:33;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu33_BFu0i_C) C1{ FL:33 Fi:0 Fc}



static void Test_BFu33_BFu0i_C()
{
  {
    init_simple_test("BFu33_BFu0i_C");
    static BFu33_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_C");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_C(Test_BFu33_BFu0i_C, "BFu33_BFu0i_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_D  {
  __tsu64 v1:33;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu33_BFu0i_D) C1{ FL:33 Fi:0 FL}



static void Test_BFu33_BFu0i_D()
{
  {
    init_simple_test("BFu33_BFu0i_D");
    static BFu33_BFu0i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_D");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_D(Test_BFu33_BFu0i_D, "BFu33_BFu0i_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_F  {
  __tsu64 v1:33;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu33_BFu0i_F) C1{ FL:33 Fi:0 Fi}



static void Test_BFu33_BFu0i_F()
{
  {
    init_simple_test("BFu33_BFu0i_F");
    static BFu33_BFu0i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_F");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_F(Test_BFu33_BFu0i_F, "BFu33_BFu0i_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_I  {
  __tsu64 v1:33;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu33_BFu0i_I) C1{ FL:33 Fi:0 Fi}



static void Test_BFu33_BFu0i_I()
{
  {
    init_simple_test("BFu33_BFu0i_I");
    static BFu33_BFu0i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_I");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_I(Test_BFu33_BFu0i_I, "BFu33_BFu0i_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_Ip  {
  __tsu64 v1:33;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu33_BFu0i_Ip) C1{ FL:33 Fi:0 Fp}



static void Test_BFu33_BFu0i_Ip()
{
  {
    init_simple_test("BFu33_BFu0i_Ip");
    static BFu33_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_Ip");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_Ip(Test_BFu33_BFu0i_Ip, "BFu33_BFu0i_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_L  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu33_BFu0i_L) C1{ FL:33 Fi:0 FL}



static void Test_BFu33_BFu0i_L()
{
  {
    init_simple_test("BFu33_BFu0i_L");
    static BFu33_BFu0i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_L");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_L(Test_BFu33_BFu0i_L, "BFu33_BFu0i_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_S  {
  __tsu64 v1:33;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu33_BFu0i_S) C1{ FL:33 Fi:0 Fs}



static void Test_BFu33_BFu0i_S()
{
  {
    init_simple_test("BFu33_BFu0i_S");
    static BFu33_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_S");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_S(Test_BFu33_BFu0i_S, "BFu33_BFu0i_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_Uc  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu33_BFu0i_Uc) C1{ FL:33 Fi:0 Fc}



static void Test_BFu33_BFu0i_Uc()
{
  {
    init_simple_test("BFu33_BFu0i_Uc");
    static BFu33_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_Uc");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_Uc(Test_BFu33_BFu0i_Uc, "BFu33_BFu0i_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_Ui  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu33_BFu0i_Ui) C1{ FL:33 Fi:0 Fi}



static void Test_BFu33_BFu0i_Ui()
{
  {
    init_simple_test("BFu33_BFu0i_Ui");
    static BFu33_BFu0i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_Ui");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_Ui(Test_BFu33_BFu0i_Ui, "BFu33_BFu0i_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_Ul  {
  __tsu64 v1:33;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu33_BFu0i_Ul) C1{ FL:33 Fi:0 FL}



static void Test_BFu33_BFu0i_Ul()
{
  {
    init_simple_test("BFu33_BFu0i_Ul");
    static BFu33_BFu0i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_Ul");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_Ul(Test_BFu33_BFu0i_Ul, "BFu33_BFu0i_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_Us  {
  __tsu64 v1:33;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu33_BFu0i_Us) C1{ FL:33 Fi:0 Fs}



static void Test_BFu33_BFu0i_Us()
{
  {
    init_simple_test("BFu33_BFu0i_Us");
    static BFu33_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_Us");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_Us(Test_BFu33_BFu0i_Us, "BFu33_BFu0i_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0i_Vp  {
  __tsu64 v1:33;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu33_BFu0i_Vp) C1{ FL:33 Fi:0 Fp}



static void Test_BFu33_BFu0i_Vp()
{
  {
    init_simple_test("BFu33_BFu0i_Vp");
    static BFu33_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0i_Vp");
    check_field_offset(lv, v2, 8, "BFu33_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0i_Vp(Test_BFu33_BFu0i_Vp, "BFu33_BFu0i_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll  {
  __tsu64 v1:33;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu0ll) C1{ FL:33 FL:0}



static void Test_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu0ll");
    static BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll(Test_BFu33_BFu0ll, "BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu0ll_BFu0c) C1{ FL:33 FL:0 Fc:0}



static void Test_BFu33_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu0c");
    static BFu33_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu0c(Test_BFu33_BFu0ll_BFu0c, "BFu33_BFu0ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu0ll_BFu0i) C1{ FL:33 FL:0 Fi:0}



static void Test_BFu33_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu0i");
    static BFu33_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu0i(Test_BFu33_BFu0ll_BFu0i, "BFu33_BFu0ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu0ll_BFu0ll) C1{ FL:33 FL:0 FL:0}



static void Test_BFu33_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu0ll");
    static BFu33_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu0ll(Test_BFu33_BFu0ll_BFu0ll, "BFu33_BFu0ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu0ll_BFu0s) C1{ FL:33 FL:0 Fs:0}



static void Test_BFu33_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu0s");
    static BFu33_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu0s(Test_BFu33_BFu0ll_BFu0s, "BFu33_BFu0ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu15i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu33_BFu0ll_BFu15i) C1{ FL:33 FL:0 Fi:15}



static void Test_BFu33_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu15i");
    static BFu33_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu33_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu33_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu15i(Test_BFu33_BFu0ll_BFu15i, "BFu33_BFu0ll_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu15ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu33_BFu0ll_BFu15ll) C1{ FL:33 FL:0 FL:15}



static void Test_BFu33_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu15ll");
    static BFu33_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu33_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu33_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu15ll(Test_BFu33_BFu0ll_BFu15ll, "BFu33_BFu0ll_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu15s  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu33_BFu0ll_BFu15s) C1{ FL:33 FL:0 Fs:15}



static void Test_BFu33_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu15s");
    static BFu33_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "BFu33_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "BFu33_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu15s(Test_BFu33_BFu0ll_BFu15s, "BFu33_BFu0ll_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu16i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu33_BFu0ll_BFu16i) C1{ FL:33 FL:0 Fi:16}



static void Test_BFu33_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu16i");
    static BFu33_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu33_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu33_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu16i(Test_BFu33_BFu0ll_BFu16i, "BFu33_BFu0ll_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu16ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu33_BFu0ll_BFu16ll) C1{ FL:33 FL:0 FL:16}



static void Test_BFu33_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu16ll");
    static BFu33_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu33_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu33_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu16ll(Test_BFu33_BFu0ll_BFu16ll, "BFu33_BFu0ll_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu16s  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu33_BFu0ll_BFu16s) C1{ FL:33 FL:0 Fs:16}



static void Test_BFu33_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu16s");
    static BFu33_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "BFu33_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "BFu33_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu16s(Test_BFu33_BFu0ll_BFu16s, "BFu33_BFu0ll_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu17i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu33_BFu0ll_BFu17i) C1{ FL:33 FL:0 Fi:17}



static void Test_BFu33_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu17i");
    static BFu33_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu33_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu33_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu17i(Test_BFu33_BFu0ll_BFu17i, "BFu33_BFu0ll_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu17ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu33_BFu0ll_BFu17ll) C1{ FL:33 FL:0 FL:17}



static void Test_BFu33_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu17ll");
    static BFu33_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu33_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu33_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu17ll(Test_BFu33_BFu0ll_BFu17ll, "BFu33_BFu0ll_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu1c  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu33_BFu0ll_BFu1c) C1{ FL:33 FL:0 Fc:1}



static void Test_BFu33_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu1c");
    static BFu33_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu33_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu1c(Test_BFu33_BFu0ll_BFu1c, "BFu33_BFu0ll_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu1i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu33_BFu0ll_BFu1i) C1{ FL:33 FL:0 Fi:1}



static void Test_BFu33_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu1i");
    static BFu33_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu33_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu1i(Test_BFu33_BFu0ll_BFu1i, "BFu33_BFu0ll_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu1ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu33_BFu0ll_BFu1ll) C1{ FL:33 FL:0 FL:1}



static void Test_BFu33_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu1ll");
    static BFu33_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu33_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu1ll(Test_BFu33_BFu0ll_BFu1ll, "BFu33_BFu0ll_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu1s  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu33_BFu0ll_BFu1s) C1{ FL:33 FL:0 Fs:1}



static void Test_BFu33_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu1s");
    static BFu33_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "BFu33_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu1s(Test_BFu33_BFu0ll_BFu1s, "BFu33_BFu0ll_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu31i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu33_BFu0ll_BFu31i) C1{ FL:33 FL:0 Fi:31}



static void Test_BFu33_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu31i");
    static BFu33_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu33_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu33_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu31i(Test_BFu33_BFu0ll_BFu31i, "BFu33_BFu0ll_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu31ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu33_BFu0ll_BFu31ll) C1{ FL:33 FL:0 FL:31}



static void Test_BFu33_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu31ll");
    static BFu33_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu33_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu33_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu31ll(Test_BFu33_BFu0ll_BFu31ll, "BFu33_BFu0ll_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu32i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu33_BFu0ll_BFu32i) C1{ FL:33 FL:0 Fi:32}



static void Test_BFu33_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu32i");
    static BFu33_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu33_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu33_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu32i(Test_BFu33_BFu0ll_BFu32i, "BFu33_BFu0ll_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu32ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu33_BFu0ll_BFu32ll) C1{ FL:33 FL:0 FL:32}



static void Test_BFu33_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu32ll");
    static BFu33_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu33_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu33_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu32ll(Test_BFu33_BFu0ll_BFu32ll, "BFu33_BFu0ll_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu33  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu33_BFu0ll_BFu33) C1{ FL:33 FL:0 FL:33}



static void Test_BFu33_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu33");
    static BFu33_BFu0ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "BFu33_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu33(Test_BFu33_BFu0ll_BFu33, "BFu33_BFu0ll_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu7c  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu33_BFu0ll_BFu7c) C1{ FL:33 FL:0 Fc:7}



static void Test_BFu33_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu7c");
    static BFu33_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu33_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu7c(Test_BFu33_BFu0ll_BFu7c, "BFu33_BFu0ll_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu7i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu33_BFu0ll_BFu7i) C1{ FL:33 FL:0 Fi:7}



static void Test_BFu33_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu7i");
    static BFu33_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu33_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu7i(Test_BFu33_BFu0ll_BFu7i, "BFu33_BFu0ll_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu7ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu33_BFu0ll_BFu7ll) C1{ FL:33 FL:0 FL:7}



static void Test_BFu33_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu7ll");
    static BFu33_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu33_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu7ll(Test_BFu33_BFu0ll_BFu7ll, "BFu33_BFu0ll_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu7s  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu33_BFu0ll_BFu7s) C1{ FL:33 FL:0 Fs:7}



static void Test_BFu33_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu7s");
    static BFu33_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "BFu33_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu7s(Test_BFu33_BFu0ll_BFu7s, "BFu33_BFu0ll_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu8c  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu33_BFu0ll_BFu8c) C1{ FL:33 FL:0 Fc:8}



static void Test_BFu33_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu8c");
    static BFu33_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu33_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu8c(Test_BFu33_BFu0ll_BFu8c, "BFu33_BFu0ll_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu8i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu33_BFu0ll_BFu8i) C1{ FL:33 FL:0 Fi:8}



static void Test_BFu33_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu8i");
    static BFu33_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu33_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu8i(Test_BFu33_BFu0ll_BFu8i, "BFu33_BFu0ll_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu8ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu33_BFu0ll_BFu8ll) C1{ FL:33 FL:0 FL:8}



static void Test_BFu33_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu8ll");
    static BFu33_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu33_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu8ll(Test_BFu33_BFu0ll_BFu8ll, "BFu33_BFu0ll_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu8s  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu33_BFu0ll_BFu8s) C1{ FL:33 FL:0 Fs:8}



static void Test_BFu33_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu8s");
    static BFu33_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "BFu33_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu8s(Test_BFu33_BFu0ll_BFu8s, "BFu33_BFu0ll_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu9i  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu33_BFu0ll_BFu9i) C1{ FL:33 FL:0 Fi:9}



static void Test_BFu33_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu9i");
    static BFu33_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu33_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu33_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu9i(Test_BFu33_BFu0ll_BFu9i, "BFu33_BFu0ll_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu9ll  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu33_BFu0ll_BFu9ll) C1{ FL:33 FL:0 FL:9}



static void Test_BFu33_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu9ll");
    static BFu33_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu33_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu33_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu9ll(Test_BFu33_BFu0ll_BFu9ll, "BFu33_BFu0ll_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_BFu9s  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu33_BFu0ll_BFu9s) C1{ FL:33 FL:0 Fs:9}



static void Test_BFu33_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu33_BFu0ll_BFu9s");
    static BFu33_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "BFu33_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "BFu33_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_BFu9s(Test_BFu33_BFu0ll_BFu9s, "BFu33_BFu0ll_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_C  {
  __tsu64 v1:33;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu33_BFu0ll_C) C1{ FL:33 FL:0 Fc}



static void Test_BFu33_BFu0ll_C()
{
  {
    init_simple_test("BFu33_BFu0ll_C");
    static BFu33_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_C");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_C(Test_BFu33_BFu0ll_C, "BFu33_BFu0ll_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_D  {
  __tsu64 v1:33;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu33_BFu0ll_D) C1{ FL:33 FL:0 FL}



static void Test_BFu33_BFu0ll_D()
{
  {
    init_simple_test("BFu33_BFu0ll_D");
    static BFu33_BFu0ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_D");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_D(Test_BFu33_BFu0ll_D, "BFu33_BFu0ll_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_F  {
  __tsu64 v1:33;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu33_BFu0ll_F) C1{ FL:33 FL:0 Fi}



static void Test_BFu33_BFu0ll_F()
{
  {
    init_simple_test("BFu33_BFu0ll_F");
    static BFu33_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_F");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_F(Test_BFu33_BFu0ll_F, "BFu33_BFu0ll_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_I  {
  __tsu64 v1:33;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu33_BFu0ll_I) C1{ FL:33 FL:0 Fi}



static void Test_BFu33_BFu0ll_I()
{
  {
    init_simple_test("BFu33_BFu0ll_I");
    static BFu33_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_I");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_I(Test_BFu33_BFu0ll_I, "BFu33_BFu0ll_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_Ip  {
  __tsu64 v1:33;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu33_BFu0ll_Ip) C1{ FL:33 FL:0 Fp}



static void Test_BFu33_BFu0ll_Ip()
{
  {
    init_simple_test("BFu33_BFu0ll_Ip");
    static BFu33_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_Ip");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_Ip(Test_BFu33_BFu0ll_Ip, "BFu33_BFu0ll_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_L  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu33_BFu0ll_L) C1{ FL:33 FL:0 FL}



static void Test_BFu33_BFu0ll_L()
{
  {
    init_simple_test("BFu33_BFu0ll_L");
    static BFu33_BFu0ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_L");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_L(Test_BFu33_BFu0ll_L, "BFu33_BFu0ll_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_S  {
  __tsu64 v1:33;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu33_BFu0ll_S) C1{ FL:33 FL:0 Fs}



static void Test_BFu33_BFu0ll_S()
{
  {
    init_simple_test("BFu33_BFu0ll_S");
    static BFu33_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_S");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_S(Test_BFu33_BFu0ll_S, "BFu33_BFu0ll_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_Uc  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu33_BFu0ll_Uc) C1{ FL:33 FL:0 Fc}



static void Test_BFu33_BFu0ll_Uc()
{
  {
    init_simple_test("BFu33_BFu0ll_Uc");
    static BFu33_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_Uc");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_Uc(Test_BFu33_BFu0ll_Uc, "BFu33_BFu0ll_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_Ui  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu33_BFu0ll_Ui) C1{ FL:33 FL:0 Fi}



static void Test_BFu33_BFu0ll_Ui()
{
  {
    init_simple_test("BFu33_BFu0ll_Ui");
    static BFu33_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_Ui");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_Ui(Test_BFu33_BFu0ll_Ui, "BFu33_BFu0ll_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_Ul  {
  __tsu64 v1:33;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu33_BFu0ll_Ul) C1{ FL:33 FL:0 FL}



static void Test_BFu33_BFu0ll_Ul()
{
  {
    init_simple_test("BFu33_BFu0ll_Ul");
    static BFu33_BFu0ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_Ul");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_Ul(Test_BFu33_BFu0ll_Ul, "BFu33_BFu0ll_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_Us  {
  __tsu64 v1:33;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu33_BFu0ll_Us) C1{ FL:33 FL:0 Fs}



static void Test_BFu33_BFu0ll_Us()
{
  {
    init_simple_test("BFu33_BFu0ll_Us");
    static BFu33_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_Us");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_Us(Test_BFu33_BFu0ll_Us, "BFu33_BFu0ll_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0ll_Vp  {
  __tsu64 v1:33;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu33_BFu0ll_Vp) C1{ FL:33 FL:0 Fp}



static void Test_BFu33_BFu0ll_Vp()
{
  {
    init_simple_test("BFu33_BFu0ll_Vp");
    static BFu33_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0ll_Vp");
    check_field_offset(lv, v2, 8, "BFu33_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0ll_Vp(Test_BFu33_BFu0ll_Vp, "BFu33_BFu0ll_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s  {
  __tsu64 v1:33;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu0s) C1{ FL:33 Fs:0}



static void Test_BFu33_BFu0s()
{
  {
    init_simple_test("BFu33_BFu0s");
    static BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s(Test_BFu33_BFu0s, "BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu0c  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu0s_BFu0c) C1{ FL:33 Fs:0 Fc:0}



static void Test_BFu33_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu33_BFu0s_BFu0c");
    static BFu33_BFu0s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu0c(Test_BFu33_BFu0s_BFu0c, "BFu33_BFu0s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu0i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu0s_BFu0i) C1{ FL:33 Fs:0 Fi:0}



static void Test_BFu33_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu0i");
    static BFu33_BFu0s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu0i(Test_BFu33_BFu0s_BFu0i, "BFu33_BFu0s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu0ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu0s_BFu0ll) C1{ FL:33 Fs:0 FL:0}



static void Test_BFu33_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu0ll");
    static BFu33_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu0ll(Test_BFu33_BFu0s_BFu0ll, "BFu33_BFu0s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu0s  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu0s_BFu0s) C1{ FL:33 Fs:0 Fs:0}



static void Test_BFu33_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu33_BFu0s_BFu0s");
    static BFu33_BFu0s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu0s(Test_BFu33_BFu0s_BFu0s, "BFu33_BFu0s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu15i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu33_BFu0s_BFu15i) C1{ FL:33 Fs:0 Fi:15}



static void Test_BFu33_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu15i");
    static BFu33_BFu0s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 6, 0, 15, 1, "BFu33_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 6, 0, 15, hide_ull(1LL<<14), "BFu33_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu15i(Test_BFu33_BFu0s_BFu15i, "BFu33_BFu0s_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu15ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu33_BFu0s_BFu15ll) C1{ FL:33 Fs:0 FL:15}



static void Test_BFu33_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu15ll");
    static BFu33_BFu0s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 6, 0, 15, 1, "BFu33_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 6, 0, 15, hide_ull(1LL<<14), "BFu33_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu15ll(Test_BFu33_BFu0s_BFu15ll, "BFu33_BFu0s_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu15s  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu33_BFu0s_BFu15s) C1{ FL:33 Fs:0 Fs:15}



static void Test_BFu33_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu33_BFu0s_BFu15s");
    static BFu33_BFu0s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 6, 0, 15, 1, "BFu33_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 6, 0, 15, hide_ull(1LL<<14), "BFu33_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu15s(Test_BFu33_BFu0s_BFu15s, "BFu33_BFu0s_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu16i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu33_BFu0s_BFu16i) C1{ FL:33 Fs:0 Fi:16}



static void Test_BFu33_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu16i");
    static BFu33_BFu0s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 6, 0, 16, 1, "BFu33_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 6, 0, 16, hide_ull(1LL<<15), "BFu33_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu16i(Test_BFu33_BFu0s_BFu16i, "BFu33_BFu0s_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu16ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu33_BFu0s_BFu16ll) C1{ FL:33 Fs:0 FL:16}



static void Test_BFu33_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu16ll");
    static BFu33_BFu0s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 6, 0, 16, 1, "BFu33_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 6, 0, 16, hide_ull(1LL<<15), "BFu33_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu16ll(Test_BFu33_BFu0s_BFu16ll, "BFu33_BFu0s_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu16s  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu33_BFu0s_BFu16s) C1{ FL:33 Fs:0 Fs:16}



static void Test_BFu33_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu33_BFu0s_BFu16s");
    static BFu33_BFu0s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 6, 0, 16, 1, "BFu33_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 6, 0, 16, hide_ull(1LL<<15), "BFu33_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu16s(Test_BFu33_BFu0s_BFu16s, "BFu33_BFu0s_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu17i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu33_BFu0s_BFu17i) C1{ FL:33 Fs:0 Fi:17}



static void Test_BFu33_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu17i");
    static BFu33_BFu0s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "BFu33_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "BFu33_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu17i(Test_BFu33_BFu0s_BFu17i, "BFu33_BFu0s_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu17ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu33_BFu0s_BFu17ll) C1{ FL:33 Fs:0 FL:17}



static void Test_BFu33_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu17ll");
    static BFu33_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,6), 0, 17, 1, "BFu33_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu33_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu17ll(Test_BFu33_BFu0s_BFu17ll, "BFu33_BFu0s_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu1c  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu33_BFu0s_BFu1c) C1{ FL:33 Fs:0 Fc:1}



static void Test_BFu33_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu33_BFu0s_BFu1c");
    static BFu33_BFu0s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 6, 0, 1, 1, "BFu33_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu1c(Test_BFu33_BFu0s_BFu1c, "BFu33_BFu0s_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu1i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu33_BFu0s_BFu1i) C1{ FL:33 Fs:0 Fi:1}



static void Test_BFu33_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu1i");
    static BFu33_BFu0s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 6, 0, 1, 1, "BFu33_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu1i(Test_BFu33_BFu0s_BFu1i, "BFu33_BFu0s_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu1ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu33_BFu0s_BFu1ll) C1{ FL:33 Fs:0 FL:1}



static void Test_BFu33_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu1ll");
    static BFu33_BFu0s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 6, 0, 1, 1, "BFu33_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu1ll(Test_BFu33_BFu0s_BFu1ll, "BFu33_BFu0s_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu1s  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu33_BFu0s_BFu1s) C1{ FL:33 Fs:0 Fs:1}



static void Test_BFu33_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu33_BFu0s_BFu1s");
    static BFu33_BFu0s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 6, 0, 1, 1, "BFu33_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu1s(Test_BFu33_BFu0s_BFu1s, "BFu33_BFu0s_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu31i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu33_BFu0s_BFu31i) C1{ FL:33 Fs:0 Fi:31}



static void Test_BFu33_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu31i");
    static BFu33_BFu0s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "BFu33_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "BFu33_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu31i(Test_BFu33_BFu0s_BFu31i, "BFu33_BFu0s_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu31ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu33_BFu0s_BFu31ll) C1{ FL:33 Fs:0 FL:31}



static void Test_BFu33_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu31ll");
    static BFu33_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,6), 0, 31, 1, "BFu33_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu33_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu31ll(Test_BFu33_BFu0s_BFu31ll, "BFu33_BFu0s_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu32i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu33_BFu0s_BFu32i) C1{ FL:33 Fs:0 Fi:32}



static void Test_BFu33_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu32i");
    static BFu33_BFu0s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu33_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu33_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu32i(Test_BFu33_BFu0s_BFu32i, "BFu33_BFu0s_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu32ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu33_BFu0s_BFu32ll) C1{ FL:33 Fs:0 FL:32}



static void Test_BFu33_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu32ll");
    static BFu33_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,6), 0, 32, 1, "BFu33_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu33_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu32ll(Test_BFu33_BFu0s_BFu32ll, "BFu33_BFu0s_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu33  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu33_BFu0s_BFu33) C1{ FL:33 Fs:0 FL:33}



static void Test_BFu33_BFu0s_BFu33()
{
  {
    init_simple_test("BFu33_BFu0s_BFu33");
    static BFu33_BFu0s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,6), 0, 33, 1, "BFu33_BFu0s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu33(Test_BFu33_BFu0s_BFu33, "BFu33_BFu0s_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu7c  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu33_BFu0s_BFu7c) C1{ FL:33 Fs:0 Fc:7}



static void Test_BFu33_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu33_BFu0s_BFu7c");
    static BFu33_BFu0s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 6, 0, 7, 1, "BFu33_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 6, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu7c(Test_BFu33_BFu0s_BFu7c, "BFu33_BFu0s_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu7i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu33_BFu0s_BFu7i) C1{ FL:33 Fs:0 Fi:7}



static void Test_BFu33_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu7i");
    static BFu33_BFu0s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 6, 0, 7, 1, "BFu33_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 6, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu7i(Test_BFu33_BFu0s_BFu7i, "BFu33_BFu0s_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu7ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu33_BFu0s_BFu7ll) C1{ FL:33 Fs:0 FL:7}



static void Test_BFu33_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu7ll");
    static BFu33_BFu0s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 6, 0, 7, 1, "BFu33_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 6, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu7ll(Test_BFu33_BFu0s_BFu7ll, "BFu33_BFu0s_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu7s  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu33_BFu0s_BFu7s) C1{ FL:33 Fs:0 Fs:7}



static void Test_BFu33_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu33_BFu0s_BFu7s");
    static BFu33_BFu0s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 6, 0, 7, 1, "BFu33_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 6, 0, 7, hide_ull(1LL<<6), "BFu33_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu7s(Test_BFu33_BFu0s_BFu7s, "BFu33_BFu0s_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu8c  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu33_BFu0s_BFu8c) C1{ FL:33 Fs:0 Fc:8}



static void Test_BFu33_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu33_BFu0s_BFu8c");
    static BFu33_BFu0s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 6, 0, 8, 1, "BFu33_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 6, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu8c(Test_BFu33_BFu0s_BFu8c, "BFu33_BFu0s_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu8i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu33_BFu0s_BFu8i) C1{ FL:33 Fs:0 Fi:8}



static void Test_BFu33_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu8i");
    static BFu33_BFu0s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 6, 0, 8, 1, "BFu33_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 6, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu8i(Test_BFu33_BFu0s_BFu8i, "BFu33_BFu0s_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu8ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu33_BFu0s_BFu8ll) C1{ FL:33 Fs:0 FL:8}



static void Test_BFu33_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu8ll");
    static BFu33_BFu0s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 6, 0, 8, 1, "BFu33_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 6, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu8ll(Test_BFu33_BFu0s_BFu8ll, "BFu33_BFu0s_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu8s  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu33_BFu0s_BFu8s) C1{ FL:33 Fs:0 Fs:8}



static void Test_BFu33_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu33_BFu0s_BFu8s");
    static BFu33_BFu0s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 6, 0, 8, 1, "BFu33_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 6, 0, 8, hide_ull(1LL<<7), "BFu33_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu8s(Test_BFu33_BFu0s_BFu8s, "BFu33_BFu0s_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu9i  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu33_BFu0s_BFu9i) C1{ FL:33 Fs:0 Fi:9}



static void Test_BFu33_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu33_BFu0s_BFu9i");
    static BFu33_BFu0s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 6, 0, 9, 1, "BFu33_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 6, 0, 9, hide_ull(1LL<<8), "BFu33_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu9i(Test_BFu33_BFu0s_BFu9i, "BFu33_BFu0s_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu9ll  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu33_BFu0s_BFu9ll) C1{ FL:33 Fs:0 FL:9}



static void Test_BFu33_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu33_BFu0s_BFu9ll");
    static BFu33_BFu0s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 6, 0, 9, 1, "BFu33_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 6, 0, 9, hide_ull(1LL<<8), "BFu33_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu9ll(Test_BFu33_BFu0s_BFu9ll, "BFu33_BFu0s_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_BFu9s  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu33_BFu0s_BFu9s) C1{ FL:33 Fs:0 Fs:9}



static void Test_BFu33_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu33_BFu0s_BFu9s");
    static BFu33_BFu0s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 6, 0, 9, 1, "BFu33_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 6, 0, 9, hide_ull(1LL<<8), "BFu33_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_BFu9s(Test_BFu33_BFu0s_BFu9s, "BFu33_BFu0s_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_C  {
  __tsu64 v1:33;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu33_BFu0s_C) C1{ FL:33 Fs:0 Fc}



static void Test_BFu33_BFu0s_C()
{
  {
    init_simple_test("BFu33_BFu0s_C");
    static BFu33_BFu0s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_C");
    check_field_offset(lv, v2, 6, "BFu33_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_C(Test_BFu33_BFu0s_C, "BFu33_BFu0s_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_D  {
  __tsu64 v1:33;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu33_BFu0s_D) C1{ FL:33 Fs:0 FL}



static void Test_BFu33_BFu0s_D()
{
  {
    init_simple_test("BFu33_BFu0s_D");
    static BFu33_BFu0s_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_D");
    check_field_offset(lv, v2, 8, "BFu33_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_D(Test_BFu33_BFu0s_D, "BFu33_BFu0s_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_F  {
  __tsu64 v1:33;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu33_BFu0s_F) C1{ FL:33 Fs:0 Fi}



static void Test_BFu33_BFu0s_F()
{
  {
    init_simple_test("BFu33_BFu0s_F");
    static BFu33_BFu0s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_F");
    check_field_offset(lv, v2, 8, "BFu33_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_F(Test_BFu33_BFu0s_F, "BFu33_BFu0s_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_I  {
  __tsu64 v1:33;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu33_BFu0s_I) C1{ FL:33 Fs:0 Fi}



static void Test_BFu33_BFu0s_I()
{
  {
    init_simple_test("BFu33_BFu0s_I");
    static BFu33_BFu0s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_I");
    check_field_offset(lv, v2, 8, "BFu33_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_I(Test_BFu33_BFu0s_I, "BFu33_BFu0s_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_Ip  {
  __tsu64 v1:33;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu33_BFu0s_Ip) C1{ FL:33 Fs:0 Fp}



static void Test_BFu33_BFu0s_Ip()
{
  {
    init_simple_test("BFu33_BFu0s_Ip");
    static BFu33_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_Ip");
    check_field_offset(lv, v2, 8, "BFu33_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_Ip(Test_BFu33_BFu0s_Ip, "BFu33_BFu0s_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_L  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu33_BFu0s_L) C1{ FL:33 Fs:0 FL}



static void Test_BFu33_BFu0s_L()
{
  {
    init_simple_test("BFu33_BFu0s_L");
    static BFu33_BFu0s_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_L");
    check_field_offset(lv, v2, 8, "BFu33_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_L(Test_BFu33_BFu0s_L, "BFu33_BFu0s_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_S  {
  __tsu64 v1:33;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu33_BFu0s_S) C1{ FL:33 Fs:0 Fs}



static void Test_BFu33_BFu0s_S()
{
  {
    init_simple_test("BFu33_BFu0s_S");
    static BFu33_BFu0s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_S");
    check_field_offset(lv, v2, 6, "BFu33_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_S(Test_BFu33_BFu0s_S, "BFu33_BFu0s_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_Uc  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu33_BFu0s_Uc) C1{ FL:33 Fs:0 Fc}



static void Test_BFu33_BFu0s_Uc()
{
  {
    init_simple_test("BFu33_BFu0s_Uc");
    static BFu33_BFu0s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_Uc");
    check_field_offset(lv, v2, 6, "BFu33_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_Uc(Test_BFu33_BFu0s_Uc, "BFu33_BFu0s_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_Ui  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu33_BFu0s_Ui) C1{ FL:33 Fs:0 Fi}



static void Test_BFu33_BFu0s_Ui()
{
  {
    init_simple_test("BFu33_BFu0s_Ui");
    static BFu33_BFu0s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_Ui");
    check_field_offset(lv, v2, 8, "BFu33_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_Ui(Test_BFu33_BFu0s_Ui, "BFu33_BFu0s_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_Ul  {
  __tsu64 v1:33;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu33_BFu0s_Ul) C1{ FL:33 Fs:0 FL}



static void Test_BFu33_BFu0s_Ul()
{
  {
    init_simple_test("BFu33_BFu0s_Ul");
    static BFu33_BFu0s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_Ul");
    check_field_offset(lv, v2, 8, "BFu33_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_Ul(Test_BFu33_BFu0s_Ul, "BFu33_BFu0s_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_Us  {
  __tsu64 v1:33;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu33_BFu0s_Us) C1{ FL:33 Fs:0 Fs}



static void Test_BFu33_BFu0s_Us()
{
  {
    init_simple_test("BFu33_BFu0s_Us");
    static BFu33_BFu0s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_Us");
    check_field_offset(lv, v2, 6, "BFu33_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_Us(Test_BFu33_BFu0s_Us, "BFu33_BFu0s_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu0s_Vp  {
  __tsu64 v1:33;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu33_BFu0s_Vp) C1{ FL:33 Fs:0 Fp}



static void Test_BFu33_BFu0s_Vp()
{
  {
    init_simple_test("BFu33_BFu0s_Vp");
    static BFu33_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu0s_Vp");
    check_field_offset(lv, v2, 8, "BFu33_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu33_BFu0s_Vp(Test_BFu33_BFu0s_Vp, "BFu33_BFu0s_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15i_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu15i_BFu0c) C1{ FL:33 Fi:15 Fc:0}



static void Test_BFu33_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu15i_BFu0c");
    static BFu33_BFu15i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15i_BFu0c(Test_BFu33_BFu15i_BFu0c, "BFu33_BFu15i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15i_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu15i_BFu0i) C1{ FL:33 Fi:15 Fi:0}



static void Test_BFu33_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu15i_BFu0i");
    static BFu33_BFu15i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15i_BFu0i(Test_BFu33_BFu15i_BFu0i, "BFu33_BFu15i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu15i_BFu0ll) C1{ FL:33 Fi:15 FL:0}



static void Test_BFu33_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu15i_BFu0ll");
    static BFu33_BFu15i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15i_BFu0ll(Test_BFu33_BFu15i_BFu0ll, "BFu33_BFu15i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15i_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu15i_BFu0s) C1{ FL:33 Fi:15 Fs:0}



static void Test_BFu33_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu15i_BFu0s");
    static BFu33_BFu15i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15i_BFu0s(Test_BFu33_BFu15i_BFu0s, "BFu33_BFu15i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu15ll_BFu0c) C1{ FL:33 FL:15 Fc:0}



static void Test_BFu33_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu15ll_BFu0c");
    static BFu33_BFu15ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15ll_BFu0c(Test_BFu33_BFu15ll_BFu0c, "BFu33_BFu15ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu15ll_BFu0i) C1{ FL:33 FL:15 Fi:0}



static void Test_BFu33_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu15ll_BFu0i");
    static BFu33_BFu15ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15ll_BFu0i(Test_BFu33_BFu15ll_BFu0i, "BFu33_BFu15ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu15ll_BFu0ll) C1{ FL:33 FL:15 FL:0}



static void Test_BFu33_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu15ll_BFu0ll");
    static BFu33_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15ll_BFu0ll(Test_BFu33_BFu15ll_BFu0ll, "BFu33_BFu15ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu15ll_BFu0s) C1{ FL:33 FL:15 Fs:0}



static void Test_BFu33_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu15ll_BFu0s");
    static BFu33_BFu15ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15ll_BFu0s(Test_BFu33_BFu15ll_BFu0s, "BFu33_BFu15ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15s_BFu0c  {
  __tsu64 v1:33;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu15s_BFu0c) C1{ FL:33 Fs:15 Fc:0}



static void Test_BFu33_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu33_BFu15s_BFu0c");
    static BFu33_BFu15s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15s_BFu0c(Test_BFu33_BFu15s_BFu0c, "BFu33_BFu15s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15s_BFu0i  {
  __tsu64 v1:33;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu15s_BFu0i) C1{ FL:33 Fs:15 Fi:0}



static void Test_BFu33_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu33_BFu15s_BFu0i");
    static BFu33_BFu15s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15s_BFu0i(Test_BFu33_BFu15s_BFu0i, "BFu33_BFu15s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15s_BFu0ll  {
  __tsu64 v1:33;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu15s_BFu0ll) C1{ FL:33 Fs:15 FL:0}



static void Test_BFu33_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu15s_BFu0ll");
    static BFu33_BFu15s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15s_BFu0ll(Test_BFu33_BFu15s_BFu0ll, "BFu33_BFu15s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu15s_BFu0s  {
  __tsu64 v1:33;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu15s_BFu0s) C1{ FL:33 Fs:15 Fs:0}



static void Test_BFu33_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu33_BFu15s_BFu0s");
    static BFu33_BFu15s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 15, 1, "BFu33_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 15, hide_ull(1LL<<14), "BFu33_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu15s_BFu0s(Test_BFu33_BFu15s_BFu0s, "BFu33_BFu15s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16i_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu16i_BFu0c) C1{ FL:33 Fi:16 Fc:0}



static void Test_BFu33_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu16i_BFu0c");
    static BFu33_BFu16i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu33_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu33_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16i_BFu0c(Test_BFu33_BFu16i_BFu0c, "BFu33_BFu16i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16i_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu16i_BFu0i) C1{ FL:33 Fi:16 Fi:0}



static void Test_BFu33_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu16i_BFu0i");
    static BFu33_BFu16i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu33_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu33_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16i_BFu0i(Test_BFu33_BFu16i_BFu0i, "BFu33_BFu16i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu16i_BFu0ll) C1{ FL:33 Fi:16 FL:0}



static void Test_BFu33_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu16i_BFu0ll");
    static BFu33_BFu16i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu33_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu33_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16i_BFu0ll(Test_BFu33_BFu16i_BFu0ll, "BFu33_BFu16i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16i_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu16i_BFu0s) C1{ FL:33 Fi:16 Fs:0}



static void Test_BFu33_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu16i_BFu0s");
    static BFu33_BFu16i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu33_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu33_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16i_BFu0s(Test_BFu33_BFu16i_BFu0s, "BFu33_BFu16i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu16ll_BFu0c) C1{ FL:33 FL:16 Fc:0}



static void Test_BFu33_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu16ll_BFu0c");
    static BFu33_BFu16ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu33_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu33_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16ll_BFu0c(Test_BFu33_BFu16ll_BFu0c, "BFu33_BFu16ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu16ll_BFu0i) C1{ FL:33 FL:16 Fi:0}



static void Test_BFu33_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu16ll_BFu0i");
    static BFu33_BFu16ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu33_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu33_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16ll_BFu0i(Test_BFu33_BFu16ll_BFu0i, "BFu33_BFu16ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu16ll_BFu0ll) C1{ FL:33 FL:16 FL:0}



static void Test_BFu33_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu16ll_BFu0ll");
    static BFu33_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu33_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu33_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16ll_BFu0ll(Test_BFu33_BFu16ll_BFu0ll, "BFu33_BFu16ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu16ll_BFu0s) C1{ FL:33 FL:16 Fs:0}



static void Test_BFu33_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu16ll_BFu0s");
    static BFu33_BFu16ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 16, 1, "BFu33_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 16, hide_ull(1LL<<15), "BFu33_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16ll_BFu0s(Test_BFu33_BFu16ll_BFu0s, "BFu33_BFu16ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16s_BFu0c  {
  __tsu64 v1:33;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu16s_BFu0c) C1{ FL:33 Fs:16 Fc:0}



static void Test_BFu33_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu33_BFu16s_BFu0c");
    static BFu33_BFu16s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 6, 0, 16, 1, "BFu33_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 6, 0, 16, hide_ull(1LL<<15), "BFu33_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16s_BFu0c(Test_BFu33_BFu16s_BFu0c, "BFu33_BFu16s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16s_BFu0i  {
  __tsu64 v1:33;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu16s_BFu0i) C1{ FL:33 Fs:16 Fi:0}



static void Test_BFu33_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu33_BFu16s_BFu0i");
    static BFu33_BFu16s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 6, 0, 16, 1, "BFu33_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 6, 0, 16, hide_ull(1LL<<15), "BFu33_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16s_BFu0i(Test_BFu33_BFu16s_BFu0i, "BFu33_BFu16s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16s_BFu0ll  {
  __tsu64 v1:33;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu16s_BFu0ll) C1{ FL:33 Fs:16 FL:0}



static void Test_BFu33_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu16s_BFu0ll");
    static BFu33_BFu16s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 6, 0, 16, 1, "BFu33_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 6, 0, 16, hide_ull(1LL<<15), "BFu33_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16s_BFu0ll(Test_BFu33_BFu16s_BFu0ll, "BFu33_BFu16s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu16s_BFu0s  {
  __tsu64 v1:33;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu16s_BFu0s) C1{ FL:33 Fs:16 Fs:0}



static void Test_BFu33_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu33_BFu16s_BFu0s");
    static BFu33_BFu16s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 6, 0, 16, 1, "BFu33_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 6, 0, 16, hide_ull(1LL<<15), "BFu33_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu16s_BFu0s(Test_BFu33_BFu16s_BFu0s, "BFu33_BFu16s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu17i_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu17i_BFu0c) C1{ FL:33 Fi:17 Fc:0}



static void Test_BFu33_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu17i_BFu0c");
    static BFu33_BFu17i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu33_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu33_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu17i_BFu0c(Test_BFu33_BFu17i_BFu0c, "BFu33_BFu17i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu17i_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu17i_BFu0i) C1{ FL:33 Fi:17 Fi:0}



static void Test_BFu33_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu17i_BFu0i");
    static BFu33_BFu17i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu33_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu33_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu17i_BFu0i(Test_BFu33_BFu17i_BFu0i, "BFu33_BFu17i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu17i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu17i_BFu0ll) C1{ FL:33 Fi:17 FL:0}



static void Test_BFu33_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu17i_BFu0ll");
    static BFu33_BFu17i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu33_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu33_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu17i_BFu0ll(Test_BFu33_BFu17i_BFu0ll, "BFu33_BFu17i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu17i_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu17i_BFu0s) C1{ FL:33 Fi:17 Fs:0}



static void Test_BFu33_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu17i_BFu0s");
    static BFu33_BFu17i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu33_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu33_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu17i_BFu0s(Test_BFu33_BFu17i_BFu0s, "BFu33_BFu17i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu17ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu17ll_BFu0c) C1{ FL:33 FL:17 Fc:0}



static void Test_BFu33_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu17ll_BFu0c");
    static BFu33_BFu17ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu33_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu33_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu17ll_BFu0c(Test_BFu33_BFu17ll_BFu0c, "BFu33_BFu17ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu17ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu17ll_BFu0i) C1{ FL:33 FL:17 Fi:0}



static void Test_BFu33_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu17ll_BFu0i");
    static BFu33_BFu17ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu33_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu33_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu17ll_BFu0i(Test_BFu33_BFu17ll_BFu0i, "BFu33_BFu17ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu17ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu17ll_BFu0ll) C1{ FL:33 FL:17 FL:0}



static void Test_BFu33_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu17ll_BFu0ll");
    static BFu33_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu33_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu33_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu17ll_BFu0ll(Test_BFu33_BFu17ll_BFu0ll, "BFu33_BFu17ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu17ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu17ll_BFu0s) C1{ FL:33 FL:17 Fs:0}



static void Test_BFu33_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu17ll_BFu0s");
    static BFu33_BFu17ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 17, 1, "BFu33_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 17, hide_ull(1LL<<16), "BFu33_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu17ll_BFu0s(Test_BFu33_BFu17ll_BFu0s, "BFu33_BFu17ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1c_BFu0c  {
  __tsu64 v1:33;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu1c_BFu0c) C1{ FL:33 Fc:1 Fc:0}



static void Test_BFu33_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu33_BFu1c_BFu0c");
    static BFu33_BFu1c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1c_BFu0c(Test_BFu33_BFu1c_BFu0c, "BFu33_BFu1c_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1c_BFu0i  {
  __tsu64 v1:33;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu1c_BFu0i) C1{ FL:33 Fc:1 Fi:0}



static void Test_BFu33_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu33_BFu1c_BFu0i");
    static BFu33_BFu1c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1c_BFu0i(Test_BFu33_BFu1c_BFu0i, "BFu33_BFu1c_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1c_BFu0ll  {
  __tsu64 v1:33;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu1c_BFu0ll) C1{ FL:33 Fc:1 FL:0}



static void Test_BFu33_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu1c_BFu0ll");
    static BFu33_BFu1c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1c_BFu0ll(Test_BFu33_BFu1c_BFu0ll, "BFu33_BFu1c_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1c_BFu0s  {
  __tsu64 v1:33;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu1c_BFu0s) C1{ FL:33 Fc:1 Fs:0}



static void Test_BFu33_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu33_BFu1c_BFu0s");
    static BFu33_BFu1c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1c_BFu0s(Test_BFu33_BFu1c_BFu0s, "BFu33_BFu1c_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1i_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu1i_BFu0c) C1{ FL:33 Fi:1 Fc:0}



static void Test_BFu33_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu1i_BFu0c");
    static BFu33_BFu1i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1i_BFu0c(Test_BFu33_BFu1i_BFu0c, "BFu33_BFu1i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1i_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu1i_BFu0i) C1{ FL:33 Fi:1 Fi:0}



static void Test_BFu33_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu1i_BFu0i");
    static BFu33_BFu1i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1i_BFu0i(Test_BFu33_BFu1i_BFu0i, "BFu33_BFu1i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu1i_BFu0ll) C1{ FL:33 Fi:1 FL:0}



static void Test_BFu33_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu1i_BFu0ll");
    static BFu33_BFu1i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1i_BFu0ll(Test_BFu33_BFu1i_BFu0ll, "BFu33_BFu1i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1i_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu1i_BFu0s) C1{ FL:33 Fi:1 Fs:0}



static void Test_BFu33_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu1i_BFu0s");
    static BFu33_BFu1i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1i_BFu0s(Test_BFu33_BFu1i_BFu0s, "BFu33_BFu1i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu1ll_BFu0c) C1{ FL:33 FL:1 Fc:0}



static void Test_BFu33_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu1ll_BFu0c");
    static BFu33_BFu1ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1ll_BFu0c(Test_BFu33_BFu1ll_BFu0c, "BFu33_BFu1ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu1ll_BFu0i) C1{ FL:33 FL:1 Fi:0}



static void Test_BFu33_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu1ll_BFu0i");
    static BFu33_BFu1ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1ll_BFu0i(Test_BFu33_BFu1ll_BFu0i, "BFu33_BFu1ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu1ll_BFu0ll) C1{ FL:33 FL:1 FL:0}



static void Test_BFu33_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu1ll_BFu0ll");
    static BFu33_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1ll_BFu0ll(Test_BFu33_BFu1ll_BFu0ll, "BFu33_BFu1ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu1ll_BFu0s) C1{ FL:33 FL:1 Fs:0}



static void Test_BFu33_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu1ll_BFu0s");
    static BFu33_BFu1ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1ll_BFu0s(Test_BFu33_BFu1ll_BFu0s, "BFu33_BFu1ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1s_BFu0c  {
  __tsu64 v1:33;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu1s_BFu0c) C1{ FL:33 Fs:1 Fc:0}



static void Test_BFu33_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu33_BFu1s_BFu0c");
    static BFu33_BFu1s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1s_BFu0c(Test_BFu33_BFu1s_BFu0c, "BFu33_BFu1s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1s_BFu0i  {
  __tsu64 v1:33;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu1s_BFu0i) C1{ FL:33 Fs:1 Fi:0}



static void Test_BFu33_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu33_BFu1s_BFu0i");
    static BFu33_BFu1s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1s_BFu0i(Test_BFu33_BFu1s_BFu0i, "BFu33_BFu1s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1s_BFu0ll  {
  __tsu64 v1:33;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu1s_BFu0ll) C1{ FL:33 Fs:1 FL:0}



static void Test_BFu33_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu1s_BFu0ll");
    static BFu33_BFu1s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1s_BFu0ll(Test_BFu33_BFu1s_BFu0ll, "BFu33_BFu1s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu1s_BFu0s  {
  __tsu64 v1:33;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu1s_BFu0s) C1{ FL:33 Fs:1 Fs:0}



static void Test_BFu33_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu33_BFu1s_BFu0s");
    static BFu33_BFu1s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 1, 1, "BFu33_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu1s_BFu0s(Test_BFu33_BFu1s_BFu0s, "BFu33_BFu1s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu31i_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu31i_BFu0c) C1{ FL:33 Fi:31 Fc:0}



static void Test_BFu33_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu31i_BFu0c");
    static BFu33_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu33_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu33_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu31i_BFu0c(Test_BFu33_BFu31i_BFu0c, "BFu33_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu31i_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu31i_BFu0i) C1{ FL:33 Fi:31 Fi:0}



static void Test_BFu33_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu31i_BFu0i");
    static BFu33_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu33_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu33_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu31i_BFu0i(Test_BFu33_BFu31i_BFu0i, "BFu33_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu31i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu31i_BFu0ll) C1{ FL:33 Fi:31 FL:0}



static void Test_BFu33_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu31i_BFu0ll");
    static BFu33_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu33_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu33_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu31i_BFu0ll(Test_BFu33_BFu31i_BFu0ll, "BFu33_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu31i_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu31i_BFu0s) C1{ FL:33 Fi:31 Fs:0}



static void Test_BFu33_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu31i_BFu0s");
    static BFu33_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu33_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu33_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu31i_BFu0s(Test_BFu33_BFu31i_BFu0s, "BFu33_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu31ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu31ll_BFu0c) C1{ FL:33 FL:31 Fc:0}



static void Test_BFu33_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu31ll_BFu0c");
    static BFu33_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu33_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu33_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu31ll_BFu0c(Test_BFu33_BFu31ll_BFu0c, "BFu33_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu31ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu31ll_BFu0i) C1{ FL:33 FL:31 Fi:0}



static void Test_BFu33_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu31ll_BFu0i");
    static BFu33_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu33_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu33_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu31ll_BFu0i(Test_BFu33_BFu31ll_BFu0i, "BFu33_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu31ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu31ll_BFu0ll) C1{ FL:33 FL:31 FL:0}



static void Test_BFu33_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu31ll_BFu0ll");
    static BFu33_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu33_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu33_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu31ll_BFu0ll(Test_BFu33_BFu31ll_BFu0ll, "BFu33_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu31ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu31ll_BFu0s) C1{ FL:33 FL:31 Fs:0}



static void Test_BFu33_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu31ll_BFu0s");
    static BFu33_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 31, 1, "BFu33_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 31, hide_ull(1LL<<30), "BFu33_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu31ll_BFu0s(Test_BFu33_BFu31ll_BFu0s, "BFu33_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu32i_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu32i_BFu0c) C1{ FL:33 Fi:32 Fc:0}



static void Test_BFu33_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu32i_BFu0c");
    static BFu33_BFu32i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu33_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu33_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu32i_BFu0c(Test_BFu33_BFu32i_BFu0c, "BFu33_BFu32i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu32i_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu32i_BFu0i) C1{ FL:33 Fi:32 Fi:0}



static void Test_BFu33_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu32i_BFu0i");
    static BFu33_BFu32i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu33_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu33_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu32i_BFu0i(Test_BFu33_BFu32i_BFu0i, "BFu33_BFu32i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu32i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu32i_BFu0ll) C1{ FL:33 Fi:32 FL:0}



static void Test_BFu33_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu32i_BFu0ll");
    static BFu33_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu33_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu33_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu32i_BFu0ll(Test_BFu33_BFu32i_BFu0ll, "BFu33_BFu32i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu32i_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu32i_BFu0s) C1{ FL:33 Fi:32 Fs:0}



static void Test_BFu33_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu32i_BFu0s");
    static BFu33_BFu32i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "BFu33_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "BFu33_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu32i_BFu0s(Test_BFu33_BFu32i_BFu0s, "BFu33_BFu32i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu32ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu32ll_BFu0c) C1{ FL:33 FL:32 Fc:0}



static void Test_BFu33_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu32ll_BFu0c");
    static BFu33_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "BFu33_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu33_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu32ll_BFu0c(Test_BFu33_BFu32ll_BFu0c, "BFu33_BFu32ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu32ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu32ll_BFu0i) C1{ FL:33 FL:32 Fi:0}



static void Test_BFu33_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu32ll_BFu0i");
    static BFu33_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "BFu33_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu33_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu32ll_BFu0i(Test_BFu33_BFu32ll_BFu0i, "BFu33_BFu32ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu32ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu32ll_BFu0ll) C1{ FL:33 FL:32 FL:0}



static void Test_BFu33_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu32ll_BFu0ll");
    static BFu33_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "BFu33_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu33_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu32ll_BFu0ll(Test_BFu33_BFu32ll_BFu0ll, "BFu33_BFu32ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu32ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu32ll_BFu0s) C1{ FL:33 FL:32 Fs:0}



static void Test_BFu33_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu32ll_BFu0s");
    static BFu33_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, 1, "BFu33_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 32, hide_ull(1LL<<31), "BFu33_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu32ll_BFu0s(Test_BFu33_BFu32ll_BFu0s, "BFu33_BFu32ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu33_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu33_BFu0c) C1{ FL:33 FL:33 Fc:0}



static void Test_BFu33_BFu33_BFu0c()
{
  {
    init_simple_test("BFu33_BFu33_BFu0c");
    static BFu33_BFu33_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu33_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFu33_BFu33_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu33_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu33_BFu0c(Test_BFu33_BFu33_BFu0c, "BFu33_BFu33_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu33_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu33_BFu0i) C1{ FL:33 FL:33 Fi:0}



static void Test_BFu33_BFu33_BFu0i()
{
  {
    init_simple_test("BFu33_BFu33_BFu0i");
    static BFu33_BFu33_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu33_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFu33_BFu33_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu33_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu33_BFu0i(Test_BFu33_BFu33_BFu0i, "BFu33_BFu33_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu33_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu33_BFu0ll) C1{ FL:33 FL:33 FL:0}



static void Test_BFu33_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu33_BFu0ll");
    static BFu33_BFu33_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFu33_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu33_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu33_BFu0ll(Test_BFu33_BFu33_BFu0ll, "BFu33_BFu33_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu33_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu33_BFu0s) C1{ FL:33 FL:33 Fs:0}



static void Test_BFu33_BFu33_BFu0s()
{
  {
    init_simple_test("BFu33_BFu33_BFu0s");
    static BFu33_BFu33_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu33_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, 1, "BFu33_BFu33_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), ABISELECT(0,1), 33, hide_ull(1LL<<32), "BFu33_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu33_BFu0s(Test_BFu33_BFu33_BFu0s, "BFu33_BFu33_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7c_BFu0c  {
  __tsu64 v1:33;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu7c_BFu0c) C1{ FL:33 Fc:7 Fc:0}



static void Test_BFu33_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu33_BFu7c_BFu0c");
    static BFu33_BFu7c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7c_BFu0c(Test_BFu33_BFu7c_BFu0c, "BFu33_BFu7c_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7c_BFu0i  {
  __tsu64 v1:33;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu7c_BFu0i) C1{ FL:33 Fc:7 Fi:0}



static void Test_BFu33_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu33_BFu7c_BFu0i");
    static BFu33_BFu7c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7c_BFu0i(Test_BFu33_BFu7c_BFu0i, "BFu33_BFu7c_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7c_BFu0ll  {
  __tsu64 v1:33;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu7c_BFu0ll) C1{ FL:33 Fc:7 FL:0}



static void Test_BFu33_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu7c_BFu0ll");
    static BFu33_BFu7c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7c_BFu0ll(Test_BFu33_BFu7c_BFu0ll, "BFu33_BFu7c_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7c_BFu0s  {
  __tsu64 v1:33;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu7c_BFu0s) C1{ FL:33 Fc:7 Fs:0}



static void Test_BFu33_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu33_BFu7c_BFu0s");
    static BFu33_BFu7c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7c_BFu0s(Test_BFu33_BFu7c_BFu0s, "BFu33_BFu7c_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7i_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu7i_BFu0c) C1{ FL:33 Fi:7 Fc:0}



static void Test_BFu33_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu7i_BFu0c");
    static BFu33_BFu7i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7i_BFu0c(Test_BFu33_BFu7i_BFu0c, "BFu33_BFu7i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7i_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu7i_BFu0i) C1{ FL:33 Fi:7 Fi:0}



static void Test_BFu33_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu7i_BFu0i");
    static BFu33_BFu7i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7i_BFu0i(Test_BFu33_BFu7i_BFu0i, "BFu33_BFu7i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu7i_BFu0ll) C1{ FL:33 Fi:7 FL:0}



static void Test_BFu33_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu7i_BFu0ll");
    static BFu33_BFu7i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7i_BFu0ll(Test_BFu33_BFu7i_BFu0ll, "BFu33_BFu7i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7i_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu7i_BFu0s) C1{ FL:33 Fi:7 Fs:0}



static void Test_BFu33_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu7i_BFu0s");
    static BFu33_BFu7i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7i_BFu0s(Test_BFu33_BFu7i_BFu0s, "BFu33_BFu7i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu7ll_BFu0c) C1{ FL:33 FL:7 Fc:0}



static void Test_BFu33_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu7ll_BFu0c");
    static BFu33_BFu7ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7ll_BFu0c(Test_BFu33_BFu7ll_BFu0c, "BFu33_BFu7ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu7ll_BFu0i) C1{ FL:33 FL:7 Fi:0}



static void Test_BFu33_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu7ll_BFu0i");
    static BFu33_BFu7ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7ll_BFu0i(Test_BFu33_BFu7ll_BFu0i, "BFu33_BFu7ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu7ll_BFu0ll) C1{ FL:33 FL:7 FL:0}



static void Test_BFu33_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu7ll_BFu0ll");
    static BFu33_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7ll_BFu0ll(Test_BFu33_BFu7ll_BFu0ll, "BFu33_BFu7ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu7ll_BFu0s) C1{ FL:33 FL:7 Fs:0}



static void Test_BFu33_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu7ll_BFu0s");
    static BFu33_BFu7ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7ll_BFu0s(Test_BFu33_BFu7ll_BFu0s, "BFu33_BFu7ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7s_BFu0c  {
  __tsu64 v1:33;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu7s_BFu0c) C1{ FL:33 Fs:7 Fc:0}



static void Test_BFu33_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu33_BFu7s_BFu0c");
    static BFu33_BFu7s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7s_BFu0c(Test_BFu33_BFu7s_BFu0c, "BFu33_BFu7s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7s_BFu0i  {
  __tsu64 v1:33;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu7s_BFu0i) C1{ FL:33 Fs:7 Fi:0}



static void Test_BFu33_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu33_BFu7s_BFu0i");
    static BFu33_BFu7s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7s_BFu0i(Test_BFu33_BFu7s_BFu0i, "BFu33_BFu7s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7s_BFu0ll  {
  __tsu64 v1:33;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu7s_BFu0ll) C1{ FL:33 Fs:7 FL:0}



static void Test_BFu33_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu7s_BFu0ll");
    static BFu33_BFu7s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7s_BFu0ll(Test_BFu33_BFu7s_BFu0ll, "BFu33_BFu7s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu7s_BFu0s  {
  __tsu64 v1:33;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu7s_BFu0s) C1{ FL:33 Fs:7 Fs:0}



static void Test_BFu33_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu33_BFu7s_BFu0s");
    static BFu33_BFu7s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 7, 1, "BFu33_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 7, hide_ull(1LL<<6), "BFu33_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu7s_BFu0s(Test_BFu33_BFu7s_BFu0s, "BFu33_BFu7s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8c_BFu0c  {
  __tsu64 v1:33;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu8c_BFu0c) C1{ FL:33 Fc:8 Fc:0}



static void Test_BFu33_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu33_BFu8c_BFu0c");
    static BFu33_BFu8c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 5, 0, 8, 1, "BFu33_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 5, 0, 8, hide_ull(1LL<<7), "BFu33_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8c_BFu0c(Test_BFu33_BFu8c_BFu0c, "BFu33_BFu8c_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8c_BFu0i  {
  __tsu64 v1:33;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu8c_BFu0i) C1{ FL:33 Fc:8 Fi:0}



static void Test_BFu33_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu33_BFu8c_BFu0i");
    static BFu33_BFu8c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 5, 0, 8, 1, "BFu33_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 5, 0, 8, hide_ull(1LL<<7), "BFu33_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8c_BFu0i(Test_BFu33_BFu8c_BFu0i, "BFu33_BFu8c_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8c_BFu0ll  {
  __tsu64 v1:33;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu8c_BFu0ll) C1{ FL:33 Fc:8 FL:0}



static void Test_BFu33_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu8c_BFu0ll");
    static BFu33_BFu8c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 5, 0, 8, 1, "BFu33_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 5, 0, 8, hide_ull(1LL<<7), "BFu33_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8c_BFu0ll(Test_BFu33_BFu8c_BFu0ll, "BFu33_BFu8c_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8c_BFu0s  {
  __tsu64 v1:33;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu8c_BFu0s) C1{ FL:33 Fc:8 Fs:0}



static void Test_BFu33_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu33_BFu8c_BFu0s");
    static BFu33_BFu8c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 5, 0, 8, 1, "BFu33_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 5, 0, 8, hide_ull(1LL<<7), "BFu33_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8c_BFu0s(Test_BFu33_BFu8c_BFu0s, "BFu33_BFu8c_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8i_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu8i_BFu0c) C1{ FL:33 Fi:8 Fc:0}



static void Test_BFu33_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu8i_BFu0c");
    static BFu33_BFu8i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8i_BFu0c(Test_BFu33_BFu8i_BFu0c, "BFu33_BFu8i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8i_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu8i_BFu0i) C1{ FL:33 Fi:8 Fi:0}



static void Test_BFu33_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu8i_BFu0i");
    static BFu33_BFu8i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8i_BFu0i(Test_BFu33_BFu8i_BFu0i, "BFu33_BFu8i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu8i_BFu0ll) C1{ FL:33 Fi:8 FL:0}



static void Test_BFu33_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu8i_BFu0ll");
    static BFu33_BFu8i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8i_BFu0ll(Test_BFu33_BFu8i_BFu0ll, "BFu33_BFu8i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8i_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu8i_BFu0s) C1{ FL:33 Fi:8 Fs:0}



static void Test_BFu33_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu8i_BFu0s");
    static BFu33_BFu8i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8i_BFu0s(Test_BFu33_BFu8i_BFu0s, "BFu33_BFu8i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu8ll_BFu0c) C1{ FL:33 FL:8 Fc:0}



static void Test_BFu33_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu8ll_BFu0c");
    static BFu33_BFu8ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8ll_BFu0c(Test_BFu33_BFu8ll_BFu0c, "BFu33_BFu8ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu8ll_BFu0i) C1{ FL:33 FL:8 Fi:0}



static void Test_BFu33_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu8ll_BFu0i");
    static BFu33_BFu8ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8ll_BFu0i(Test_BFu33_BFu8ll_BFu0i, "BFu33_BFu8ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu8ll_BFu0ll) C1{ FL:33 FL:8 FL:0}



static void Test_BFu33_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu8ll_BFu0ll");
    static BFu33_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8ll_BFu0ll(Test_BFu33_BFu8ll_BFu0ll, "BFu33_BFu8ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu8ll_BFu0s) C1{ FL:33 FL:8 Fs:0}



static void Test_BFu33_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu8ll_BFu0s");
    static BFu33_BFu8ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8ll_BFu0s(Test_BFu33_BFu8ll_BFu0s, "BFu33_BFu8ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8s_BFu0c  {
  __tsu64 v1:33;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu8s_BFu0c) C1{ FL:33 Fs:8 Fc:0}



static void Test_BFu33_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu33_BFu8s_BFu0c");
    static BFu33_BFu8s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8s_BFu0c(Test_BFu33_BFu8s_BFu0c, "BFu33_BFu8s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8s_BFu0i  {
  __tsu64 v1:33;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu8s_BFu0i) C1{ FL:33 Fs:8 Fi:0}



static void Test_BFu33_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu33_BFu8s_BFu0i");
    static BFu33_BFu8s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8s_BFu0i(Test_BFu33_BFu8s_BFu0i, "BFu33_BFu8s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8s_BFu0ll  {
  __tsu64 v1:33;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu8s_BFu0ll) C1{ FL:33 Fs:8 FL:0}



static void Test_BFu33_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu8s_BFu0ll");
    static BFu33_BFu8s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8s_BFu0ll(Test_BFu33_BFu8s_BFu0ll, "BFu33_BFu8s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu8s_BFu0s  {
  __tsu64 v1:33;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu8s_BFu0s) C1{ FL:33 Fs:8 Fs:0}



static void Test_BFu33_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu33_BFu8s_BFu0s");
    static BFu33_BFu8s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 8, 1, "BFu33_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 8, hide_ull(1LL<<7), "BFu33_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu8s_BFu0s(Test_BFu33_BFu8s_BFu0s, "BFu33_BFu8s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9i_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu9i_BFu0c) C1{ FL:33 Fi:9 Fc:0}



static void Test_BFu33_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu33_BFu9i_BFu0c");
    static BFu33_BFu9i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9i_BFu0c(Test_BFu33_BFu9i_BFu0c, "BFu33_BFu9i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9i_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu9i_BFu0i) C1{ FL:33 Fi:9 Fi:0}



static void Test_BFu33_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu33_BFu9i_BFu0i");
    static BFu33_BFu9i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9i_BFu0i(Test_BFu33_BFu9i_BFu0i, "BFu33_BFu9i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9i_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu9i_BFu0ll) C1{ FL:33 Fi:9 FL:0}



static void Test_BFu33_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu9i_BFu0ll");
    static BFu33_BFu9i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9i_BFu0ll(Test_BFu33_BFu9i_BFu0ll, "BFu33_BFu9i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9i_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu9i_BFu0s) C1{ FL:33 Fi:9 Fs:0}



static void Test_BFu33_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu33_BFu9i_BFu0s");
    static BFu33_BFu9i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9i_BFu0s(Test_BFu33_BFu9i_BFu0s, "BFu33_BFu9i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9ll_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu9ll_BFu0c) C1{ FL:33 FL:9 Fc:0}



static void Test_BFu33_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu33_BFu9ll_BFu0c");
    static BFu33_BFu9ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9ll_BFu0c(Test_BFu33_BFu9ll_BFu0c, "BFu33_BFu9ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9ll_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu9ll_BFu0i) C1{ FL:33 FL:9 Fi:0}



static void Test_BFu33_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu33_BFu9ll_BFu0i");
    static BFu33_BFu9ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9ll_BFu0i(Test_BFu33_BFu9ll_BFu0i, "BFu33_BFu9ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9ll_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu9ll_BFu0ll) C1{ FL:33 FL:9 FL:0}



static void Test_BFu33_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu9ll_BFu0ll");
    static BFu33_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9ll_BFu0ll(Test_BFu33_BFu9ll_BFu0ll, "BFu33_BFu9ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9ll_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu9ll_BFu0s) C1{ FL:33 FL:9 Fs:0}



static void Test_BFu33_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu33_BFu9ll_BFu0s");
    static BFu33_BFu9ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9ll_BFu0s(Test_BFu33_BFu9ll_BFu0s, "BFu33_BFu9ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9s_BFu0c  {
  __tsu64 v1:33;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu33_BFu9s_BFu0c) C1{ FL:33 Fs:9 Fc:0}



static void Test_BFu33_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu33_BFu9s_BFu0c");
    static BFu33_BFu9s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9s_BFu0c(Test_BFu33_BFu9s_BFu0c, "BFu33_BFu9s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9s_BFu0i  {
  __tsu64 v1:33;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu33_BFu9s_BFu0i) C1{ FL:33 Fs:9 Fi:0}



static void Test_BFu33_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu33_BFu9s_BFu0i");
    static BFu33_BFu9s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9s_BFu0i(Test_BFu33_BFu9s_BFu0i, "BFu33_BFu9s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9s_BFu0ll  {
  __tsu64 v1:33;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu33_BFu9s_BFu0ll) C1{ FL:33 Fs:9 FL:0}



static void Test_BFu33_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu33_BFu9s_BFu0ll");
    static BFu33_BFu9s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9s_BFu0ll(Test_BFu33_BFu9s_BFu0ll, "BFu33_BFu9s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_BFu9s_BFu0s  {
  __tsu64 v1:33;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu33_BFu9s_BFu0s) C1{ FL:33 Fs:9 Fs:0}



static void Test_BFu33_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu33_BFu9s_BFu0s");
    static BFu33_BFu9s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 9, 1, "BFu33_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 4, 1, 9, hide_ull(1LL<<8), "BFu33_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu33_BFu9s_BFu0s(Test_BFu33_BFu9s_BFu0s, "BFu33_BFu9s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_C_BFu0c  {
  __tsu64 v1:33;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu33_C_BFu0c) C1{ FL:33 Fc Fc:0}



static void Test_BFu33_C_BFu0c()
{
  {
    init_simple_test("BFu33_C_BFu0c");
    static BFu33_C_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_C_BFu0c");
    check_field_offset(lv, v2, 5, "BFu33_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_C_BFu0c(Test_BFu33_C_BFu0c, "BFu33_C_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_C_BFu0i  {
  __tsu64 v1:33;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu33_C_BFu0i) C1{ FL:33 Fc Fi:0}



static void Test_BFu33_C_BFu0i()
{
  {
    init_simple_test("BFu33_C_BFu0i");
    static BFu33_C_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_C_BFu0i");
    check_field_offset(lv, v2, 5, "BFu33_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_C_BFu0i(Test_BFu33_C_BFu0i, "BFu33_C_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_C_BFu0ll  {
  __tsu64 v1:33;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu33_C_BFu0ll) C1{ FL:33 Fc FL:0}



static void Test_BFu33_C_BFu0ll()
{
  {
    init_simple_test("BFu33_C_BFu0ll");
    static BFu33_C_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_C_BFu0ll");
    check_field_offset(lv, v2, 5, "BFu33_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_C_BFu0ll(Test_BFu33_C_BFu0ll, "BFu33_C_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_C_BFu0s  {
  __tsu64 v1:33;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu33_C_BFu0s) C1{ FL:33 Fc Fs:0}



static void Test_BFu33_C_BFu0s()
{
  {
    init_simple_test("BFu33_C_BFu0s");
    static BFu33_C_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_C_BFu0s");
    check_field_offset(lv, v2, 5, "BFu33_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_C_BFu0s(Test_BFu33_C_BFu0s, "BFu33_C_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_D_BFu0c  {
  __tsu64 v1:33;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu33_D_BFu0c) C1{ FL:33 FL Fc:0}



static void Test_BFu33_D_BFu0c()
{
  {
    init_simple_test("BFu33_D_BFu0c");
    static BFu33_D_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_D_BFu0c");
    check_field_offset(lv, v2, 8, "BFu33_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_D_BFu0c(Test_BFu33_D_BFu0c, "BFu33_D_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_D_BFu0i  {
  __tsu64 v1:33;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu33_D_BFu0i) C1{ FL:33 FL Fi:0}



static void Test_BFu33_D_BFu0i()
{
  {
    init_simple_test("BFu33_D_BFu0i");
    static BFu33_D_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_D_BFu0i");
    check_field_offset(lv, v2, 8, "BFu33_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_D_BFu0i(Test_BFu33_D_BFu0i, "BFu33_D_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_D_BFu0ll  {
  __tsu64 v1:33;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu33_D_BFu0ll) C1{ FL:33 FL FL:0}



static void Test_BFu33_D_BFu0ll()
{
  {
    init_simple_test("BFu33_D_BFu0ll");
    static BFu33_D_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_D_BFu0ll");
    check_field_offset(lv, v2, 8, "BFu33_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_D_BFu0ll(Test_BFu33_D_BFu0ll, "BFu33_D_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_D_BFu0s  {
  __tsu64 v1:33;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu33_D_BFu0s) C1{ FL:33 FL Fs:0}



static void Test_BFu33_D_BFu0s()
{
  {
    init_simple_test("BFu33_D_BFu0s");
    static BFu33_D_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_D_BFu0s");
    check_field_offset(lv, v2, 8, "BFu33_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_D_BFu0s(Test_BFu33_D_BFu0s, "BFu33_D_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_F_BFu0c  {
  __tsu64 v1:33;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu33_F_BFu0c) C1{ FL:33 Fi Fc:0}



static void Test_BFu33_F_BFu0c()
{
  {
    init_simple_test("BFu33_F_BFu0c");
    static BFu33_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_F_BFu0c");
    check_field_offset(lv, v2, 8, "BFu33_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_F_BFu0c(Test_BFu33_F_BFu0c, "BFu33_F_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_F_BFu0i  {
  __tsu64 v1:33;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu33_F_BFu0i) C1{ FL:33 Fi Fi:0}



static void Test_BFu33_F_BFu0i()
{
  {
    init_simple_test("BFu33_F_BFu0i");
    static BFu33_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_F_BFu0i");
    check_field_offset(lv, v2, 8, "BFu33_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_F_BFu0i(Test_BFu33_F_BFu0i, "BFu33_F_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_F_BFu0ll  {
  __tsu64 v1:33;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu33_F_BFu0ll) C1{ FL:33 Fi FL:0}



static void Test_BFu33_F_BFu0ll()
{
  {
    init_simple_test("BFu33_F_BFu0ll");
    static BFu33_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_F_BFu0ll");
    check_field_offset(lv, v2, 8, "BFu33_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_F_BFu0ll(Test_BFu33_F_BFu0ll, "BFu33_F_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_F_BFu0s  {
  __tsu64 v1:33;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu33_F_BFu0s) C1{ FL:33 Fi Fs:0}



static void Test_BFu33_F_BFu0s()
{
  {
    init_simple_test("BFu33_F_BFu0s");
    static BFu33_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_F_BFu0s");
    check_field_offset(lv, v2, 8, "BFu33_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_F_BFu0s(Test_BFu33_F_BFu0s, "BFu33_F_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_I_BFu0c  {
  __tsu64 v1:33;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu33_I_BFu0c) C1{ FL:33 Fi Fc:0}



static void Test_BFu33_I_BFu0c()
{
  {
    init_simple_test("BFu33_I_BFu0c");
    static BFu33_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_I_BFu0c");
    check_field_offset(lv, v2, 8, "BFu33_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_I_BFu0c(Test_BFu33_I_BFu0c, "BFu33_I_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_I_BFu0i  {
  __tsu64 v1:33;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu33_I_BFu0i) C1{ FL:33 Fi Fi:0}



static void Test_BFu33_I_BFu0i()
{
  {
    init_simple_test("BFu33_I_BFu0i");
    static BFu33_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_I_BFu0i");
    check_field_offset(lv, v2, 8, "BFu33_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_I_BFu0i(Test_BFu33_I_BFu0i, "BFu33_I_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_I_BFu0ll  {
  __tsu64 v1:33;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu33_I_BFu0ll) C1{ FL:33 Fi FL:0}



static void Test_BFu33_I_BFu0ll()
{
  {
    init_simple_test("BFu33_I_BFu0ll");
    static BFu33_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_I_BFu0ll");
    check_field_offset(lv, v2, 8, "BFu33_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_I_BFu0ll(Test_BFu33_I_BFu0ll, "BFu33_I_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_I_BFu0s  {
  __tsu64 v1:33;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu33_I_BFu0s) C1{ FL:33 Fi Fs:0}



static void Test_BFu33_I_BFu0s()
{
  {
    init_simple_test("BFu33_I_BFu0s");
    static BFu33_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_I_BFu0s");
    check_field_offset(lv, v2, 8, "BFu33_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_I_BFu0s(Test_BFu33_I_BFu0s, "BFu33_I_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ip_BFu0c  {
  __tsu64 v1:33;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu33_Ip_BFu0c) C1{ FL:33 Fp Fc:0}



static void Test_BFu33_Ip_BFu0c()
{
  {
    init_simple_test("BFu33_Ip_BFu0c");
    static BFu33_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ip_BFu0c");
    check_field_offset(lv, v2, 8, "BFu33_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ip_BFu0c(Test_BFu33_Ip_BFu0c, "BFu33_Ip_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ip_BFu0i  {
  __tsu64 v1:33;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu33_Ip_BFu0i) C1{ FL:33 Fp Fi:0}



static void Test_BFu33_Ip_BFu0i()
{
  {
    init_simple_test("BFu33_Ip_BFu0i");
    static BFu33_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ip_BFu0i");
    check_field_offset(lv, v2, 8, "BFu33_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ip_BFu0i(Test_BFu33_Ip_BFu0i, "BFu33_Ip_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ip_BFu0ll  {
  __tsu64 v1:33;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu33_Ip_BFu0ll) C1{ FL:33 Fp FL:0}



static void Test_BFu33_Ip_BFu0ll()
{
  {
    init_simple_test("BFu33_Ip_BFu0ll");
    static BFu33_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ip_BFu0ll");
    check_field_offset(lv, v2, 8, "BFu33_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ip_BFu0ll(Test_BFu33_Ip_BFu0ll, "BFu33_Ip_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ip_BFu0s  {
  __tsu64 v1:33;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu33_Ip_BFu0s) C1{ FL:33 Fp Fs:0}



static void Test_BFu33_Ip_BFu0s()
{
  {
    init_simple_test("BFu33_Ip_BFu0s");
    static BFu33_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ip_BFu0s");
    check_field_offset(lv, v2, 8, "BFu33_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ip_BFu0s(Test_BFu33_Ip_BFu0s, "BFu33_Ip_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_L_BFu0c  {
  __tsu64 v1:33;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu33_L_BFu0c) C1{ FL:33 FL Fc:0}



static void Test_BFu33_L_BFu0c()
{
  {
    init_simple_test("BFu33_L_BFu0c");
    static BFu33_L_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_L_BFu0c");
    check_field_offset(lv, v2, 8, "BFu33_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_L_BFu0c(Test_BFu33_L_BFu0c, "BFu33_L_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_L_BFu0i  {
  __tsu64 v1:33;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu33_L_BFu0i) C1{ FL:33 FL Fi:0}



static void Test_BFu33_L_BFu0i()
{
  {
    init_simple_test("BFu33_L_BFu0i");
    static BFu33_L_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_L_BFu0i");
    check_field_offset(lv, v2, 8, "BFu33_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_L_BFu0i(Test_BFu33_L_BFu0i, "BFu33_L_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_L_BFu0ll  {
  __tsu64 v1:33;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu33_L_BFu0ll) C1{ FL:33 FL FL:0}



static void Test_BFu33_L_BFu0ll()
{
  {
    init_simple_test("BFu33_L_BFu0ll");
    static BFu33_L_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_L_BFu0ll");
    check_field_offset(lv, v2, 8, "BFu33_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_L_BFu0ll(Test_BFu33_L_BFu0ll, "BFu33_L_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_L_BFu0s  {
  __tsu64 v1:33;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu33_L_BFu0s) C1{ FL:33 FL Fs:0}



static void Test_BFu33_L_BFu0s()
{
  {
    init_simple_test("BFu33_L_BFu0s");
    static BFu33_L_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_L_BFu0s");
    check_field_offset(lv, v2, 8, "BFu33_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_L_BFu0s(Test_BFu33_L_BFu0s, "BFu33_L_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_S_BFu0c  {
  __tsu64 v1:33;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu33_S_BFu0c) C1{ FL:33 Fs Fc:0}



static void Test_BFu33_S_BFu0c()
{
  {
    init_simple_test("BFu33_S_BFu0c");
    static BFu33_S_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_S_BFu0c");
    check_field_offset(lv, v2, 6, "BFu33_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_S_BFu0c(Test_BFu33_S_BFu0c, "BFu33_S_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_S_BFu0i  {
  __tsu64 v1:33;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu33_S_BFu0i) C1{ FL:33 Fs Fi:0}



static void Test_BFu33_S_BFu0i()
{
  {
    init_simple_test("BFu33_S_BFu0i");
    static BFu33_S_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_S_BFu0i");
    check_field_offset(lv, v2, 6, "BFu33_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_S_BFu0i(Test_BFu33_S_BFu0i, "BFu33_S_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_S_BFu0ll  {
  __tsu64 v1:33;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu33_S_BFu0ll) C1{ FL:33 Fs FL:0}



static void Test_BFu33_S_BFu0ll()
{
  {
    init_simple_test("BFu33_S_BFu0ll");
    static BFu33_S_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_S_BFu0ll");
    check_field_offset(lv, v2, 6, "BFu33_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_S_BFu0ll(Test_BFu33_S_BFu0ll, "BFu33_S_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_S_BFu0s  {
  __tsu64 v1:33;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu33_S_BFu0s) C1{ FL:33 Fs Fs:0}



static void Test_BFu33_S_BFu0s()
{
  {
    init_simple_test("BFu33_S_BFu0s");
    static BFu33_S_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_S_BFu0s");
    check_field_offset(lv, v2, 6, "BFu33_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_S_BFu0s(Test_BFu33_S_BFu0s, "BFu33_S_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Uc_BFu0c  {
  __tsu64 v1:33;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu33_Uc_BFu0c) C1{ FL:33 Fc Fc:0}



static void Test_BFu33_Uc_BFu0c()
{
  {
    init_simple_test("BFu33_Uc_BFu0c");
    static BFu33_Uc_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Uc_BFu0c");
    check_field_offset(lv, v2, 5, "BFu33_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Uc_BFu0c(Test_BFu33_Uc_BFu0c, "BFu33_Uc_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Uc_BFu0i  {
  __tsu64 v1:33;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu33_Uc_BFu0i) C1{ FL:33 Fc Fi:0}



static void Test_BFu33_Uc_BFu0i()
{
  {
    init_simple_test("BFu33_Uc_BFu0i");
    static BFu33_Uc_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Uc_BFu0i");
    check_field_offset(lv, v2, 5, "BFu33_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Uc_BFu0i(Test_BFu33_Uc_BFu0i, "BFu33_Uc_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Uc_BFu0ll  {
  __tsu64 v1:33;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu33_Uc_BFu0ll) C1{ FL:33 Fc FL:0}



static void Test_BFu33_Uc_BFu0ll()
{
  {
    init_simple_test("BFu33_Uc_BFu0ll");
    static BFu33_Uc_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Uc_BFu0ll");
    check_field_offset(lv, v2, 5, "BFu33_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Uc_BFu0ll(Test_BFu33_Uc_BFu0ll, "BFu33_Uc_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Uc_BFu0s  {
  __tsu64 v1:33;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu33_Uc_BFu0s) C1{ FL:33 Fc Fs:0}



static void Test_BFu33_Uc_BFu0s()
{
  {
    init_simple_test("BFu33_Uc_BFu0s");
    static BFu33_Uc_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Uc_BFu0s");
    check_field_offset(lv, v2, 5, "BFu33_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Uc_BFu0s(Test_BFu33_Uc_BFu0s, "BFu33_Uc_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ui_BFu0c  {
  __tsu64 v1:33;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu33_Ui_BFu0c) C1{ FL:33 Fi Fc:0}



static void Test_BFu33_Ui_BFu0c()
{
  {
    init_simple_test("BFu33_Ui_BFu0c");
    static BFu33_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ui_BFu0c");
    check_field_offset(lv, v2, 8, "BFu33_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ui_BFu0c(Test_BFu33_Ui_BFu0c, "BFu33_Ui_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ui_BFu0i  {
  __tsu64 v1:33;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu33_Ui_BFu0i) C1{ FL:33 Fi Fi:0}



static void Test_BFu33_Ui_BFu0i()
{
  {
    init_simple_test("BFu33_Ui_BFu0i");
    static BFu33_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ui_BFu0i");
    check_field_offset(lv, v2, 8, "BFu33_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ui_BFu0i(Test_BFu33_Ui_BFu0i, "BFu33_Ui_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ui_BFu0ll  {
  __tsu64 v1:33;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu33_Ui_BFu0ll) C1{ FL:33 Fi FL:0}



static void Test_BFu33_Ui_BFu0ll()
{
  {
    init_simple_test("BFu33_Ui_BFu0ll");
    static BFu33_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ui_BFu0ll");
    check_field_offset(lv, v2, 8, "BFu33_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ui_BFu0ll(Test_BFu33_Ui_BFu0ll, "BFu33_Ui_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ui_BFu0s  {
  __tsu64 v1:33;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu33_Ui_BFu0s) C1{ FL:33 Fi Fs:0}



static void Test_BFu33_Ui_BFu0s()
{
  {
    init_simple_test("BFu33_Ui_BFu0s");
    static BFu33_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ui_BFu0s");
    check_field_offset(lv, v2, 8, "BFu33_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ui_BFu0s(Test_BFu33_Ui_BFu0s, "BFu33_Ui_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ul_BFu0c  {
  __tsu64 v1:33;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu33_Ul_BFu0c) C1{ FL:33 FL Fc:0}



static void Test_BFu33_Ul_BFu0c()
{
  {
    init_simple_test("BFu33_Ul_BFu0c");
    static BFu33_Ul_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ul_BFu0c");
    check_field_offset(lv, v2, 8, "BFu33_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ul_BFu0c(Test_BFu33_Ul_BFu0c, "BFu33_Ul_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ul_BFu0i  {
  __tsu64 v1:33;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu33_Ul_BFu0i) C1{ FL:33 FL Fi:0}



static void Test_BFu33_Ul_BFu0i()
{
  {
    init_simple_test("BFu33_Ul_BFu0i");
    static BFu33_Ul_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ul_BFu0i");
    check_field_offset(lv, v2, 8, "BFu33_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ul_BFu0i(Test_BFu33_Ul_BFu0i, "BFu33_Ul_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ul_BFu0ll  {
  __tsu64 v1:33;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu33_Ul_BFu0ll) C1{ FL:33 FL FL:0}



static void Test_BFu33_Ul_BFu0ll()
{
  {
    init_simple_test("BFu33_Ul_BFu0ll");
    static BFu33_Ul_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ul_BFu0ll");
    check_field_offset(lv, v2, 8, "BFu33_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ul_BFu0ll(Test_BFu33_Ul_BFu0ll, "BFu33_Ul_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Ul_BFu0s  {
  __tsu64 v1:33;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu33_Ul_BFu0s) C1{ FL:33 FL Fs:0}



static void Test_BFu33_Ul_BFu0s()
{
  {
    init_simple_test("BFu33_Ul_BFu0s");
    static BFu33_Ul_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(BFu33_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Ul_BFu0s");
    check_field_offset(lv, v2, 8, "BFu33_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Ul_BFu0s(Test_BFu33_Ul_BFu0s, "BFu33_Ul_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Us_BFu0c  {
  __tsu64 v1:33;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu33_Us_BFu0c) C1{ FL:33 Fs Fc:0}



static void Test_BFu33_Us_BFu0c()
{
  {
    init_simple_test("BFu33_Us_BFu0c");
    static BFu33_Us_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Us_BFu0c");
    check_field_offset(lv, v2, 6, "BFu33_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Us_BFu0c(Test_BFu33_Us_BFu0c, "BFu33_Us_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Us_BFu0i  {
  __tsu64 v1:33;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu33_Us_BFu0i) C1{ FL:33 Fs Fi:0}



static void Test_BFu33_Us_BFu0i()
{
  {
    init_simple_test("BFu33_Us_BFu0i");
    static BFu33_Us_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Us_BFu0i");
    check_field_offset(lv, v2, 6, "BFu33_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Us_BFu0i(Test_BFu33_Us_BFu0i, "BFu33_Us_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Us_BFu0ll  {
  __tsu64 v1:33;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu33_Us_BFu0ll) C1{ FL:33 Fs FL:0}



static void Test_BFu33_Us_BFu0ll()
{
  {
    init_simple_test("BFu33_Us_BFu0ll");
    static BFu33_Us_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Us_BFu0ll");
    check_field_offset(lv, v2, 6, "BFu33_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Us_BFu0ll(Test_BFu33_Us_BFu0ll, "BFu33_Us_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Us_BFu0s  {
  __tsu64 v1:33;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu33_Us_BFu0s) C1{ FL:33 Fs Fs:0}



static void Test_BFu33_Us_BFu0s()
{
  {
    init_simple_test("BFu33_Us_BFu0s");
    static BFu33_Us_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu33_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Us_BFu0s");
    check_field_offset(lv, v2, 6, "BFu33_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Us_BFu0s(Test_BFu33_Us_BFu0s, "BFu33_Us_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Vp_BFu0c  {
  __tsu64 v1:33;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu33_Vp_BFu0c) C1{ FL:33 Fp Fc:0}



static void Test_BFu33_Vp_BFu0c()
{
  {
    init_simple_test("BFu33_Vp_BFu0c");
    static BFu33_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Vp_BFu0c");
    check_field_offset(lv, v2, 8, "BFu33_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Vp_BFu0c(Test_BFu33_Vp_BFu0c, "BFu33_Vp_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Vp_BFu0i  {
  __tsu64 v1:33;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu33_Vp_BFu0i) C1{ FL:33 Fp Fi:0}



static void Test_BFu33_Vp_BFu0i()
{
  {
    init_simple_test("BFu33_Vp_BFu0i");
    static BFu33_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Vp_BFu0i");
    check_field_offset(lv, v2, 8, "BFu33_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Vp_BFu0i(Test_BFu33_Vp_BFu0i, "BFu33_Vp_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Vp_BFu0ll  {
  __tsu64 v1:33;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu33_Vp_BFu0ll) C1{ FL:33 Fp FL:0}



static void Test_BFu33_Vp_BFu0ll()
{
  {
    init_simple_test("BFu33_Vp_BFu0ll");
    static BFu33_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Vp_BFu0ll");
    check_field_offset(lv, v2, 8, "BFu33_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Vp_BFu0ll(Test_BFu33_Vp_BFu0ll, "BFu33_Vp_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu33_Vp_BFu0s  {
  __tsu64 v1:33;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu33_Vp_BFu0s) C1{ FL:33 Fp Fs:0}



static void Test_BFu33_Vp_BFu0s()
{
  {
    init_simple_test("BFu33_Vp_BFu0s");
    static BFu33_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu33_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu33_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 33, 1, "BFu33_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 33, hide_ull(1LL<<32), "BFu33_Vp_BFu0s");
    check_field_offset(lv, v2, 8, "BFu33_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu33_Vp_BFu0s(Test_BFu33_Vp_BFu0s, "BFu33_Vp_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c  {
  unsigned char v1:7;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu0c) C1{ Fc:7 Fc:0}



static void Test_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu0c");
    static BFu7c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu7c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c(Test_BFu7c_BFu0c, "BFu7c_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu0c  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu0c_BFu0c) C1{ Fc:7 Fc:0 Fc:0}



static void Test_BFu7c_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu0c");
    static BFu7c_BFu0c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu7c_BFu0c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu0c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu0c(Test_BFu7c_BFu0c_BFu0c, "BFu7c_BFu0c_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu0i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu0c_BFu0i) C1{ Fc:7 Fc:0 Fi:0}



static void Test_BFu7c_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu0i");
    static BFu7c_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu0i(Test_BFu7c_BFu0c_BFu0i, "BFu7c_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu0ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu0c_BFu0ll) C1{ Fc:7 Fc:0 FL:0}



static void Test_BFu7c_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu0ll");
    static BFu7c_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu0ll(Test_BFu7c_BFu0c_BFu0ll, "BFu7c_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu0s  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu0c_BFu0s) C1{ Fc:7 Fc:0 Fs:0}



static void Test_BFu7c_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu0s");
    static BFu7c_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu0s(Test_BFu7c_BFu0c_BFu0s, "BFu7c_BFu0c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu15i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7c_BFu0c_BFu15i) C1{ Fc:7 Fc:0 Fi:15}



static void Test_BFu7c_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu15i");
    static BFu7c_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu7c_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu15i(Test_BFu7c_BFu0c_BFu15i, "BFu7c_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu15ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7c_BFu0c_BFu15ll) C1{ Fc:7 Fc:0 FL:15}



static void Test_BFu7c_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu15ll");
    static BFu7c_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu7c_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu15ll(Test_BFu7c_BFu0c_BFu15ll, "BFu7c_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu15s  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7c_BFu0c_BFu15s) C1{ Fc:7 Fc:0 Fs:15}



static void Test_BFu7c_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu15s");
    static BFu7c_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu15s(Test_BFu7c_BFu0c_BFu15s, "BFu7c_BFu0c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu16i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7c_BFu0c_BFu16i) C1{ Fc:7 Fc:0 Fi:16}



static void Test_BFu7c_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu16i");
    static BFu7c_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu7c_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu16i(Test_BFu7c_BFu0c_BFu16i, "BFu7c_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu16ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7c_BFu0c_BFu16ll) C1{ Fc:7 Fc:0 FL:16}



static void Test_BFu7c_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu16ll");
    static BFu7c_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu7c_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu16ll(Test_BFu7c_BFu0c_BFu16ll, "BFu7c_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu16s  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7c_BFu0c_BFu16s) C1{ Fc:7 Fc:0 Fs:16}



static void Test_BFu7c_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu16s");
    static BFu7c_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu16s(Test_BFu7c_BFu0c_BFu16s, "BFu7c_BFu0c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu17i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7c_BFu0c_BFu17i) C1{ Fc:7 Fc:0 Fi:17}



static void Test_BFu7c_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu17i");
    static BFu7c_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu7c_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu17i(Test_BFu7c_BFu0c_BFu17i, "BFu7c_BFu0c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu17ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7c_BFu0c_BFu17ll) C1{ Fc:7 Fc:0 FL:17}



static void Test_BFu7c_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu17ll");
    static BFu7c_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu7c_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu17ll(Test_BFu7c_BFu0c_BFu17ll, "BFu7c_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu1c  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7c_BFu0c_BFu1c) C1{ Fc:7 Fc:0 Fc:1}



static void Test_BFu7c_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu1c");
    static BFu7c_BFu0c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7c_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu1c(Test_BFu7c_BFu0c_BFu1c, "BFu7c_BFu0c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu1i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7c_BFu0c_BFu1i) C1{ Fc:7 Fc:0 Fi:1}



static void Test_BFu7c_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu1i");
    static BFu7c_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7c_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu1i(Test_BFu7c_BFu0c_BFu1i, "BFu7c_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu1ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7c_BFu0c_BFu1ll) C1{ Fc:7 Fc:0 FL:1}



static void Test_BFu7c_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu1ll");
    static BFu7c_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7c_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu1ll(Test_BFu7c_BFu0c_BFu1ll, "BFu7c_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu1s  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7c_BFu0c_BFu1s) C1{ Fc:7 Fc:0 Fs:1}



static void Test_BFu7c_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu1s");
    static BFu7c_BFu0c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7c_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu1s(Test_BFu7c_BFu0c_BFu1s, "BFu7c_BFu0c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu31i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7c_BFu0c_BFu31i) C1{ Fc:7 Fc:0 Fi:31}



static void Test_BFu7c_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu31i");
    static BFu7c_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu31i(Test_BFu7c_BFu0c_BFu31i, "BFu7c_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu31ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7c_BFu0c_BFu31ll) C1{ Fc:7 Fc:0 FL:31}



static void Test_BFu7c_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu31ll");
    static BFu7c_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu7c_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu31ll(Test_BFu7c_BFu0c_BFu31ll, "BFu7c_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu32i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7c_BFu0c_BFu32i) C1{ Fc:7 Fc:0 Fi:32}



static void Test_BFu7c_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu32i");
    static BFu7c_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu32i(Test_BFu7c_BFu0c_BFu32i, "BFu7c_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu32ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7c_BFu0c_BFu32ll) C1{ Fc:7 Fc:0 FL:32}



static void Test_BFu7c_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu32ll");
    static BFu7c_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu7c_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu32ll(Test_BFu7c_BFu0c_BFu32ll, "BFu7c_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu33  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7c_BFu0c_BFu33) C1{ Fc:7 Fc:0 FL:33}



static void Test_BFu7c_BFu0c_BFu33()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu33");
    static BFu7c_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu7c_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu33(Test_BFu7c_BFu0c_BFu33, "BFu7c_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu7c  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7c_BFu0c_BFu7c) C1{ Fc:7 Fc:0 Fc:7}



static void Test_BFu7c_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu7c");
    static BFu7c_BFu0c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu7c(Test_BFu7c_BFu0c_BFu7c, "BFu7c_BFu0c_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu7i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7c_BFu0c_BFu7i) C1{ Fc:7 Fc:0 Fi:7}



static void Test_BFu7c_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu7i");
    static BFu7c_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu7i(Test_BFu7c_BFu0c_BFu7i, "BFu7c_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu7ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7c_BFu0c_BFu7ll) C1{ Fc:7 Fc:0 FL:7}



static void Test_BFu7c_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu7ll");
    static BFu7c_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu7ll(Test_BFu7c_BFu0c_BFu7ll, "BFu7c_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu7s  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7c_BFu0c_BFu7s) C1{ Fc:7 Fc:0 Fs:7}



static void Test_BFu7c_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu7s");
    static BFu7c_BFu0c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu7s(Test_BFu7c_BFu0c_BFu7s, "BFu7c_BFu0c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu8c  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7c_BFu0c_BFu8c) C1{ Fc:7 Fc:0 Fc:8}



static void Test_BFu7c_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu8c");
    static BFu7c_BFu0c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu8c(Test_BFu7c_BFu0c_BFu8c, "BFu7c_BFu0c_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu8i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7c_BFu0c_BFu8i) C1{ Fc:7 Fc:0 Fi:8}



static void Test_BFu7c_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu8i");
    static BFu7c_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu8i(Test_BFu7c_BFu0c_BFu8i, "BFu7c_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu8ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7c_BFu0c_BFu8ll) C1{ Fc:7 Fc:0 FL:8}



static void Test_BFu7c_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu8ll");
    static BFu7c_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu8ll(Test_BFu7c_BFu0c_BFu8ll, "BFu7c_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu8s  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7c_BFu0c_BFu8s) C1{ Fc:7 Fc:0 Fs:8}



static void Test_BFu7c_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu8s");
    static BFu7c_BFu0c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu8s(Test_BFu7c_BFu0c_BFu8s, "BFu7c_BFu0c_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu9i  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7c_BFu0c_BFu9i) C1{ Fc:7 Fc:0 Fi:9}



static void Test_BFu7c_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu9i");
    static BFu7c_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu7c_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu9i(Test_BFu7c_BFu0c_BFu9i, "BFu7c_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu9ll  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7c_BFu0c_BFu9ll) C1{ Fc:7 Fc:0 FL:9}



static void Test_BFu7c_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu9ll");
    static BFu7c_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu7c_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu9ll(Test_BFu7c_BFu0c_BFu9ll, "BFu7c_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_BFu9s  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7c_BFu0c_BFu9s) C1{ Fc:7 Fc:0 Fs:9}



static void Test_BFu7c_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu0c_BFu9s");
    static BFu7c_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7c_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_BFu9s(Test_BFu7c_BFu0c_BFu9s, "BFu7c_BFu0c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_C  {
  unsigned char v1:7;
  unsigned char  :0;
  char v2;
};
//SIG(1 BFu7c_BFu0c_C) C1{ Fc:7 Fc:0 Fc}



static void Test_BFu7c_BFu0c_C()
{
  {
    init_simple_test("BFu7c_BFu0c_C");
    static BFu7c_BFu0c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu0c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_C");
    check_field_offset(lv, v2, 1, "BFu7c_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_C(Test_BFu7c_BFu0c_C, "BFu7c_BFu0c_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_D  {
  unsigned char v1:7;
  unsigned char  :0;
  double v2;
};
//SIG(1 BFu7c_BFu0c_D) C1{ Fc:7 Fc:0 FL}



static void Test_BFu7c_BFu0c_D()
{
  {
    init_simple_test("BFu7c_BFu0c_D");
    static BFu7c_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_D(Test_BFu7c_BFu0c_D, "BFu7c_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_F  {
  unsigned char v1:7;
  unsigned char  :0;
  float v2;
};
//SIG(1 BFu7c_BFu0c_F) C1{ Fc:7 Fc:0 Fi}



static void Test_BFu7c_BFu0c_F()
{
  {
    init_simple_test("BFu7c_BFu0c_F");
    static BFu7c_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_F");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_F(Test_BFu7c_BFu0c_F, "BFu7c_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_I  {
  unsigned char v1:7;
  unsigned char  :0;
  int v2;
};
//SIG(1 BFu7c_BFu0c_I) C1{ Fc:7 Fc:0 Fi}



static void Test_BFu7c_BFu0c_I()
{
  {
    init_simple_test("BFu7c_BFu0c_I");
    static BFu7c_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_I");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_I(Test_BFu7c_BFu0c_I, "BFu7c_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_Ip  {
  unsigned char v1:7;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu7c_BFu0c_Ip) C1{ Fc:7 Fc:0 Fp}



static void Test_BFu7c_BFu0c_Ip()
{
  {
    init_simple_test("BFu7c_BFu0c_Ip");
    static BFu7c_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_Ip(Test_BFu7c_BFu0c_Ip, "BFu7c_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_L  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 BFu7c_BFu0c_L) C1{ Fc:7 Fc:0 FL}



static void Test_BFu7c_BFu0c_L()
{
  {
    init_simple_test("BFu7c_BFu0c_L");
    static BFu7c_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_L(Test_BFu7c_BFu0c_L, "BFu7c_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_S  {
  unsigned char v1:7;
  unsigned char  :0;
  short v2;
};
//SIG(1 BFu7c_BFu0c_S) C1{ Fc:7 Fc:0 Fs}



static void Test_BFu7c_BFu0c_S()
{
  {
    init_simple_test("BFu7c_BFu0c_S");
    static BFu7c_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_S");
    check_field_offset(lv, v2, 2, "BFu7c_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_S(Test_BFu7c_BFu0c_S, "BFu7c_BFu0c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_Uc  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 BFu7c_BFu0c_Uc) C1{ Fc:7 Fc:0 Fc}



static void Test_BFu7c_BFu0c_Uc()
{
  {
    init_simple_test("BFu7c_BFu0c_Uc");
    static BFu7c_BFu0c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu0c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_Uc");
    check_field_offset(lv, v2, 1, "BFu7c_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_Uc(Test_BFu7c_BFu0c_Uc, "BFu7c_BFu0c_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_Ui  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 BFu7c_BFu0c_Ui) C1{ Fc:7 Fc:0 Fi}



static void Test_BFu7c_BFu0c_Ui()
{
  {
    init_simple_test("BFu7c_BFu0c_Ui");
    static BFu7c_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_Ui");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_Ui(Test_BFu7c_BFu0c_Ui, "BFu7c_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_Ul  {
  unsigned char v1:7;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 BFu7c_BFu0c_Ul) C1{ Fc:7 Fc:0 FL}



static void Test_BFu7c_BFu0c_Ul()
{
  {
    init_simple_test("BFu7c_BFu0c_Ul");
    static BFu7c_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_Ul(Test_BFu7c_BFu0c_Ul, "BFu7c_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_Us  {
  unsigned char v1:7;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 BFu7c_BFu0c_Us) C1{ Fc:7 Fc:0 Fs}



static void Test_BFu7c_BFu0c_Us()
{
  {
    init_simple_test("BFu7c_BFu0c_Us");
    static BFu7c_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_Us");
    check_field_offset(lv, v2, 2, "BFu7c_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_Us(Test_BFu7c_BFu0c_Us, "BFu7c_BFu0c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0c_Vp  {
  unsigned char v1:7;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu7c_BFu0c_Vp) C1{ Fc:7 Fc:0 Fp}



static void Test_BFu7c_BFu0c_Vp()
{
  {
    init_simple_test("BFu7c_BFu0c_Vp");
    static BFu7c_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0c_Vp(Test_BFu7c_BFu0c_Vp, "BFu7c_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i  {
  unsigned char v1:7;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu0i) C1{ Fc:7 Fi:0}



static void Test_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu0i");
    static BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i(Test_BFu7c_BFu0i, "BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu0c  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu0i_BFu0c) C1{ Fc:7 Fi:0 Fc:0}



static void Test_BFu7c_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu0c");
    static BFu7c_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu0c(Test_BFu7c_BFu0i_BFu0c, "BFu7c_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu0i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu0i_BFu0i) C1{ Fc:7 Fi:0 Fi:0}



static void Test_BFu7c_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu0i");
    static BFu7c_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu0i(Test_BFu7c_BFu0i_BFu0i, "BFu7c_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu0ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu0i_BFu0ll) C1{ Fc:7 Fi:0 FL:0}



static void Test_BFu7c_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu0ll");
    static BFu7c_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu0ll(Test_BFu7c_BFu0i_BFu0ll, "BFu7c_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu0s  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu0i_BFu0s) C1{ Fc:7 Fi:0 Fs:0}



static void Test_BFu7c_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu0s");
    static BFu7c_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu0s(Test_BFu7c_BFu0i_BFu0s, "BFu7c_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu15i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7c_BFu0i_BFu15i) C1{ Fc:7 Fi:0 Fi:15}



static void Test_BFu7c_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu15i");
    static BFu7c_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7c_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu15i(Test_BFu7c_BFu0i_BFu15i, "BFu7c_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu15ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7c_BFu0i_BFu15ll) C1{ Fc:7 Fi:0 FL:15}



static void Test_BFu7c_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu15ll");
    static BFu7c_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7c_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu15ll(Test_BFu7c_BFu0i_BFu15ll, "BFu7c_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu15s  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7c_BFu0i_BFu15s) C1{ Fc:7 Fi:0 Fs:15}



static void Test_BFu7c_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu15s");
    static BFu7c_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7c_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7c_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu15s(Test_BFu7c_BFu0i_BFu15s, "BFu7c_BFu0i_BFu15s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu16i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7c_BFu0i_BFu16i) C1{ Fc:7 Fi:0 Fi:16}



static void Test_BFu7c_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu16i");
    static BFu7c_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7c_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu16i(Test_BFu7c_BFu0i_BFu16i, "BFu7c_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu16ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7c_BFu0i_BFu16ll) C1{ Fc:7 Fi:0 FL:16}



static void Test_BFu7c_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu16ll");
    static BFu7c_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7c_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu16ll(Test_BFu7c_BFu0i_BFu16ll, "BFu7c_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu16s  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7c_BFu0i_BFu16s) C1{ Fc:7 Fi:0 Fs:16}



static void Test_BFu7c_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu16s");
    static BFu7c_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7c_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7c_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu16s(Test_BFu7c_BFu0i_BFu16s, "BFu7c_BFu0i_BFu16s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu17i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7c_BFu0i_BFu17i) C1{ Fc:7 Fi:0 Fi:17}



static void Test_BFu7c_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu17i");
    static BFu7c_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7c_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu17i(Test_BFu7c_BFu0i_BFu17i, "BFu7c_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu17ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7c_BFu0i_BFu17ll) C1{ Fc:7 Fi:0 FL:17}



static void Test_BFu7c_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu17ll");
    static BFu7c_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7c_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu17ll(Test_BFu7c_BFu0i_BFu17ll, "BFu7c_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu1c  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7c_BFu0i_BFu1c) C1{ Fc:7 Fi:0 Fc:1}



static void Test_BFu7c_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu1c");
    static BFu7c_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu7c_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7c_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu1c(Test_BFu7c_BFu0i_BFu1c, "BFu7c_BFu0i_BFu1c", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu1i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7c_BFu0i_BFu1i) C1{ Fc:7 Fi:0 Fi:1}



static void Test_BFu7c_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu1i");
    static BFu7c_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7c_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu1i(Test_BFu7c_BFu0i_BFu1i, "BFu7c_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu1ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7c_BFu0i_BFu1ll) C1{ Fc:7 Fi:0 FL:1}



static void Test_BFu7c_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu1ll");
    static BFu7c_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7c_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu1ll(Test_BFu7c_BFu0i_BFu1ll, "BFu7c_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu1s  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7c_BFu0i_BFu1s) C1{ Fc:7 Fi:0 Fs:1}



static void Test_BFu7c_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu1s");
    static BFu7c_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7c_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7c_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu1s(Test_BFu7c_BFu0i_BFu1s, "BFu7c_BFu0i_BFu1s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu31i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7c_BFu0i_BFu31i) C1{ Fc:7 Fi:0 Fi:31}



static void Test_BFu7c_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu31i");
    static BFu7c_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu31i(Test_BFu7c_BFu0i_BFu31i, "BFu7c_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu31ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7c_BFu0i_BFu31ll) C1{ Fc:7 Fi:0 FL:31}



static void Test_BFu7c_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu31ll");
    static BFu7c_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu31ll(Test_BFu7c_BFu0i_BFu31ll, "BFu7c_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu32i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7c_BFu0i_BFu32i) C1{ Fc:7 Fi:0 Fi:32}



static void Test_BFu7c_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu32i");
    static BFu7c_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu32i(Test_BFu7c_BFu0i_BFu32i, "BFu7c_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu32ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7c_BFu0i_BFu32ll) C1{ Fc:7 Fi:0 FL:32}



static void Test_BFu7c_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu32ll");
    static BFu7c_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu32ll(Test_BFu7c_BFu0i_BFu32ll, "BFu7c_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu33  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7c_BFu0i_BFu33) C1{ Fc:7 Fi:0 FL:33}



static void Test_BFu7c_BFu0i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu33");
    static BFu7c_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu7c_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7c_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu33(Test_BFu7c_BFu0i_BFu33, "BFu7c_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu7c  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7c_BFu0i_BFu7c) C1{ Fc:7 Fi:0 Fc:7}



static void Test_BFu7c_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu7c");
    static BFu7c_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu7c_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7c_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu7c(Test_BFu7c_BFu0i_BFu7c, "BFu7c_BFu0i_BFu7c", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu7i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7c_BFu0i_BFu7i) C1{ Fc:7 Fi:0 Fi:7}



static void Test_BFu7c_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu7i");
    static BFu7c_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7c_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu7i(Test_BFu7c_BFu0i_BFu7i, "BFu7c_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu7ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7c_BFu0i_BFu7ll) C1{ Fc:7 Fi:0 FL:7}



static void Test_BFu7c_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu7ll");
    static BFu7c_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7c_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu7ll(Test_BFu7c_BFu0i_BFu7ll, "BFu7c_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu7s  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7c_BFu0i_BFu7s) C1{ Fc:7 Fi:0 Fs:7}



static void Test_BFu7c_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu7s");
    static BFu7c_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7c_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7c_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu7s(Test_BFu7c_BFu0i_BFu7s, "BFu7c_BFu0i_BFu7s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu8c  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7c_BFu0i_BFu8c) C1{ Fc:7 Fi:0 Fc:8}



static void Test_BFu7c_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu8c");
    static BFu7c_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu7c_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7c_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu8c(Test_BFu7c_BFu0i_BFu8c, "BFu7c_BFu0i_BFu8c", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu8i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7c_BFu0i_BFu8i) C1{ Fc:7 Fi:0 Fi:8}



static void Test_BFu7c_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu8i");
    static BFu7c_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7c_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu8i(Test_BFu7c_BFu0i_BFu8i, "BFu7c_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu8ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7c_BFu0i_BFu8ll) C1{ Fc:7 Fi:0 FL:8}



static void Test_BFu7c_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu8ll");
    static BFu7c_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7c_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu8ll(Test_BFu7c_BFu0i_BFu8ll, "BFu7c_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu8s  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7c_BFu0i_BFu8s) C1{ Fc:7 Fi:0 Fs:8}



static void Test_BFu7c_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu8s");
    static BFu7c_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7c_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7c_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu8s(Test_BFu7c_BFu0i_BFu8s, "BFu7c_BFu0i_BFu8s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu9i  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7c_BFu0i_BFu9i) C1{ Fc:7 Fi:0 Fi:9}



static void Test_BFu7c_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu9i");
    static BFu7c_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7c_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu9i(Test_BFu7c_BFu0i_BFu9i, "BFu7c_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu9ll  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7c_BFu0i_BFu9ll) C1{ Fc:7 Fi:0 FL:9}



static void Test_BFu7c_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu9ll");
    static BFu7c_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7c_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu9ll(Test_BFu7c_BFu0i_BFu9ll, "BFu7c_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_BFu9s  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7c_BFu0i_BFu9s) C1{ Fc:7 Fi:0 Fs:9}



static void Test_BFu7c_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu0i_BFu9s");
    static BFu7c_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7c_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7c_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_BFu9s(Test_BFu7c_BFu0i_BFu9s, "BFu7c_BFu0i_BFu9s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_C  {
  unsigned char v1:7;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu7c_BFu0i_C) C1{ Fc:7 Fi:0 Fc}



static void Test_BFu7c_BFu0i_C()
{
  {
    init_simple_test("BFu7c_BFu0i_C");
    static BFu7c_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu7c_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_C(Test_BFu7c_BFu0i_C, "BFu7c_BFu0i_C", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_D  {
  unsigned char v1:7;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu7c_BFu0i_D) C1{ Fc:7 Fi:0 FL}



static void Test_BFu7c_BFu0i_D()
{
  {
    init_simple_test("BFu7c_BFu0i_D");
    static BFu7c_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_D(Test_BFu7c_BFu0i_D, "BFu7c_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_F  {
  unsigned char v1:7;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu7c_BFu0i_F) C1{ Fc:7 Fi:0 Fi}



static void Test_BFu7c_BFu0i_F()
{
  {
    init_simple_test("BFu7c_BFu0i_F");
    static BFu7c_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_F(Test_BFu7c_BFu0i_F, "BFu7c_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_I  {
  unsigned char v1:7;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu7c_BFu0i_I) C1{ Fc:7 Fi:0 Fi}



static void Test_BFu7c_BFu0i_I()
{
  {
    init_simple_test("BFu7c_BFu0i_I");
    static BFu7c_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_I(Test_BFu7c_BFu0i_I, "BFu7c_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_Ip  {
  unsigned char v1:7;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu7c_BFu0i_Ip) C1{ Fc:7 Fi:0 Fp}



static void Test_BFu7c_BFu0i_Ip()
{
  {
    init_simple_test("BFu7c_BFu0i_Ip");
    static BFu7c_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_Ip(Test_BFu7c_BFu0i_Ip, "BFu7c_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_L  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu7c_BFu0i_L) C1{ Fc:7 Fi:0 FL}



static void Test_BFu7c_BFu0i_L()
{
  {
    init_simple_test("BFu7c_BFu0i_L");
    static BFu7c_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_L(Test_BFu7c_BFu0i_L, "BFu7c_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_S  {
  unsigned char v1:7;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu7c_BFu0i_S) C1{ Fc:7 Fi:0 Fs}



static void Test_BFu7c_BFu0i_S()
{
  {
    init_simple_test("BFu7c_BFu0i_S");
    static BFu7c_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7c_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_S(Test_BFu7c_BFu0i_S, "BFu7c_BFu0i_S", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_Uc  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu7c_BFu0i_Uc) C1{ Fc:7 Fi:0 Fc}



static void Test_BFu7c_BFu0i_Uc()
{
  {
    init_simple_test("BFu7c_BFu0i_Uc");
    static BFu7c_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu7c_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_Uc(Test_BFu7c_BFu0i_Uc, "BFu7c_BFu0i_Uc", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_Ui  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu7c_BFu0i_Ui) C1{ Fc:7 Fi:0 Fi}



static void Test_BFu7c_BFu0i_Ui()
{
  {
    init_simple_test("BFu7c_BFu0i_Ui");
    static BFu7c_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_Ui(Test_BFu7c_BFu0i_Ui, "BFu7c_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_Ul  {
  unsigned char v1:7;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu7c_BFu0i_Ul) C1{ Fc:7 Fi:0 FL}



static void Test_BFu7c_BFu0i_Ul()
{
  {
    init_simple_test("BFu7c_BFu0i_Ul");
    static BFu7c_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_Ul(Test_BFu7c_BFu0i_Ul, "BFu7c_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_Us  {
  unsigned char v1:7;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu7c_BFu0i_Us) C1{ Fc:7 Fi:0 Fs}



static void Test_BFu7c_BFu0i_Us()
{
  {
    init_simple_test("BFu7c_BFu0i_Us");
    static BFu7c_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7c_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_Us(Test_BFu7c_BFu0i_Us, "BFu7c_BFu0i_Us", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0i_Vp  {
  unsigned char v1:7;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu7c_BFu0i_Vp) C1{ Fc:7 Fi:0 Fp}



static void Test_BFu7c_BFu0i_Vp()
{
  {
    init_simple_test("BFu7c_BFu0i_Vp");
    static BFu7c_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0i_Vp(Test_BFu7c_BFu0i_Vp, "BFu7c_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll  {
  unsigned char v1:7;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu0ll) C1{ Fc:7 FL:0}



static void Test_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu0ll");
    static BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll(Test_BFu7c_BFu0ll, "BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu0c  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu0ll_BFu0c) C1{ Fc:7 FL:0 Fc:0}



static void Test_BFu7c_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu0c");
    static BFu7c_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu0c(Test_BFu7c_BFu0ll_BFu0c, "BFu7c_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu0i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu0ll_BFu0i) C1{ Fc:7 FL:0 Fi:0}



static void Test_BFu7c_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu0i");
    static BFu7c_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu0i(Test_BFu7c_BFu0ll_BFu0i, "BFu7c_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu0ll_BFu0ll) C1{ Fc:7 FL:0 FL:0}



static void Test_BFu7c_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu0ll");
    static BFu7c_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu0ll(Test_BFu7c_BFu0ll_BFu0ll, "BFu7c_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu0s  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu0ll_BFu0s) C1{ Fc:7 FL:0 Fs:0}



static void Test_BFu7c_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu0s");
    static BFu7c_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu0s(Test_BFu7c_BFu0ll_BFu0s, "BFu7c_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu15i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7c_BFu0ll_BFu15i) C1{ Fc:7 FL:0 Fi:15}



static void Test_BFu7c_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu15i");
    static BFu7c_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7c_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu15i(Test_BFu7c_BFu0ll_BFu15i, "BFu7c_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu15ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7c_BFu0ll_BFu15ll) C1{ Fc:7 FL:0 FL:15}



static void Test_BFu7c_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu15ll");
    static BFu7c_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7c_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu15ll(Test_BFu7c_BFu0ll_BFu15ll, "BFu7c_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu15s  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7c_BFu0ll_BFu15s) C1{ Fc:7 FL:0 Fs:15}



static void Test_BFu7c_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu15s");
    static BFu7c_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7c_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7c_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu15s(Test_BFu7c_BFu0ll_BFu15s, "BFu7c_BFu0ll_BFu15s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu16i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7c_BFu0ll_BFu16i) C1{ Fc:7 FL:0 Fi:16}



static void Test_BFu7c_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu16i");
    static BFu7c_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7c_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu16i(Test_BFu7c_BFu0ll_BFu16i, "BFu7c_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu16ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7c_BFu0ll_BFu16ll) C1{ Fc:7 FL:0 FL:16}



static void Test_BFu7c_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu16ll");
    static BFu7c_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7c_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu16ll(Test_BFu7c_BFu0ll_BFu16ll, "BFu7c_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu16s  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7c_BFu0ll_BFu16s) C1{ Fc:7 FL:0 Fs:16}



static void Test_BFu7c_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu16s");
    static BFu7c_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7c_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7c_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu16s(Test_BFu7c_BFu0ll_BFu16s, "BFu7c_BFu0ll_BFu16s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu17i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7c_BFu0ll_BFu17i) C1{ Fc:7 FL:0 Fi:17}



static void Test_BFu7c_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu17i");
    static BFu7c_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu7c_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu7c_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu17i(Test_BFu7c_BFu0ll_BFu17i, "BFu7c_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu17ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7c_BFu0ll_BFu17ll) C1{ Fc:7 FL:0 FL:17}



static void Test_BFu7c_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu17ll");
    static BFu7c_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu7c_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu7c_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu17ll(Test_BFu7c_BFu0ll_BFu17ll, "BFu7c_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu1c  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7c_BFu0ll_BFu1c) C1{ Fc:7 FL:0 Fc:1}



static void Test_BFu7c_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu1c");
    static BFu7c_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu7c_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7c_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu1c(Test_BFu7c_BFu0ll_BFu1c, "BFu7c_BFu0ll_BFu1c", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu1i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7c_BFu0ll_BFu1i) C1{ Fc:7 FL:0 Fi:1}



static void Test_BFu7c_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu1i");
    static BFu7c_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7c_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu1i(Test_BFu7c_BFu0ll_BFu1i, "BFu7c_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu1ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7c_BFu0ll_BFu1ll) C1{ Fc:7 FL:0 FL:1}



static void Test_BFu7c_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu1ll");
    static BFu7c_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7c_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu1ll(Test_BFu7c_BFu0ll_BFu1ll, "BFu7c_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu1s  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7c_BFu0ll_BFu1s) C1{ Fc:7 FL:0 Fs:1}



static void Test_BFu7c_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu1s");
    static BFu7c_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7c_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7c_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu1s(Test_BFu7c_BFu0ll_BFu1s, "BFu7c_BFu0ll_BFu1s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu31i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7c_BFu0ll_BFu31i) C1{ Fc:7 FL:0 Fi:31}



static void Test_BFu7c_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu31i");
    static BFu7c_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu7c_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu7c_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu31i(Test_BFu7c_BFu0ll_BFu31i, "BFu7c_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu31ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7c_BFu0ll_BFu31ll) C1{ Fc:7 FL:0 FL:31}



static void Test_BFu7c_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu31ll");
    static BFu7c_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu7c_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu7c_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu31ll(Test_BFu7c_BFu0ll_BFu31ll, "BFu7c_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu32i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7c_BFu0ll_BFu32i) C1{ Fc:7 FL:0 Fi:32}



static void Test_BFu7c_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu32i");
    static BFu7c_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu7c_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu7c_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu32i(Test_BFu7c_BFu0ll_BFu32i, "BFu7c_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu32ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7c_BFu0ll_BFu32ll) C1{ Fc:7 FL:0 FL:32}



static void Test_BFu7c_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu32ll");
    static BFu7c_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu7c_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu7c_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu32ll(Test_BFu7c_BFu0ll_BFu32ll, "BFu7c_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu33  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7c_BFu0ll_BFu33) C1{ Fc:7 FL:0 FL:33}



static void Test_BFu7c_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu33");
    static BFu7c_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu7c_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7c_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu33(Test_BFu7c_BFu0ll_BFu33, "BFu7c_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu7c  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7c_BFu0ll_BFu7c) C1{ Fc:7 FL:0 Fc:7}



static void Test_BFu7c_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu7c");
    static BFu7c_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu7c_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7c_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu7c(Test_BFu7c_BFu0ll_BFu7c, "BFu7c_BFu0ll_BFu7c", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu7i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7c_BFu0ll_BFu7i) C1{ Fc:7 FL:0 Fi:7}



static void Test_BFu7c_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu7i");
    static BFu7c_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7c_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu7i(Test_BFu7c_BFu0ll_BFu7i, "BFu7c_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu7ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7c_BFu0ll_BFu7ll) C1{ Fc:7 FL:0 FL:7}



static void Test_BFu7c_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu7ll");
    static BFu7c_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7c_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu7ll(Test_BFu7c_BFu0ll_BFu7ll, "BFu7c_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu7s  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7c_BFu0ll_BFu7s) C1{ Fc:7 FL:0 Fs:7}



static void Test_BFu7c_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu7s");
    static BFu7c_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7c_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7c_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu7s(Test_BFu7c_BFu0ll_BFu7s, "BFu7c_BFu0ll_BFu7s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu8c  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7c_BFu0ll_BFu8c) C1{ Fc:7 FL:0 Fc:8}



static void Test_BFu7c_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu8c");
    static BFu7c_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu7c_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7c_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu8c(Test_BFu7c_BFu0ll_BFu8c, "BFu7c_BFu0ll_BFu8c", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu8i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7c_BFu0ll_BFu8i) C1{ Fc:7 FL:0 Fi:8}



static void Test_BFu7c_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu8i");
    static BFu7c_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7c_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu8i(Test_BFu7c_BFu0ll_BFu8i, "BFu7c_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu8ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7c_BFu0ll_BFu8ll) C1{ Fc:7 FL:0 FL:8}



static void Test_BFu7c_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu8ll");
    static BFu7c_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7c_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu8ll(Test_BFu7c_BFu0ll_BFu8ll, "BFu7c_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu8s  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7c_BFu0ll_BFu8s) C1{ Fc:7 FL:0 Fs:8}



static void Test_BFu7c_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu8s");
    static BFu7c_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7c_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7c_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu8s(Test_BFu7c_BFu0ll_BFu8s, "BFu7c_BFu0ll_BFu8s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu9i  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7c_BFu0ll_BFu9i) C1{ Fc:7 FL:0 Fi:9}



static void Test_BFu7c_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu9i");
    static BFu7c_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7c_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu9i(Test_BFu7c_BFu0ll_BFu9i, "BFu7c_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu9ll  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7c_BFu0ll_BFu9ll) C1{ Fc:7 FL:0 FL:9}



static void Test_BFu7c_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu9ll");
    static BFu7c_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7c_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu9ll(Test_BFu7c_BFu0ll_BFu9ll, "BFu7c_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_BFu9s  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7c_BFu0ll_BFu9s) C1{ Fc:7 FL:0 Fs:9}



static void Test_BFu7c_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu0ll_BFu9s");
    static BFu7c_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7c_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7c_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_BFu9s(Test_BFu7c_BFu0ll_BFu9s, "BFu7c_BFu0ll_BFu9s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_C  {
  unsigned char v1:7;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu7c_BFu0ll_C) C1{ Fc:7 FL:0 Fc}



static void Test_BFu7c_BFu0ll_C()
{
  {
    init_simple_test("BFu7c_BFu0ll_C");
    static BFu7c_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu7c_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_C(Test_BFu7c_BFu0ll_C, "BFu7c_BFu0ll_C", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_D  {
  unsigned char v1:7;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu7c_BFu0ll_D) C1{ Fc:7 FL:0 FL}



static void Test_BFu7c_BFu0ll_D()
{
  {
    init_simple_test("BFu7c_BFu0ll_D");
    static BFu7c_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_D(Test_BFu7c_BFu0ll_D, "BFu7c_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_F  {
  unsigned char v1:7;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu7c_BFu0ll_F) C1{ Fc:7 FL:0 Fi}



static void Test_BFu7c_BFu0ll_F()
{
  {
    init_simple_test("BFu7c_BFu0ll_F");
    static BFu7c_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_F(Test_BFu7c_BFu0ll_F, "BFu7c_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_I  {
  unsigned char v1:7;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu7c_BFu0ll_I) C1{ Fc:7 FL:0 Fi}



static void Test_BFu7c_BFu0ll_I()
{
  {
    init_simple_test("BFu7c_BFu0ll_I");
    static BFu7c_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_I(Test_BFu7c_BFu0ll_I, "BFu7c_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_Ip  {
  unsigned char v1:7;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu7c_BFu0ll_Ip) C1{ Fc:7 FL:0 Fp}



static void Test_BFu7c_BFu0ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu0ll_Ip");
    static BFu7c_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_Ip(Test_BFu7c_BFu0ll_Ip, "BFu7c_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_L  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu7c_BFu0ll_L) C1{ Fc:7 FL:0 FL}



static void Test_BFu7c_BFu0ll_L()
{
  {
    init_simple_test("BFu7c_BFu0ll_L");
    static BFu7c_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_L(Test_BFu7c_BFu0ll_L, "BFu7c_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_S  {
  unsigned char v1:7;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu7c_BFu0ll_S) C1{ Fc:7 FL:0 Fs}



static void Test_BFu7c_BFu0ll_S()
{
  {
    init_simple_test("BFu7c_BFu0ll_S");
    static BFu7c_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7c_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_S(Test_BFu7c_BFu0ll_S, "BFu7c_BFu0ll_S", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_Uc  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu7c_BFu0ll_Uc) C1{ Fc:7 FL:0 Fc}



static void Test_BFu7c_BFu0ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu0ll_Uc");
    static BFu7c_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu7c_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_Uc(Test_BFu7c_BFu0ll_Uc, "BFu7c_BFu0ll_Uc", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_Ui  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu7c_BFu0ll_Ui) C1{ Fc:7 FL:0 Fi}



static void Test_BFu7c_BFu0ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu0ll_Ui");
    static BFu7c_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7c_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_Ui(Test_BFu7c_BFu0ll_Ui, "BFu7c_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_Ul  {
  unsigned char v1:7;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu7c_BFu0ll_Ul) C1{ Fc:7 FL:0 FL}



static void Test_BFu7c_BFu0ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu0ll_Ul");
    static BFu7c_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_Ul(Test_BFu7c_BFu0ll_Ul, "BFu7c_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_Us  {
  unsigned char v1:7;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu7c_BFu0ll_Us) C1{ Fc:7 FL:0 Fs}



static void Test_BFu7c_BFu0ll_Us()
{
  {
    init_simple_test("BFu7c_BFu0ll_Us");
    static BFu7c_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7c_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_Us(Test_BFu7c_BFu0ll_Us, "BFu7c_BFu0ll_Us", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0ll_Vp  {
  unsigned char v1:7;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu7c_BFu0ll_Vp) C1{ Fc:7 FL:0 Fp}



static void Test_BFu7c_BFu0ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu0ll_Vp");
    static BFu7c_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0ll_Vp(Test_BFu7c_BFu0ll_Vp, "BFu7c_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s  {
  unsigned char v1:7;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu0s) C1{ Fc:7 Fs:0}



static void Test_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu0s");
    static BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s(Test_BFu7c_BFu0s, "BFu7c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu0c  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu0s_BFu0c) C1{ Fc:7 Fs:0 Fc:0}



static void Test_BFu7c_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu0c");
    static BFu7c_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu0c(Test_BFu7c_BFu0s_BFu0c, "BFu7c_BFu0s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu0i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu0s_BFu0i) C1{ Fc:7 Fs:0 Fi:0}



static void Test_BFu7c_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu0i");
    static BFu7c_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu0i(Test_BFu7c_BFu0s_BFu0i, "BFu7c_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu0ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu0s_BFu0ll) C1{ Fc:7 Fs:0 FL:0}



static void Test_BFu7c_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu0ll");
    static BFu7c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu0ll(Test_BFu7c_BFu0s_BFu0ll, "BFu7c_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu0s  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu0s_BFu0s) C1{ Fc:7 Fs:0 Fs:0}



static void Test_BFu7c_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu0s");
    static BFu7c_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu0s(Test_BFu7c_BFu0s_BFu0s, "BFu7c_BFu0s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu15i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7c_BFu0s_BFu15i) C1{ Fc:7 Fs:0 Fi:15}



static void Test_BFu7c_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu15i");
    static BFu7c_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu15i(Test_BFu7c_BFu0s_BFu15i, "BFu7c_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu15ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7c_BFu0s_BFu15ll) C1{ Fc:7 Fs:0 FL:15}



static void Test_BFu7c_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu15ll");
    static BFu7c_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu15ll(Test_BFu7c_BFu0s_BFu15ll, "BFu7c_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu15s  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7c_BFu0s_BFu15s) C1{ Fc:7 Fs:0 Fs:15}



static void Test_BFu7c_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu15s");
    static BFu7c_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu15s(Test_BFu7c_BFu0s_BFu15s, "BFu7c_BFu0s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu16i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7c_BFu0s_BFu16i) C1{ Fc:7 Fs:0 Fi:16}



static void Test_BFu7c_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu16i");
    static BFu7c_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu16i(Test_BFu7c_BFu0s_BFu16i, "BFu7c_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu16ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7c_BFu0s_BFu16ll) C1{ Fc:7 Fs:0 FL:16}



static void Test_BFu7c_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu16ll");
    static BFu7c_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu16ll(Test_BFu7c_BFu0s_BFu16ll, "BFu7c_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu16s  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7c_BFu0s_BFu16s) C1{ Fc:7 Fs:0 Fs:16}



static void Test_BFu7c_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu16s");
    static BFu7c_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu16s(Test_BFu7c_BFu0s_BFu16s, "BFu7c_BFu0s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu17i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7c_BFu0s_BFu17i) C1{ Fc:7 Fs:0 Fi:17}



static void Test_BFu7c_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu17i");
    static BFu7c_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7c_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu17i(Test_BFu7c_BFu0s_BFu17i, "BFu7c_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu17ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7c_BFu0s_BFu17ll) C1{ Fc:7 Fs:0 FL:17}



static void Test_BFu7c_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu17ll");
    static BFu7c_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu7c_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu17ll(Test_BFu7c_BFu0s_BFu17ll, "BFu7c_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu1c  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7c_BFu0s_BFu1c) C1{ Fc:7 Fs:0 Fc:1}



static void Test_BFu7c_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu1c");
    static BFu7c_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu7c_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7c_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu1c(Test_BFu7c_BFu0s_BFu1c, "BFu7c_BFu0s_BFu1c", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu1i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7c_BFu0s_BFu1i) C1{ Fc:7 Fs:0 Fi:1}



static void Test_BFu7c_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu1i");
    static BFu7c_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7c_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu1i(Test_BFu7c_BFu0s_BFu1i, "BFu7c_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu1ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7c_BFu0s_BFu1ll) C1{ Fc:7 Fs:0 FL:1}



static void Test_BFu7c_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu1ll");
    static BFu7c_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7c_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu1ll(Test_BFu7c_BFu0s_BFu1ll, "BFu7c_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu1s  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7c_BFu0s_BFu1s) C1{ Fc:7 Fs:0 Fs:1}



static void Test_BFu7c_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu1s");
    static BFu7c_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7c_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu1s(Test_BFu7c_BFu0s_BFu1s, "BFu7c_BFu0s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu31i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7c_BFu0s_BFu31i) C1{ Fc:7 Fs:0 Fi:31}



static void Test_BFu7c_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu31i");
    static BFu7c_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu31i(Test_BFu7c_BFu0s_BFu31i, "BFu7c_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu31ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7c_BFu0s_BFu31ll) C1{ Fc:7 Fs:0 FL:31}



static void Test_BFu7c_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu31ll");
    static BFu7c_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu7c_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu31ll(Test_BFu7c_BFu0s_BFu31ll, "BFu7c_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu32i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7c_BFu0s_BFu32i) C1{ Fc:7 Fs:0 Fi:32}



static void Test_BFu7c_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu32i");
    static BFu7c_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu32i(Test_BFu7c_BFu0s_BFu32i, "BFu7c_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu32ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7c_BFu0s_BFu32ll) C1{ Fc:7 Fs:0 FL:32}



static void Test_BFu7c_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu32ll");
    static BFu7c_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu7c_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu32ll(Test_BFu7c_BFu0s_BFu32ll, "BFu7c_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu33  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7c_BFu0s_BFu33) C1{ Fc:7 Fs:0 FL:33}



static void Test_BFu7c_BFu0s_BFu33()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu33");
    static BFu7c_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu7c_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu33(Test_BFu7c_BFu0s_BFu33, "BFu7c_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu7c  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7c_BFu0s_BFu7c) C1{ Fc:7 Fs:0 Fc:7}



static void Test_BFu7c_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu7c");
    static BFu7c_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu7c_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7c_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu7c(Test_BFu7c_BFu0s_BFu7c, "BFu7c_BFu0s_BFu7c", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu7i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7c_BFu0s_BFu7i) C1{ Fc:7 Fs:0 Fi:7}



static void Test_BFu7c_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu7i");
    static BFu7c_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7c_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu7i(Test_BFu7c_BFu0s_BFu7i, "BFu7c_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu7ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7c_BFu0s_BFu7ll) C1{ Fc:7 Fs:0 FL:7}



static void Test_BFu7c_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu7ll");
    static BFu7c_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7c_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu7ll(Test_BFu7c_BFu0s_BFu7ll, "BFu7c_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu7s  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7c_BFu0s_BFu7s) C1{ Fc:7 Fs:0 Fs:7}



static void Test_BFu7c_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu7s");
    static BFu7c_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7c_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu7s(Test_BFu7c_BFu0s_BFu7s, "BFu7c_BFu0s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu8c  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7c_BFu0s_BFu8c) C1{ Fc:7 Fs:0 Fc:8}



static void Test_BFu7c_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu8c");
    static BFu7c_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu7c_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7c_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu8c(Test_BFu7c_BFu0s_BFu8c, "BFu7c_BFu0s_BFu8c", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu8i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7c_BFu0s_BFu8i) C1{ Fc:7 Fs:0 Fi:8}



static void Test_BFu7c_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu8i");
    static BFu7c_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7c_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu8i(Test_BFu7c_BFu0s_BFu8i, "BFu7c_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu8ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7c_BFu0s_BFu8ll) C1{ Fc:7 Fs:0 FL:8}



static void Test_BFu7c_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu8ll");
    static BFu7c_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7c_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu8ll(Test_BFu7c_BFu0s_BFu8ll, "BFu7c_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu8s  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7c_BFu0s_BFu8s) C1{ Fc:7 Fs:0 Fs:8}



static void Test_BFu7c_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu8s");
    static BFu7c_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7c_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu8s(Test_BFu7c_BFu0s_BFu8s, "BFu7c_BFu0s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu9i  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7c_BFu0s_BFu9i) C1{ Fc:7 Fs:0 Fi:9}



static void Test_BFu7c_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu9i");
    static BFu7c_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7c_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu9i(Test_BFu7c_BFu0s_BFu9i, "BFu7c_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu9ll  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7c_BFu0s_BFu9ll) C1{ Fc:7 Fs:0 FL:9}



static void Test_BFu7c_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu9ll");
    static BFu7c_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7c_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu9ll(Test_BFu7c_BFu0s_BFu9ll, "BFu7c_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_BFu9s  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7c_BFu0s_BFu9s) C1{ Fc:7 Fs:0 Fs:9}



static void Test_BFu7c_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu0s_BFu9s");
    static BFu7c_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7c_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_BFu9s(Test_BFu7c_BFu0s_BFu9s, "BFu7c_BFu0s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_C  {
  unsigned char v1:7;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu7c_BFu0s_C) C1{ Fc:7 Fs:0 Fc}



static void Test_BFu7c_BFu0s_C()
{
  {
    init_simple_test("BFu7c_BFu0s_C");
    static BFu7c_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu7c_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu7c_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_C(Test_BFu7c_BFu0s_C, "BFu7c_BFu0s_C", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_D  {
  unsigned char v1:7;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu7c_BFu0s_D) C1{ Fc:7 Fs:0 FL}



static void Test_BFu7c_BFu0s_D()
{
  {
    init_simple_test("BFu7c_BFu0s_D");
    static BFu7c_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_D(Test_BFu7c_BFu0s_D, "BFu7c_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_F  {
  unsigned char v1:7;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu7c_BFu0s_F) C1{ Fc:7 Fs:0 Fi}



static void Test_BFu7c_BFu0s_F()
{
  {
    init_simple_test("BFu7c_BFu0s_F");
    static BFu7c_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_F(Test_BFu7c_BFu0s_F, "BFu7c_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_I  {
  unsigned char v1:7;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu7c_BFu0s_I) C1{ Fc:7 Fs:0 Fi}



static void Test_BFu7c_BFu0s_I()
{
  {
    init_simple_test("BFu7c_BFu0s_I");
    static BFu7c_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_I(Test_BFu7c_BFu0s_I, "BFu7c_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_Ip  {
  unsigned char v1:7;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu7c_BFu0s_Ip) C1{ Fc:7 Fs:0 Fp}



static void Test_BFu7c_BFu0s_Ip()
{
  {
    init_simple_test("BFu7c_BFu0s_Ip");
    static BFu7c_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_Ip(Test_BFu7c_BFu0s_Ip, "BFu7c_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_L  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu7c_BFu0s_L) C1{ Fc:7 Fs:0 FL}



static void Test_BFu7c_BFu0s_L()
{
  {
    init_simple_test("BFu7c_BFu0s_L");
    static BFu7c_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_L(Test_BFu7c_BFu0s_L, "BFu7c_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_S  {
  unsigned char v1:7;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu7c_BFu0s_S) C1{ Fc:7 Fs:0 Fs}



static void Test_BFu7c_BFu0s_S()
{
  {
    init_simple_test("BFu7c_BFu0s_S");
    static BFu7c_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu7c_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_S(Test_BFu7c_BFu0s_S, "BFu7c_BFu0s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_Uc  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu7c_BFu0s_Uc) C1{ Fc:7 Fs:0 Fc}



static void Test_BFu7c_BFu0s_Uc()
{
  {
    init_simple_test("BFu7c_BFu0s_Uc");
    static BFu7c_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu7c_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu7c_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_Uc(Test_BFu7c_BFu0s_Uc, "BFu7c_BFu0s_Uc", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_Ui  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu7c_BFu0s_Ui) C1{ Fc:7 Fs:0 Fi}



static void Test_BFu7c_BFu0s_Ui()
{
  {
    init_simple_test("BFu7c_BFu0s_Ui");
    static BFu7c_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu7c_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_Ui(Test_BFu7c_BFu0s_Ui, "BFu7c_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_Ul  {
  unsigned char v1:7;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu7c_BFu0s_Ul) C1{ Fc:7 Fs:0 FL}



static void Test_BFu7c_BFu0s_Ul()
{
  {
    init_simple_test("BFu7c_BFu0s_Ul");
    static BFu7c_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_Ul(Test_BFu7c_BFu0s_Ul, "BFu7c_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_Us  {
  unsigned char v1:7;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu7c_BFu0s_Us) C1{ Fc:7 Fs:0 Fs}



static void Test_BFu7c_BFu0s_Us()
{
  {
    init_simple_test("BFu7c_BFu0s_Us");
    static BFu7c_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu7c_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_Us(Test_BFu7c_BFu0s_Us, "BFu7c_BFu0s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu0s_Vp  {
  unsigned char v1:7;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu7c_BFu0s_Vp) C1{ Fc:7 Fs:0 Fp}



static void Test_BFu7c_BFu0s_Vp()
{
  {
    init_simple_test("BFu7c_BFu0s_Vp");
    static BFu7c_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu0s_Vp(Test_BFu7c_BFu0s_Vp, "BFu7c_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15i_BFu0c  {
  unsigned char v1:7;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu15i_BFu0c) C1{ Fc:7 Fi:15 Fc:0}



static void Test_BFu7c_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu0c");
    static BFu7c_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15i_BFu0c(Test_BFu7c_BFu15i_BFu0c, "BFu7c_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15i_BFu0i  {
  unsigned char v1:7;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu15i_BFu0i) C1{ Fc:7 Fi:15 Fi:0}



static void Test_BFu7c_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu0i");
    static BFu7c_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15i_BFu0i(Test_BFu7c_BFu15i_BFu0i, "BFu7c_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15i_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu15i_BFu0ll) C1{ Fc:7 Fi:15 FL:0}



static void Test_BFu7c_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu0ll");
    static BFu7c_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15i_BFu0ll(Test_BFu7c_BFu15i_BFu0ll, "BFu7c_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15i_BFu0s  {
  unsigned char v1:7;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu15i_BFu0s) C1{ Fc:7 Fi:15 Fs:0}



static void Test_BFu7c_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu0s");
    static BFu7c_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15i_BFu0s(Test_BFu7c_BFu15i_BFu0s, "BFu7c_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15ll_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu15ll_BFu0c) C1{ Fc:7 FL:15 Fc:0}



static void Test_BFu7c_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu0c");
    static BFu7c_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15ll_BFu0c(Test_BFu7c_BFu15ll_BFu0c, "BFu7c_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15ll_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu15ll_BFu0i) C1{ Fc:7 FL:15 Fi:0}



static void Test_BFu7c_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu0i");
    static BFu7c_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15ll_BFu0i(Test_BFu7c_BFu15ll_BFu0i, "BFu7c_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu15ll_BFu0ll) C1{ Fc:7 FL:15 FL:0}



static void Test_BFu7c_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu0ll");
    static BFu7c_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15ll_BFu0ll(Test_BFu7c_BFu15ll_BFu0ll, "BFu7c_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15ll_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu15ll_BFu0s) C1{ Fc:7 FL:15 Fs:0}



static void Test_BFu7c_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu0s");
    static BFu7c_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15ll_BFu0s(Test_BFu7c_BFu15ll_BFu0s, "BFu7c_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15s_BFu0c  {
  unsigned char v1:7;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu15s_BFu0c) C1{ Fc:7 Fs:15 Fc:0}



static void Test_BFu7c_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu0c");
    static BFu7c_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15s_BFu0c(Test_BFu7c_BFu15s_BFu0c, "BFu7c_BFu15s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15s_BFu0i  {
  unsigned char v1:7;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu15s_BFu0i) C1{ Fc:7 Fs:15 Fi:0}



static void Test_BFu7c_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu0i");
    static BFu7c_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15s_BFu0i(Test_BFu7c_BFu15s_BFu0i, "BFu7c_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15s_BFu0ll  {
  unsigned char v1:7;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu15s_BFu0ll) C1{ Fc:7 Fs:15 FL:0}



static void Test_BFu7c_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu0ll");
    static BFu7c_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15s_BFu0ll(Test_BFu7c_BFu15s_BFu0ll, "BFu7c_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu15s_BFu0s  {
  unsigned char v1:7;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu15s_BFu0s) C1{ Fc:7 Fs:15 Fs:0}



static void Test_BFu7c_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu0s");
    static BFu7c_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu15s_BFu0s(Test_BFu7c_BFu15s_BFu0s, "BFu7c_BFu15s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16i_BFu0c  {
  unsigned char v1:7;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu16i_BFu0c) C1{ Fc:7 Fi:16 Fc:0}



static void Test_BFu7c_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu0c");
    static BFu7c_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16i_BFu0c(Test_BFu7c_BFu16i_BFu0c, "BFu7c_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16i_BFu0i  {
  unsigned char v1:7;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu16i_BFu0i) C1{ Fc:7 Fi:16 Fi:0}



static void Test_BFu7c_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu0i");
    static BFu7c_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16i_BFu0i(Test_BFu7c_BFu16i_BFu0i, "BFu7c_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16i_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu16i_BFu0ll) C1{ Fc:7 Fi:16 FL:0}



static void Test_BFu7c_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu0ll");
    static BFu7c_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16i_BFu0ll(Test_BFu7c_BFu16i_BFu0ll, "BFu7c_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16i_BFu0s  {
  unsigned char v1:7;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu16i_BFu0s) C1{ Fc:7 Fi:16 Fs:0}



static void Test_BFu7c_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu0s");
    static BFu7c_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16i_BFu0s(Test_BFu7c_BFu16i_BFu0s, "BFu7c_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16ll_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu16ll_BFu0c) C1{ Fc:7 FL:16 Fc:0}



static void Test_BFu7c_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu0c");
    static BFu7c_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16ll_BFu0c(Test_BFu7c_BFu16ll_BFu0c, "BFu7c_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16ll_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu16ll_BFu0i) C1{ Fc:7 FL:16 Fi:0}



static void Test_BFu7c_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu0i");
    static BFu7c_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16ll_BFu0i(Test_BFu7c_BFu16ll_BFu0i, "BFu7c_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu16ll_BFu0ll) C1{ Fc:7 FL:16 FL:0}



static void Test_BFu7c_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu0ll");
    static BFu7c_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16ll_BFu0ll(Test_BFu7c_BFu16ll_BFu0ll, "BFu7c_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16ll_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu16ll_BFu0s) C1{ Fc:7 FL:16 Fs:0}



static void Test_BFu7c_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu0s");
    static BFu7c_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16ll_BFu0s(Test_BFu7c_BFu16ll_BFu0s, "BFu7c_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16s_BFu0c  {
  unsigned char v1:7;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu16s_BFu0c) C1{ Fc:7 Fs:16 Fc:0}



static void Test_BFu7c_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu0c");
    static BFu7c_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16s_BFu0c(Test_BFu7c_BFu16s_BFu0c, "BFu7c_BFu16s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16s_BFu0i  {
  unsigned char v1:7;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu16s_BFu0i) C1{ Fc:7 Fs:16 Fi:0}



static void Test_BFu7c_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu0i");
    static BFu7c_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16s_BFu0i(Test_BFu7c_BFu16s_BFu0i, "BFu7c_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16s_BFu0ll  {
  unsigned char v1:7;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu16s_BFu0ll) C1{ Fc:7 Fs:16 FL:0}



static void Test_BFu7c_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu0ll");
    static BFu7c_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16s_BFu0ll(Test_BFu7c_BFu16s_BFu0ll, "BFu7c_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu16s_BFu0s  {
  unsigned char v1:7;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu16s_BFu0s) C1{ Fc:7 Fs:16 Fs:0}



static void Test_BFu7c_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu0s");
    static BFu7c_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu16s_BFu0s(Test_BFu7c_BFu16s_BFu0s, "BFu7c_BFu16s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu17i_BFu0c  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu17i_BFu0c) C1{ Fc:7 Fi:17 Fc:0}



static void Test_BFu7c_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu0c");
    static BFu7c_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu17i_BFu0c(Test_BFu7c_BFu17i_BFu0c, "BFu7c_BFu17i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu17i_BFu0i  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu17i_BFu0i) C1{ Fc:7 Fi:17 Fi:0}



static void Test_BFu7c_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu0i");
    static BFu7c_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu17i_BFu0i(Test_BFu7c_BFu17i_BFu0i, "BFu7c_BFu17i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu17i_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu17i_BFu0ll) C1{ Fc:7 Fi:17 FL:0}



static void Test_BFu7c_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu0ll");
    static BFu7c_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu17i_BFu0ll(Test_BFu7c_BFu17i_BFu0ll, "BFu7c_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu17i_BFu0s  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu17i_BFu0s) C1{ Fc:7 Fi:17 Fs:0}



static void Test_BFu7c_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu0s");
    static BFu7c_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu17i_BFu0s(Test_BFu7c_BFu17i_BFu0s, "BFu7c_BFu17i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu17ll_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu17ll_BFu0c) C1{ Fc:7 FL:17 Fc:0}



static void Test_BFu7c_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu0c");
    static BFu7c_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu17ll_BFu0c(Test_BFu7c_BFu17ll_BFu0c, "BFu7c_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu17ll_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu17ll_BFu0i) C1{ Fc:7 FL:17 Fi:0}



static void Test_BFu7c_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu0i");
    static BFu7c_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu17ll_BFu0i(Test_BFu7c_BFu17ll_BFu0i, "BFu7c_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu17ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu17ll_BFu0ll) C1{ Fc:7 FL:17 FL:0}



static void Test_BFu7c_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu0ll");
    static BFu7c_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu17ll_BFu0ll(Test_BFu7c_BFu17ll_BFu0ll, "BFu7c_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu17ll_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu17ll_BFu0s) C1{ Fc:7 FL:17 Fs:0}



static void Test_BFu7c_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu0s");
    static BFu7c_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu17ll_BFu0s(Test_BFu7c_BFu17ll_BFu0s, "BFu7c_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1c_BFu0c  {
  unsigned char v1:7;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu1c_BFu0c) C1{ Fc:7 Fc:1 Fc:0}



static void Test_BFu7c_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu0c");
    static BFu7c_BFu1c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu7c_BFu1c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1c_BFu0c(Test_BFu7c_BFu1c_BFu0c, "BFu7c_BFu1c_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1c_BFu0i  {
  unsigned char v1:7;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu1c_BFu0i) C1{ Fc:7 Fc:1 Fi:0}



static void Test_BFu7c_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu0i");
    static BFu7c_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1c_BFu0i(Test_BFu7c_BFu1c_BFu0i, "BFu7c_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1c_BFu0ll  {
  unsigned char v1:7;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu1c_BFu0ll) C1{ Fc:7 Fc:1 FL:0}



static void Test_BFu7c_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu0ll");
    static BFu7c_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1c_BFu0ll(Test_BFu7c_BFu1c_BFu0ll, "BFu7c_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1c_BFu0s  {
  unsigned char v1:7;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu1c_BFu0s) C1{ Fc:7 Fc:1 Fs:0}



static void Test_BFu7c_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu0s");
    static BFu7c_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1c_BFu0s(Test_BFu7c_BFu1c_BFu0s, "BFu7c_BFu1c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1i_BFu0c  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu1i_BFu0c) C1{ Fc:7 Fi:1 Fc:0}



static void Test_BFu7c_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu0c");
    static BFu7c_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1i_BFu0c(Test_BFu7c_BFu1i_BFu0c, "BFu7c_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1i_BFu0i  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu1i_BFu0i) C1{ Fc:7 Fi:1 Fi:0}



static void Test_BFu7c_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu0i");
    static BFu7c_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1i_BFu0i(Test_BFu7c_BFu1i_BFu0i, "BFu7c_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1i_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu1i_BFu0ll) C1{ Fc:7 Fi:1 FL:0}



static void Test_BFu7c_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu0ll");
    static BFu7c_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1i_BFu0ll(Test_BFu7c_BFu1i_BFu0ll, "BFu7c_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1i_BFu0s  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu1i_BFu0s) C1{ Fc:7 Fi:1 Fs:0}



static void Test_BFu7c_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu0s");
    static BFu7c_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1i_BFu0s(Test_BFu7c_BFu1i_BFu0s, "BFu7c_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1ll_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu1ll_BFu0c) C1{ Fc:7 FL:1 Fc:0}



static void Test_BFu7c_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu0c");
    static BFu7c_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1ll_BFu0c(Test_BFu7c_BFu1ll_BFu0c, "BFu7c_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1ll_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu1ll_BFu0i) C1{ Fc:7 FL:1 Fi:0}



static void Test_BFu7c_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu0i");
    static BFu7c_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1ll_BFu0i(Test_BFu7c_BFu1ll_BFu0i, "BFu7c_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu1ll_BFu0ll) C1{ Fc:7 FL:1 FL:0}



static void Test_BFu7c_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu0ll");
    static BFu7c_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1ll_BFu0ll(Test_BFu7c_BFu1ll_BFu0ll, "BFu7c_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1ll_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu1ll_BFu0s) C1{ Fc:7 FL:1 Fs:0}



static void Test_BFu7c_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu0s");
    static BFu7c_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1ll_BFu0s(Test_BFu7c_BFu1ll_BFu0s, "BFu7c_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1s_BFu0c  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu1s_BFu0c) C1{ Fc:7 Fs:1 Fc:0}



static void Test_BFu7c_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu0c");
    static BFu7c_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1s_BFu0c(Test_BFu7c_BFu1s_BFu0c, "BFu7c_BFu1s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1s_BFu0i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu1s_BFu0i) C1{ Fc:7 Fs:1 Fi:0}



static void Test_BFu7c_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu0i");
    static BFu7c_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1s_BFu0i(Test_BFu7c_BFu1s_BFu0i, "BFu7c_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1s_BFu0ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu1s_BFu0ll) C1{ Fc:7 Fs:1 FL:0}



static void Test_BFu7c_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu0ll");
    static BFu7c_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1s_BFu0ll(Test_BFu7c_BFu1s_BFu0ll, "BFu7c_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu1s_BFu0s  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu1s_BFu0s) C1{ Fc:7 Fs:1 Fs:0}



static void Test_BFu7c_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu0s");
    static BFu7c_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu1s_BFu0s(Test_BFu7c_BFu1s_BFu0s, "BFu7c_BFu1s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu31i_BFu0c  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu31i_BFu0c) C1{ Fc:7 Fi:31 Fc:0}



static void Test_BFu7c_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu0c");
    static BFu7c_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu31i_BFu0c(Test_BFu7c_BFu31i_BFu0c, "BFu7c_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu31i_BFu0i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu31i_BFu0i) C1{ Fc:7 Fi:31 Fi:0}



static void Test_BFu7c_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu0i");
    static BFu7c_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu31i_BFu0i(Test_BFu7c_BFu31i_BFu0i, "BFu7c_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu31i_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu31i_BFu0ll) C1{ Fc:7 Fi:31 FL:0}



static void Test_BFu7c_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu0ll");
    static BFu7c_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu31i_BFu0ll(Test_BFu7c_BFu31i_BFu0ll, "BFu7c_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu31i_BFu0s  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu31i_BFu0s) C1{ Fc:7 Fi:31 Fs:0}



static void Test_BFu7c_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu0s");
    static BFu7c_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu31i_BFu0s(Test_BFu7c_BFu31i_BFu0s, "BFu7c_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu31ll_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu31ll_BFu0c) C1{ Fc:7 FL:31 Fc:0}



static void Test_BFu7c_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu0c");
    static BFu7c_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu31ll_BFu0c(Test_BFu7c_BFu31ll_BFu0c, "BFu7c_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu31ll_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu31ll_BFu0i) C1{ Fc:7 FL:31 Fi:0}



static void Test_BFu7c_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu0i");
    static BFu7c_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu31ll_BFu0i(Test_BFu7c_BFu31ll_BFu0i, "BFu7c_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu31ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu31ll_BFu0ll) C1{ Fc:7 FL:31 FL:0}



static void Test_BFu7c_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu0ll");
    static BFu7c_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu31ll_BFu0ll(Test_BFu7c_BFu31ll_BFu0ll, "BFu7c_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu31ll_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu31ll_BFu0s) C1{ Fc:7 FL:31 Fs:0}



static void Test_BFu7c_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu0s");
    static BFu7c_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu31ll_BFu0s(Test_BFu7c_BFu31ll_BFu0s, "BFu7c_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu32i_BFu0c  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu32i_BFu0c) C1{ Fc:7 Fi:32 Fc:0}



static void Test_BFu7c_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu0c");
    static BFu7c_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu32i_BFu0c(Test_BFu7c_BFu32i_BFu0c, "BFu7c_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu32i_BFu0i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu32i_BFu0i) C1{ Fc:7 Fi:32 Fi:0}



static void Test_BFu7c_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu0i");
    static BFu7c_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu32i_BFu0i(Test_BFu7c_BFu32i_BFu0i, "BFu7c_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu32i_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu32i_BFu0ll) C1{ Fc:7 Fi:32 FL:0}



static void Test_BFu7c_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu0ll");
    static BFu7c_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu32i_BFu0ll(Test_BFu7c_BFu32i_BFu0ll, "BFu7c_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu32i_BFu0s  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu32i_BFu0s) C1{ Fc:7 Fi:32 Fs:0}



static void Test_BFu7c_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu0s");
    static BFu7c_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu32i_BFu0s(Test_BFu7c_BFu32i_BFu0s, "BFu7c_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu32ll_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu32ll_BFu0c) C1{ Fc:7 FL:32 Fc:0}



static void Test_BFu7c_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu0c");
    static BFu7c_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu32ll_BFu0c(Test_BFu7c_BFu32ll_BFu0c, "BFu7c_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu32ll_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu32ll_BFu0i) C1{ Fc:7 FL:32 Fi:0}



static void Test_BFu7c_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu0i");
    static BFu7c_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu32ll_BFu0i(Test_BFu7c_BFu32ll_BFu0i, "BFu7c_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu32ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu32ll_BFu0ll) C1{ Fc:7 FL:32 FL:0}



static void Test_BFu7c_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu0ll");
    static BFu7c_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu32ll_BFu0ll(Test_BFu7c_BFu32ll_BFu0ll, "BFu7c_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu32ll_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu32ll_BFu0s) C1{ Fc:7 FL:32 Fs:0}



static void Test_BFu7c_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu0s");
    static BFu7c_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu32ll_BFu0s(Test_BFu7c_BFu32ll_BFu0s, "BFu7c_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu33_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu33_BFu0c) C1{ Fc:7 FL:33 Fc:0}



static void Test_BFu7c_BFu33_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu33_BFu0c");
    static BFu7c_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu33_BFu0c(Test_BFu7c_BFu33_BFu0c, "BFu7c_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu33_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu33_BFu0i) C1{ Fc:7 FL:33 Fi:0}



static void Test_BFu7c_BFu33_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu0i");
    static BFu7c_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu33_BFu0i(Test_BFu7c_BFu33_BFu0i, "BFu7c_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu33_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu33_BFu0ll) C1{ Fc:7 FL:33 FL:0}



static void Test_BFu7c_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu0ll");
    static BFu7c_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu33_BFu0ll(Test_BFu7c_BFu33_BFu0ll, "BFu7c_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu33_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu33_BFu0s) C1{ Fc:7 FL:33 Fs:0}



static void Test_BFu7c_BFu33_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu33_BFu0s");
    static BFu7c_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu33_BFu0s(Test_BFu7c_BFu33_BFu0s, "BFu7c_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7c_BFu0c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu7c_BFu0c) C1{ Fc:7 Fc:7 Fc:0}



static void Test_BFu7c_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu0c");
    static BFu7c_BFu7c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7c_BFu0c(Test_BFu7c_BFu7c_BFu0c, "BFu7c_BFu7c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7c_BFu0i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu7c_BFu0i) C1{ Fc:7 Fc:7 Fi:0}



static void Test_BFu7c_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu0i");
    static BFu7c_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7c_BFu0i(Test_BFu7c_BFu7c_BFu0i, "BFu7c_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7c_BFu0ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu7c_BFu0ll) C1{ Fc:7 Fc:7 FL:0}



static void Test_BFu7c_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu0ll");
    static BFu7c_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7c_BFu0ll(Test_BFu7c_BFu7c_BFu0ll, "BFu7c_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7c_BFu0s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu7c_BFu0s) C1{ Fc:7 Fc:7 Fs:0}



static void Test_BFu7c_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu0s");
    static BFu7c_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7c_BFu0s(Test_BFu7c_BFu7c_BFu0s, "BFu7c_BFu7c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7i_BFu0c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu7i_BFu0c) C1{ Fc:7 Fi:7 Fc:0}



static void Test_BFu7c_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu0c");
    static BFu7c_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7i_BFu0c(Test_BFu7c_BFu7i_BFu0c, "BFu7c_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7i_BFu0i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu7i_BFu0i) C1{ Fc:7 Fi:7 Fi:0}



static void Test_BFu7c_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu0i");
    static BFu7c_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7i_BFu0i(Test_BFu7c_BFu7i_BFu0i, "BFu7c_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7i_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu7i_BFu0ll) C1{ Fc:7 Fi:7 FL:0}



static void Test_BFu7c_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu0ll");
    static BFu7c_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7i_BFu0ll(Test_BFu7c_BFu7i_BFu0ll, "BFu7c_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7i_BFu0s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu7i_BFu0s) C1{ Fc:7 Fi:7 Fs:0}



static void Test_BFu7c_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu0s");
    static BFu7c_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7i_BFu0s(Test_BFu7c_BFu7i_BFu0s, "BFu7c_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7ll_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu7ll_BFu0c) C1{ Fc:7 FL:7 Fc:0}



static void Test_BFu7c_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu0c");
    static BFu7c_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7ll_BFu0c(Test_BFu7c_BFu7ll_BFu0c, "BFu7c_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7ll_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu7ll_BFu0i) C1{ Fc:7 FL:7 Fi:0}



static void Test_BFu7c_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu0i");
    static BFu7c_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7ll_BFu0i(Test_BFu7c_BFu7ll_BFu0i, "BFu7c_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu7ll_BFu0ll) C1{ Fc:7 FL:7 FL:0}



static void Test_BFu7c_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu0ll");
    static BFu7c_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7ll_BFu0ll(Test_BFu7c_BFu7ll_BFu0ll, "BFu7c_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7ll_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu7ll_BFu0s) C1{ Fc:7 FL:7 Fs:0}



static void Test_BFu7c_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu0s");
    static BFu7c_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7ll_BFu0s(Test_BFu7c_BFu7ll_BFu0s, "BFu7c_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7s_BFu0c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu7s_BFu0c) C1{ Fc:7 Fs:7 Fc:0}



static void Test_BFu7c_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu0c");
    static BFu7c_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7s_BFu0c(Test_BFu7c_BFu7s_BFu0c, "BFu7c_BFu7s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7s_BFu0i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu7s_BFu0i) C1{ Fc:7 Fs:7 Fi:0}



static void Test_BFu7c_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu0i");
    static BFu7c_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7s_BFu0i(Test_BFu7c_BFu7s_BFu0i, "BFu7c_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7s_BFu0ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu7s_BFu0ll) C1{ Fc:7 Fs:7 FL:0}



static void Test_BFu7c_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu0ll");
    static BFu7c_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7s_BFu0ll(Test_BFu7c_BFu7s_BFu0ll, "BFu7c_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu7s_BFu0s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu7s_BFu0s) C1{ Fc:7 Fs:7 Fs:0}



static void Test_BFu7c_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu0s");
    static BFu7c_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu7s_BFu0s(Test_BFu7c_BFu7s_BFu0s, "BFu7c_BFu7s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8c_BFu0c  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu8c_BFu0c) C1{ Fc:7 Fc:8 Fc:0}



static void Test_BFu7c_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu0c");
    static BFu7c_BFu8c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu8c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8c_BFu0c(Test_BFu7c_BFu8c_BFu0c, "BFu7c_BFu8c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8c_BFu0i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu8c_BFu0i) C1{ Fc:7 Fc:8 Fi:0}



static void Test_BFu7c_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu0i");
    static BFu7c_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8c_BFu0i(Test_BFu7c_BFu8c_BFu0i, "BFu7c_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8c_BFu0ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu8c_BFu0ll) C1{ Fc:7 Fc:8 FL:0}



static void Test_BFu7c_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu0ll");
    static BFu7c_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8c_BFu0ll(Test_BFu7c_BFu8c_BFu0ll, "BFu7c_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8c_BFu0s  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu8c_BFu0s) C1{ Fc:7 Fc:8 Fs:0}



static void Test_BFu7c_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu0s");
    static BFu7c_BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8c_BFu0s(Test_BFu7c_BFu8c_BFu0s, "BFu7c_BFu8c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8i_BFu0c  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu8i_BFu0c) C1{ Fc:7 Fi:8 Fc:0}



static void Test_BFu7c_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu0c");
    static BFu7c_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8i_BFu0c(Test_BFu7c_BFu8i_BFu0c, "BFu7c_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8i_BFu0i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu8i_BFu0i) C1{ Fc:7 Fi:8 Fi:0}



static void Test_BFu7c_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu0i");
    static BFu7c_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8i_BFu0i(Test_BFu7c_BFu8i_BFu0i, "BFu7c_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8i_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu8i_BFu0ll) C1{ Fc:7 Fi:8 FL:0}



static void Test_BFu7c_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu0ll");
    static BFu7c_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8i_BFu0ll(Test_BFu7c_BFu8i_BFu0ll, "BFu7c_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8i_BFu0s  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu8i_BFu0s) C1{ Fc:7 Fi:8 Fs:0}



static void Test_BFu7c_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu0s");
    static BFu7c_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8i_BFu0s(Test_BFu7c_BFu8i_BFu0s, "BFu7c_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8ll_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu8ll_BFu0c) C1{ Fc:7 FL:8 Fc:0}



static void Test_BFu7c_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu0c");
    static BFu7c_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8ll_BFu0c(Test_BFu7c_BFu8ll_BFu0c, "BFu7c_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8ll_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu8ll_BFu0i) C1{ Fc:7 FL:8 Fi:0}



static void Test_BFu7c_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu0i");
    static BFu7c_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8ll_BFu0i(Test_BFu7c_BFu8ll_BFu0i, "BFu7c_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu8ll_BFu0ll) C1{ Fc:7 FL:8 FL:0}



static void Test_BFu7c_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu0ll");
    static BFu7c_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8ll_BFu0ll(Test_BFu7c_BFu8ll_BFu0ll, "BFu7c_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8ll_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu8ll_BFu0s) C1{ Fc:7 FL:8 Fs:0}



static void Test_BFu7c_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu0s");
    static BFu7c_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8ll_BFu0s(Test_BFu7c_BFu8ll_BFu0s, "BFu7c_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8s_BFu0c  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu8s_BFu0c) C1{ Fc:7 Fs:8 Fc:0}



static void Test_BFu7c_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu0c");
    static BFu7c_BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8s_BFu0c(Test_BFu7c_BFu8s_BFu0c, "BFu7c_BFu8s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8s_BFu0i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu8s_BFu0i) C1{ Fc:7 Fs:8 Fi:0}



static void Test_BFu7c_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu0i");
    static BFu7c_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8s_BFu0i(Test_BFu7c_BFu8s_BFu0i, "BFu7c_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8s_BFu0ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu8s_BFu0ll) C1{ Fc:7 Fs:8 FL:0}



static void Test_BFu7c_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu0ll");
    static BFu7c_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8s_BFu0ll(Test_BFu7c_BFu8s_BFu0ll, "BFu7c_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu8s_BFu0s  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu8s_BFu0s) C1{ Fc:7 Fs:8 Fs:0}



static void Test_BFu7c_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu0s");
    static BFu7c_BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu8s_BFu0s(Test_BFu7c_BFu8s_BFu0s, "BFu7c_BFu8s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9i_BFu0c  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu9i_BFu0c) C1{ Fc:7 Fi:9 Fc:0}



static void Test_BFu7c_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu0c");
    static BFu7c_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9i_BFu0c(Test_BFu7c_BFu9i_BFu0c, "BFu7c_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9i_BFu0i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu9i_BFu0i) C1{ Fc:7 Fi:9 Fi:0}



static void Test_BFu7c_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu0i");
    static BFu7c_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9i_BFu0i(Test_BFu7c_BFu9i_BFu0i, "BFu7c_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9i_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu9i_BFu0ll) C1{ Fc:7 Fi:9 FL:0}



static void Test_BFu7c_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu0ll");
    static BFu7c_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9i_BFu0ll(Test_BFu7c_BFu9i_BFu0ll, "BFu7c_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9i_BFu0s  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu9i_BFu0s) C1{ Fc:7 Fi:9 Fs:0}



static void Test_BFu7c_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu0s");
    static BFu7c_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9i_BFu0s(Test_BFu7c_BFu9i_BFu0s, "BFu7c_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9ll_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu9ll_BFu0c) C1{ Fc:7 FL:9 Fc:0}



static void Test_BFu7c_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu0c");
    static BFu7c_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9ll_BFu0c(Test_BFu7c_BFu9ll_BFu0c, "BFu7c_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9ll_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu9ll_BFu0i) C1{ Fc:7 FL:9 Fi:0}



static void Test_BFu7c_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu0i");
    static BFu7c_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9ll_BFu0i(Test_BFu7c_BFu9ll_BFu0i, "BFu7c_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9ll_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu9ll_BFu0ll) C1{ Fc:7 FL:9 FL:0}



static void Test_BFu7c_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu0ll");
    static BFu7c_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9ll_BFu0ll(Test_BFu7c_BFu9ll_BFu0ll, "BFu7c_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9ll_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu9ll_BFu0s) C1{ Fc:7 FL:9 Fs:0}



static void Test_BFu7c_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu0s");
    static BFu7c_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9ll_BFu0s(Test_BFu7c_BFu9ll_BFu0s, "BFu7c_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9s_BFu0c  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7c_BFu9s_BFu0c) C1{ Fc:7 Fs:9 Fc:0}



static void Test_BFu7c_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu0c");
    static BFu7c_BFu9s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9s_BFu0c(Test_BFu7c_BFu9s_BFu0c, "BFu7c_BFu9s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9s_BFu0i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7c_BFu9s_BFu0i) C1{ Fc:7 Fs:9 Fi:0}



static void Test_BFu7c_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu0i");
    static BFu7c_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9s_BFu0i(Test_BFu7c_BFu9s_BFu0i, "BFu7c_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9s_BFu0ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7c_BFu9s_BFu0ll) C1{ Fc:7 Fs:9 FL:0}



static void Test_BFu7c_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu0ll");
    static BFu7c_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9s_BFu0ll(Test_BFu7c_BFu9s_BFu0ll, "BFu7c_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_BFu9s_BFu0s  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7c_BFu9s_BFu0s) C1{ Fc:7 Fs:9 Fs:0}



static void Test_BFu7c_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu0s");
    static BFu7c_BFu9s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7c_BFu9s_BFu0s(Test_BFu7c_BFu9s_BFu0s, "BFu7c_BFu9s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_C_BFu0c  {
  unsigned char v1:7;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_C_BFu0c) C1{ Fc:7 Fc Fc:0}



static void Test_BFu7c_C_BFu0c()
{
  {
    init_simple_test("BFu7c_C_BFu0c");
    static BFu7c_C_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_C_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu0c");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_C_BFu0c(Test_BFu7c_C_BFu0c, "BFu7c_C_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_C_BFu0i  {
  unsigned char v1:7;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_C_BFu0i) C1{ Fc:7 Fc Fi:0}



static void Test_BFu7c_C_BFu0i()
{
  {
    init_simple_test("BFu7c_C_BFu0i");
    static BFu7c_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu0i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_C_BFu0i(Test_BFu7c_C_BFu0i, "BFu7c_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_C_BFu0ll  {
  unsigned char v1:7;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_C_BFu0ll) C1{ Fc:7 Fc FL:0}



static void Test_BFu7c_C_BFu0ll()
{
  {
    init_simple_test("BFu7c_C_BFu0ll");
    static BFu7c_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_C_BFu0ll(Test_BFu7c_C_BFu0ll, "BFu7c_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_C_BFu0s  {
  unsigned char v1:7;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_C_BFu0s) C1{ Fc:7 Fc Fs:0}



static void Test_BFu7c_C_BFu0s()
{
  {
    init_simple_test("BFu7c_C_BFu0s");
    static BFu7c_C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu0s");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_C_BFu0s(Test_BFu7c_C_BFu0s, "BFu7c_C_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_D_BFu0c  {
  unsigned char v1:7;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_D_BFu0c) C1{ Fc:7 FL Fc:0}



static void Test_BFu7c_D_BFu0c()
{
  {
    init_simple_test("BFu7c_D_BFu0c");
    static BFu7c_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_D_BFu0c(Test_BFu7c_D_BFu0c, "BFu7c_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_D_BFu0i  {
  unsigned char v1:7;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_D_BFu0i) C1{ Fc:7 FL Fi:0}



static void Test_BFu7c_D_BFu0i()
{
  {
    init_simple_test("BFu7c_D_BFu0i");
    static BFu7c_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_D_BFu0i(Test_BFu7c_D_BFu0i, "BFu7c_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_D_BFu0ll  {
  unsigned char v1:7;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_D_BFu0ll) C1{ Fc:7 FL FL:0}



static void Test_BFu7c_D_BFu0ll()
{
  {
    init_simple_test("BFu7c_D_BFu0ll");
    static BFu7c_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_D_BFu0ll(Test_BFu7c_D_BFu0ll, "BFu7c_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_D_BFu0s  {
  unsigned char v1:7;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_D_BFu0s) C1{ Fc:7 FL Fs:0}



static void Test_BFu7c_D_BFu0s()
{
  {
    init_simple_test("BFu7c_D_BFu0s");
    static BFu7c_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_D_BFu0s(Test_BFu7c_D_BFu0s, "BFu7c_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_F_BFu0c  {
  unsigned char v1:7;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_F_BFu0c) C1{ Fc:7 Fi Fc:0}



static void Test_BFu7c_F_BFu0c()
{
  {
    init_simple_test("BFu7c_F_BFu0c");
    static BFu7c_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_F_BFu0c(Test_BFu7c_F_BFu0c, "BFu7c_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_F_BFu0i  {
  unsigned char v1:7;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_F_BFu0i) C1{ Fc:7 Fi Fi:0}



static void Test_BFu7c_F_BFu0i()
{
  {
    init_simple_test("BFu7c_F_BFu0i");
    static BFu7c_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_F_BFu0i(Test_BFu7c_F_BFu0i, "BFu7c_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_F_BFu0ll  {
  unsigned char v1:7;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_F_BFu0ll) C1{ Fc:7 Fi FL:0}



static void Test_BFu7c_F_BFu0ll()
{
  {
    init_simple_test("BFu7c_F_BFu0ll");
    static BFu7c_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_F_BFu0ll(Test_BFu7c_F_BFu0ll, "BFu7c_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_F_BFu0s  {
  unsigned char v1:7;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_F_BFu0s) C1{ Fc:7 Fi Fs:0}



static void Test_BFu7c_F_BFu0s()
{
  {
    init_simple_test("BFu7c_F_BFu0s");
    static BFu7c_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_F_BFu0s(Test_BFu7c_F_BFu0s, "BFu7c_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_I_BFu0c  {
  unsigned char v1:7;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_I_BFu0c) C1{ Fc:7 Fi Fc:0}



static void Test_BFu7c_I_BFu0c()
{
  {
    init_simple_test("BFu7c_I_BFu0c");
    static BFu7c_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_I_BFu0c(Test_BFu7c_I_BFu0c, "BFu7c_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_I_BFu0i  {
  unsigned char v1:7;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_I_BFu0i) C1{ Fc:7 Fi Fi:0}



static void Test_BFu7c_I_BFu0i()
{
  {
    init_simple_test("BFu7c_I_BFu0i");
    static BFu7c_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_I_BFu0i(Test_BFu7c_I_BFu0i, "BFu7c_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_I_BFu0ll  {
  unsigned char v1:7;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_I_BFu0ll) C1{ Fc:7 Fi FL:0}



static void Test_BFu7c_I_BFu0ll()
{
  {
    init_simple_test("BFu7c_I_BFu0ll");
    static BFu7c_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_I_BFu0ll(Test_BFu7c_I_BFu0ll, "BFu7c_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_I_BFu0s  {
  unsigned char v1:7;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_I_BFu0s) C1{ Fc:7 Fi Fs:0}



static void Test_BFu7c_I_BFu0s()
{
  {
    init_simple_test("BFu7c_I_BFu0s");
    static BFu7c_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_I_BFu0s(Test_BFu7c_I_BFu0s, "BFu7c_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ip_BFu0c  {
  unsigned char v1:7;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_Ip_BFu0c) C1{ Fc:7 Fp Fc:0}



static void Test_BFu7c_Ip_BFu0c()
{
  {
    init_simple_test("BFu7c_Ip_BFu0c");
    static BFu7c_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ip_BFu0c(Test_BFu7c_Ip_BFu0c, "BFu7c_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ip_BFu0i  {
  unsigned char v1:7;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_Ip_BFu0i) C1{ Fc:7 Fp Fi:0}



static void Test_BFu7c_Ip_BFu0i()
{
  {
    init_simple_test("BFu7c_Ip_BFu0i");
    static BFu7c_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ip_BFu0i(Test_BFu7c_Ip_BFu0i, "BFu7c_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ip_BFu0ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_Ip_BFu0ll) C1{ Fc:7 Fp FL:0}



static void Test_BFu7c_Ip_BFu0ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu0ll");
    static BFu7c_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ip_BFu0ll(Test_BFu7c_Ip_BFu0ll, "BFu7c_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ip_BFu0s  {
  unsigned char v1:7;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_Ip_BFu0s) C1{ Fc:7 Fp Fs:0}



static void Test_BFu7c_Ip_BFu0s()
{
  {
    init_simple_test("BFu7c_Ip_BFu0s");
    static BFu7c_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ip_BFu0s(Test_BFu7c_Ip_BFu0s, "BFu7c_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_L_BFu0c  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_L_BFu0c) C1{ Fc:7 FL Fc:0}



static void Test_BFu7c_L_BFu0c()
{
  {
    init_simple_test("BFu7c_L_BFu0c");
    static BFu7c_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_L_BFu0c(Test_BFu7c_L_BFu0c, "BFu7c_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_L_BFu0i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_L_BFu0i) C1{ Fc:7 FL Fi:0}



static void Test_BFu7c_L_BFu0i()
{
  {
    init_simple_test("BFu7c_L_BFu0i");
    static BFu7c_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_L_BFu0i(Test_BFu7c_L_BFu0i, "BFu7c_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_L_BFu0ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_L_BFu0ll) C1{ Fc:7 FL FL:0}



static void Test_BFu7c_L_BFu0ll()
{
  {
    init_simple_test("BFu7c_L_BFu0ll");
    static BFu7c_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_L_BFu0ll(Test_BFu7c_L_BFu0ll, "BFu7c_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_L_BFu0s  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_L_BFu0s) C1{ Fc:7 FL Fs:0}



static void Test_BFu7c_L_BFu0s()
{
  {
    init_simple_test("BFu7c_L_BFu0s");
    static BFu7c_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_L_BFu0s(Test_BFu7c_L_BFu0s, "BFu7c_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_S_BFu0c  {
  unsigned char v1:7;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_S_BFu0c) C1{ Fc:7 Fs Fc:0}



static void Test_BFu7c_S_BFu0c()
{
  {
    init_simple_test("BFu7c_S_BFu0c");
    static BFu7c_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_S_BFu0c(Test_BFu7c_S_BFu0c, "BFu7c_S_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_S_BFu0i  {
  unsigned char v1:7;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_S_BFu0i) C1{ Fc:7 Fs Fi:0}



static void Test_BFu7c_S_BFu0i()
{
  {
    init_simple_test("BFu7c_S_BFu0i");
    static BFu7c_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_S_BFu0i(Test_BFu7c_S_BFu0i, "BFu7c_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_S_BFu0ll  {
  unsigned char v1:7;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_S_BFu0ll) C1{ Fc:7 Fs FL:0}



static void Test_BFu7c_S_BFu0ll()
{
  {
    init_simple_test("BFu7c_S_BFu0ll");
    static BFu7c_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_S_BFu0ll(Test_BFu7c_S_BFu0ll, "BFu7c_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_S_BFu0s  {
  unsigned char v1:7;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_S_BFu0s) C1{ Fc:7 Fs Fs:0}



static void Test_BFu7c_S_BFu0s()
{
  {
    init_simple_test("BFu7c_S_BFu0s");
    static BFu7c_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_S_BFu0s(Test_BFu7c_S_BFu0s, "BFu7c_S_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Uc_BFu0c  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_Uc_BFu0c) C1{ Fc:7 Fc Fc:0}



static void Test_BFu7c_Uc_BFu0c()
{
  {
    init_simple_test("BFu7c_Uc_BFu0c");
    static BFu7c_Uc_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_Uc_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu0c");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Uc_BFu0c(Test_BFu7c_Uc_BFu0c, "BFu7c_Uc_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Uc_BFu0i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_Uc_BFu0i) C1{ Fc:7 Fc Fi:0}



static void Test_BFu7c_Uc_BFu0i()
{
  {
    init_simple_test("BFu7c_Uc_BFu0i");
    static BFu7c_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu0i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Uc_BFu0i(Test_BFu7c_Uc_BFu0i, "BFu7c_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Uc_BFu0ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_Uc_BFu0ll) C1{ Fc:7 Fc FL:0}



static void Test_BFu7c_Uc_BFu0ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu0ll");
    static BFu7c_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Uc_BFu0ll(Test_BFu7c_Uc_BFu0ll, "BFu7c_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Uc_BFu0s  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_Uc_BFu0s) C1{ Fc:7 Fc Fs:0}



static void Test_BFu7c_Uc_BFu0s()
{
  {
    init_simple_test("BFu7c_Uc_BFu0s");
    static BFu7c_Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu7c_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu0s");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Uc_BFu0s(Test_BFu7c_Uc_BFu0s, "BFu7c_Uc_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ui_BFu0c  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_Ui_BFu0c) C1{ Fc:7 Fi Fc:0}



static void Test_BFu7c_Ui_BFu0c()
{
  {
    init_simple_test("BFu7c_Ui_BFu0c");
    static BFu7c_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ui_BFu0c(Test_BFu7c_Ui_BFu0c, "BFu7c_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ui_BFu0i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_Ui_BFu0i) C1{ Fc:7 Fi Fi:0}



static void Test_BFu7c_Ui_BFu0i()
{
  {
    init_simple_test("BFu7c_Ui_BFu0i");
    static BFu7c_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ui_BFu0i(Test_BFu7c_Ui_BFu0i, "BFu7c_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ui_BFu0ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_Ui_BFu0ll) C1{ Fc:7 Fi FL:0}



static void Test_BFu7c_Ui_BFu0ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu0ll");
    static BFu7c_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7c_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ui_BFu0ll(Test_BFu7c_Ui_BFu0ll, "BFu7c_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ui_BFu0s  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_Ui_BFu0s) C1{ Fc:7 Fi Fs:0}



static void Test_BFu7c_Ui_BFu0s()
{
  {
    init_simple_test("BFu7c_Ui_BFu0s");
    static BFu7c_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ui_BFu0s(Test_BFu7c_Ui_BFu0s, "BFu7c_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ul_BFu0c  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_Ul_BFu0c) C1{ Fc:7 FL Fc:0}



static void Test_BFu7c_Ul_BFu0c()
{
  {
    init_simple_test("BFu7c_Ul_BFu0c");
    static BFu7c_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ul_BFu0c(Test_BFu7c_Ul_BFu0c, "BFu7c_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ul_BFu0i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_Ul_BFu0i) C1{ Fc:7 FL Fi:0}



static void Test_BFu7c_Ul_BFu0i()
{
  {
    init_simple_test("BFu7c_Ul_BFu0i");
    static BFu7c_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ul_BFu0i(Test_BFu7c_Ul_BFu0i, "BFu7c_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ul_BFu0ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_Ul_BFu0ll) C1{ Fc:7 FL FL:0}



static void Test_BFu7c_Ul_BFu0ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu0ll");
    static BFu7c_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ul_BFu0ll(Test_BFu7c_Ul_BFu0ll, "BFu7c_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Ul_BFu0s  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_Ul_BFu0s) C1{ Fc:7 FL Fs:0}



static void Test_BFu7c_Ul_BFu0s()
{
  {
    init_simple_test("BFu7c_Ul_BFu0s");
    static BFu7c_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Ul_BFu0s(Test_BFu7c_Ul_BFu0s, "BFu7c_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Us_BFu0c  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_Us_BFu0c) C1{ Fc:7 Fs Fc:0}



static void Test_BFu7c_Us_BFu0c()
{
  {
    init_simple_test("BFu7c_Us_BFu0c");
    static BFu7c_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu0c");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Us_BFu0c(Test_BFu7c_Us_BFu0c, "BFu7c_Us_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Us_BFu0i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_Us_BFu0i) C1{ Fc:7 Fs Fi:0}



static void Test_BFu7c_Us_BFu0i()
{
  {
    init_simple_test("BFu7c_Us_BFu0i");
    static BFu7c_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu0i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Us_BFu0i(Test_BFu7c_Us_BFu0i, "BFu7c_Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Us_BFu0ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_Us_BFu0ll) C1{ Fc:7 Fs FL:0}



static void Test_BFu7c_Us_BFu0ll()
{
  {
    init_simple_test("BFu7c_Us_BFu0ll");
    static BFu7c_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7c_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Us_BFu0ll(Test_BFu7c_Us_BFu0ll, "BFu7c_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Us_BFu0s  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_Us_BFu0s) C1{ Fc:7 Fs Fs:0}



static void Test_BFu7c_Us_BFu0s()
{
  {
    init_simple_test("BFu7c_Us_BFu0s");
    static BFu7c_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu0s");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Us_BFu0s(Test_BFu7c_Us_BFu0s, "BFu7c_Us_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Vp_BFu0c  {
  unsigned char v1:7;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu7c_Vp_BFu0c) C1{ Fc:7 Fp Fc:0}



static void Test_BFu7c_Vp_BFu0c()
{
  {
    init_simple_test("BFu7c_Vp_BFu0c");
    static BFu7c_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Vp_BFu0c(Test_BFu7c_Vp_BFu0c, "BFu7c_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Vp_BFu0i  {
  unsigned char v1:7;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu7c_Vp_BFu0i) C1{ Fc:7 Fp Fi:0}



static void Test_BFu7c_Vp_BFu0i()
{
  {
    init_simple_test("BFu7c_Vp_BFu0i");
    static BFu7c_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Vp_BFu0i(Test_BFu7c_Vp_BFu0i, "BFu7c_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Vp_BFu0ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu7c_Vp_BFu0ll) C1{ Fc:7 Fp FL:0}



static void Test_BFu7c_Vp_BFu0ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu0ll");
    static BFu7c_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Vp_BFu0ll(Test_BFu7c_Vp_BFu0ll, "BFu7c_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7c_Vp_BFu0s  {
  unsigned char v1:7;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu7c_Vp_BFu0s) C1{ Fc:7 Fp Fs:0}



static void Test_BFu7c_Vp_BFu0s()
{
  {
    init_simple_test("BFu7c_Vp_BFu0s");
    static BFu7c_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7c_Vp_BFu0s(Test_BFu7c_Vp_BFu0s, "BFu7c_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c  {
  unsigned int v1:7;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu0c) C1{ Fi:7 Fc:0}



static void Test_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu0c");
    static BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c(Test_BFu7i_BFu0c, "BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu0c  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu0c_BFu0c) C1{ Fi:7 Fc:0 Fc:0}



static void Test_BFu7i_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu0c");
    static BFu7i_BFu0c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu0c(Test_BFu7i_BFu0c_BFu0c, "BFu7i_BFu0c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu0i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu0c_BFu0i) C1{ Fi:7 Fc:0 Fi:0}



static void Test_BFu7i_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu0i");
    static BFu7i_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu0i(Test_BFu7i_BFu0c_BFu0i, "BFu7i_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu0ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu0c_BFu0ll) C1{ Fi:7 Fc:0 FL:0}



static void Test_BFu7i_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu0ll");
    static BFu7i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu0ll(Test_BFu7i_BFu0c_BFu0ll, "BFu7i_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu0s  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu0c_BFu0s) C1{ Fi:7 Fc:0 Fs:0}



static void Test_BFu7i_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu0s");
    static BFu7i_BFu0c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu0s(Test_BFu7i_BFu0c_BFu0s, "BFu7i_BFu0c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu15i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7i_BFu0c_BFu15i) C1{ Fi:7 Fc:0 Fi:15}



static void Test_BFu7i_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu15i");
    static BFu7i_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu7i_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu15i(Test_BFu7i_BFu0c_BFu15i, "BFu7i_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu15ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7i_BFu0c_BFu15ll) C1{ Fi:7 Fc:0 FL:15}



static void Test_BFu7i_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu15ll");
    static BFu7i_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu7i_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu15ll(Test_BFu7i_BFu0c_BFu15ll, "BFu7i_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu15s  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7i_BFu0c_BFu15s) C1{ Fi:7 Fc:0 Fs:15}



static void Test_BFu7i_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu15s");
    static BFu7i_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu15s(Test_BFu7i_BFu0c_BFu15s, "BFu7i_BFu0c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu16i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7i_BFu0c_BFu16i) C1{ Fi:7 Fc:0 Fi:16}



static void Test_BFu7i_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu16i");
    static BFu7i_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu7i_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu16i(Test_BFu7i_BFu0c_BFu16i, "BFu7i_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu16ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7i_BFu0c_BFu16ll) C1{ Fi:7 Fc:0 FL:16}



static void Test_BFu7i_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu16ll");
    static BFu7i_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu7i_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu16ll(Test_BFu7i_BFu0c_BFu16ll, "BFu7i_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu16s  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7i_BFu0c_BFu16s) C1{ Fi:7 Fc:0 Fs:16}



static void Test_BFu7i_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu16s");
    static BFu7i_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu16s(Test_BFu7i_BFu0c_BFu16s, "BFu7i_BFu0c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu17i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7i_BFu0c_BFu17i) C1{ Fi:7 Fc:0 Fi:17}



static void Test_BFu7i_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu17i");
    static BFu7i_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu7i_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu17i(Test_BFu7i_BFu0c_BFu17i, "BFu7i_BFu0c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu17ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7i_BFu0c_BFu17ll) C1{ Fi:7 Fc:0 FL:17}



static void Test_BFu7i_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu17ll");
    static BFu7i_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu7i_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu17ll(Test_BFu7i_BFu0c_BFu17ll, "BFu7i_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu1c  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7i_BFu0c_BFu1c) C1{ Fi:7 Fc:0 Fc:1}



static void Test_BFu7i_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu1c");
    static BFu7i_BFu0c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7i_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu1c(Test_BFu7i_BFu0c_BFu1c, "BFu7i_BFu0c_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu1i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7i_BFu0c_BFu1i) C1{ Fi:7 Fc:0 Fi:1}



static void Test_BFu7i_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu1i");
    static BFu7i_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7i_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu1i(Test_BFu7i_BFu0c_BFu1i, "BFu7i_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu1ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7i_BFu0c_BFu1ll) C1{ Fi:7 Fc:0 FL:1}



static void Test_BFu7i_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu1ll");
    static BFu7i_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7i_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu1ll(Test_BFu7i_BFu0c_BFu1ll, "BFu7i_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu1s  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7i_BFu0c_BFu1s) C1{ Fi:7 Fc:0 Fs:1}



static void Test_BFu7i_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu1s");
    static BFu7i_BFu0c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7i_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu1s(Test_BFu7i_BFu0c_BFu1s, "BFu7i_BFu0c_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu31i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7i_BFu0c_BFu31i) C1{ Fi:7 Fc:0 Fi:31}



static void Test_BFu7i_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu31i");
    static BFu7i_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu31i(Test_BFu7i_BFu0c_BFu31i, "BFu7i_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu31ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7i_BFu0c_BFu31ll) C1{ Fi:7 Fc:0 FL:31}



static void Test_BFu7i_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu31ll");
    static BFu7i_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu7i_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu31ll(Test_BFu7i_BFu0c_BFu31ll, "BFu7i_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu32i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7i_BFu0c_BFu32i) C1{ Fi:7 Fc:0 Fi:32}



static void Test_BFu7i_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu32i");
    static BFu7i_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu32i(Test_BFu7i_BFu0c_BFu32i, "BFu7i_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu32ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7i_BFu0c_BFu32ll) C1{ Fi:7 Fc:0 FL:32}



static void Test_BFu7i_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu32ll");
    static BFu7i_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu7i_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu32ll(Test_BFu7i_BFu0c_BFu32ll, "BFu7i_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu33  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7i_BFu0c_BFu33) C1{ Fi:7 Fc:0 FL:33}



static void Test_BFu7i_BFu0c_BFu33()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu33");
    static BFu7i_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu7i_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu33(Test_BFu7i_BFu0c_BFu33, "BFu7i_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu7c  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7i_BFu0c_BFu7c) C1{ Fi:7 Fc:0 Fc:7}



static void Test_BFu7i_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu7c");
    static BFu7i_BFu0c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu7c(Test_BFu7i_BFu0c_BFu7c, "BFu7i_BFu0c_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu7i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7i_BFu0c_BFu7i) C1{ Fi:7 Fc:0 Fi:7}



static void Test_BFu7i_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu7i");
    static BFu7i_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu7i(Test_BFu7i_BFu0c_BFu7i, "BFu7i_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu7ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7i_BFu0c_BFu7ll) C1{ Fi:7 Fc:0 FL:7}



static void Test_BFu7i_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu7ll");
    static BFu7i_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu7ll(Test_BFu7i_BFu0c_BFu7ll, "BFu7i_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu7s  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7i_BFu0c_BFu7s) C1{ Fi:7 Fc:0 Fs:7}



static void Test_BFu7i_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu7s");
    static BFu7i_BFu0c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu7s(Test_BFu7i_BFu0c_BFu7s, "BFu7i_BFu0c_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu8c  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7i_BFu0c_BFu8c) C1{ Fi:7 Fc:0 Fc:8}



static void Test_BFu7i_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu8c");
    static BFu7i_BFu0c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu8c(Test_BFu7i_BFu0c_BFu8c, "BFu7i_BFu0c_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu8i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7i_BFu0c_BFu8i) C1{ Fi:7 Fc:0 Fi:8}



static void Test_BFu7i_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu8i");
    static BFu7i_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu8i(Test_BFu7i_BFu0c_BFu8i, "BFu7i_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu8ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7i_BFu0c_BFu8ll) C1{ Fi:7 Fc:0 FL:8}



static void Test_BFu7i_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu8ll");
    static BFu7i_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu8ll(Test_BFu7i_BFu0c_BFu8ll, "BFu7i_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu8s  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7i_BFu0c_BFu8s) C1{ Fi:7 Fc:0 Fs:8}



static void Test_BFu7i_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu8s");
    static BFu7i_BFu0c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu8s(Test_BFu7i_BFu0c_BFu8s, "BFu7i_BFu0c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu9i  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7i_BFu0c_BFu9i) C1{ Fi:7 Fc:0 Fi:9}



static void Test_BFu7i_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu9i");
    static BFu7i_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu7i_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu9i(Test_BFu7i_BFu0c_BFu9i, "BFu7i_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu9ll  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7i_BFu0c_BFu9ll) C1{ Fi:7 Fc:0 FL:9}



static void Test_BFu7i_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu9ll");
    static BFu7i_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu7i_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu9ll(Test_BFu7i_BFu0c_BFu9ll, "BFu7i_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_BFu9s  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7i_BFu0c_BFu9s) C1{ Fi:7 Fc:0 Fs:9}



static void Test_BFu7i_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu0c_BFu9s");
    static BFu7i_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7i_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_BFu9s(Test_BFu7i_BFu0c_BFu9s, "BFu7i_BFu0c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_C  {
  unsigned int v1:7;
  unsigned char  :0;
  char v2;
};
//SIG(1 BFu7i_BFu0c_C) C1{ Fi:7 Fc:0 Fc}



static void Test_BFu7i_BFu0c_C()
{
  {
    init_simple_test("BFu7i_BFu0c_C");
    static BFu7i_BFu0c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_C");
    check_field_offset(lv, v2, 1, "BFu7i_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_C(Test_BFu7i_BFu0c_C, "BFu7i_BFu0c_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_D  {
  unsigned int v1:7;
  unsigned char  :0;
  double v2;
};
//SIG(1 BFu7i_BFu0c_D) C1{ Fi:7 Fc:0 FL}



static void Test_BFu7i_BFu0c_D()
{
  {
    init_simple_test("BFu7i_BFu0c_D");
    static BFu7i_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_D(Test_BFu7i_BFu0c_D, "BFu7i_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_F  {
  unsigned int v1:7;
  unsigned char  :0;
  float v2;
};
//SIG(1 BFu7i_BFu0c_F) C1{ Fi:7 Fc:0 Fi}



static void Test_BFu7i_BFu0c_F()
{
  {
    init_simple_test("BFu7i_BFu0c_F");
    static BFu7i_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_F");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_F(Test_BFu7i_BFu0c_F, "BFu7i_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_I  {
  unsigned int v1:7;
  unsigned char  :0;
  int v2;
};
//SIG(1 BFu7i_BFu0c_I) C1{ Fi:7 Fc:0 Fi}



static void Test_BFu7i_BFu0c_I()
{
  {
    init_simple_test("BFu7i_BFu0c_I");
    static BFu7i_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_I");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_I(Test_BFu7i_BFu0c_I, "BFu7i_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_Ip  {
  unsigned int v1:7;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu7i_BFu0c_Ip) C1{ Fi:7 Fc:0 Fp}



static void Test_BFu7i_BFu0c_Ip()
{
  {
    init_simple_test("BFu7i_BFu0c_Ip");
    static BFu7i_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_Ip(Test_BFu7i_BFu0c_Ip, "BFu7i_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_L  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 BFu7i_BFu0c_L) C1{ Fi:7 Fc:0 FL}



static void Test_BFu7i_BFu0c_L()
{
  {
    init_simple_test("BFu7i_BFu0c_L");
    static BFu7i_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_L(Test_BFu7i_BFu0c_L, "BFu7i_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_S  {
  unsigned int v1:7;
  unsigned char  :0;
  short v2;
};
//SIG(1 BFu7i_BFu0c_S) C1{ Fi:7 Fc:0 Fs}



static void Test_BFu7i_BFu0c_S()
{
  {
    init_simple_test("BFu7i_BFu0c_S");
    static BFu7i_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_S");
    check_field_offset(lv, v2, 2, "BFu7i_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_S(Test_BFu7i_BFu0c_S, "BFu7i_BFu0c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_Uc  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 BFu7i_BFu0c_Uc) C1{ Fi:7 Fc:0 Fc}



static void Test_BFu7i_BFu0c_Uc()
{
  {
    init_simple_test("BFu7i_BFu0c_Uc");
    static BFu7i_BFu0c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_Uc");
    check_field_offset(lv, v2, 1, "BFu7i_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_Uc(Test_BFu7i_BFu0c_Uc, "BFu7i_BFu0c_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_Ui  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 BFu7i_BFu0c_Ui) C1{ Fi:7 Fc:0 Fi}



static void Test_BFu7i_BFu0c_Ui()
{
  {
    init_simple_test("BFu7i_BFu0c_Ui");
    static BFu7i_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_Ui");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_Ui(Test_BFu7i_BFu0c_Ui, "BFu7i_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_Ul  {
  unsigned int v1:7;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 BFu7i_BFu0c_Ul) C1{ Fi:7 Fc:0 FL}



static void Test_BFu7i_BFu0c_Ul()
{
  {
    init_simple_test("BFu7i_BFu0c_Ul");
    static BFu7i_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_Ul(Test_BFu7i_BFu0c_Ul, "BFu7i_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_Us  {
  unsigned int v1:7;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 BFu7i_BFu0c_Us) C1{ Fi:7 Fc:0 Fs}



static void Test_BFu7i_BFu0c_Us()
{
  {
    init_simple_test("BFu7i_BFu0c_Us");
    static BFu7i_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_Us");
    check_field_offset(lv, v2, 2, "BFu7i_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_Us(Test_BFu7i_BFu0c_Us, "BFu7i_BFu0c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0c_Vp  {
  unsigned int v1:7;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu7i_BFu0c_Vp) C1{ Fi:7 Fc:0 Fp}



static void Test_BFu7i_BFu0c_Vp()
{
  {
    init_simple_test("BFu7i_BFu0c_Vp");
    static BFu7i_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0c_Vp(Test_BFu7i_BFu0c_Vp, "BFu7i_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i  {
  unsigned int v1:7;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu0i) C1{ Fi:7 Fi:0}



static void Test_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu0i");
    static BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i(Test_BFu7i_BFu0i, "BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu0c  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu0i_BFu0c) C1{ Fi:7 Fi:0 Fc:0}



static void Test_BFu7i_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu0c");
    static BFu7i_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu0c(Test_BFu7i_BFu0i_BFu0c, "BFu7i_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu0i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu0i_BFu0i) C1{ Fi:7 Fi:0 Fi:0}



static void Test_BFu7i_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu0i");
    static BFu7i_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu0i(Test_BFu7i_BFu0i_BFu0i, "BFu7i_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu0ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu0i_BFu0ll) C1{ Fi:7 Fi:0 FL:0}



static void Test_BFu7i_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu0ll");
    static BFu7i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu0ll(Test_BFu7i_BFu0i_BFu0ll, "BFu7i_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu0s  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu0i_BFu0s) C1{ Fi:7 Fi:0 Fs:0}



static void Test_BFu7i_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu0s");
    static BFu7i_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu0s(Test_BFu7i_BFu0i_BFu0s, "BFu7i_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu15i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7i_BFu0i_BFu15i) C1{ Fi:7 Fi:0 Fi:15}



static void Test_BFu7i_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu15i");
    static BFu7i_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7i_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu15i(Test_BFu7i_BFu0i_BFu15i, "BFu7i_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu15ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7i_BFu0i_BFu15ll) C1{ Fi:7 Fi:0 FL:15}



static void Test_BFu7i_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu15ll");
    static BFu7i_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7i_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu15ll(Test_BFu7i_BFu0i_BFu15ll, "BFu7i_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu15s  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7i_BFu0i_BFu15s) C1{ Fi:7 Fi:0 Fs:15}



static void Test_BFu7i_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu15s");
    static BFu7i_BFu0i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7i_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu15s(Test_BFu7i_BFu0i_BFu15s, "BFu7i_BFu0i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu16i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7i_BFu0i_BFu16i) C1{ Fi:7 Fi:0 Fi:16}



static void Test_BFu7i_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu16i");
    static BFu7i_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7i_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu16i(Test_BFu7i_BFu0i_BFu16i, "BFu7i_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu16ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7i_BFu0i_BFu16ll) C1{ Fi:7 Fi:0 FL:16}



static void Test_BFu7i_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu16ll");
    static BFu7i_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7i_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu16ll(Test_BFu7i_BFu0i_BFu16ll, "BFu7i_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu16s  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7i_BFu0i_BFu16s) C1{ Fi:7 Fi:0 Fs:16}



static void Test_BFu7i_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu16s");
    static BFu7i_BFu0i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7i_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu16s(Test_BFu7i_BFu0i_BFu16s, "BFu7i_BFu0i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu17i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7i_BFu0i_BFu17i) C1{ Fi:7 Fi:0 Fi:17}



static void Test_BFu7i_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu17i");
    static BFu7i_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7i_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu17i(Test_BFu7i_BFu0i_BFu17i, "BFu7i_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu17ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7i_BFu0i_BFu17ll) C1{ Fi:7 Fi:0 FL:17}



static void Test_BFu7i_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu17ll");
    static BFu7i_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7i_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu17ll(Test_BFu7i_BFu0i_BFu17ll, "BFu7i_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu1c  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7i_BFu0i_BFu1c) C1{ Fi:7 Fi:0 Fc:1}



static void Test_BFu7i_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu1c");
    static BFu7i_BFu0i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7i_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu1c(Test_BFu7i_BFu0i_BFu1c, "BFu7i_BFu0i_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu1i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7i_BFu0i_BFu1i) C1{ Fi:7 Fi:0 Fi:1}



static void Test_BFu7i_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu1i");
    static BFu7i_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7i_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu1i(Test_BFu7i_BFu0i_BFu1i, "BFu7i_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu1ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7i_BFu0i_BFu1ll) C1{ Fi:7 Fi:0 FL:1}



static void Test_BFu7i_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu1ll");
    static BFu7i_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7i_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu1ll(Test_BFu7i_BFu0i_BFu1ll, "BFu7i_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu1s  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7i_BFu0i_BFu1s) C1{ Fi:7 Fi:0 Fs:1}



static void Test_BFu7i_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu1s");
    static BFu7i_BFu0i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7i_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu1s(Test_BFu7i_BFu0i_BFu1s, "BFu7i_BFu0i_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu31i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7i_BFu0i_BFu31i) C1{ Fi:7 Fi:0 Fi:31}



static void Test_BFu7i_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu31i");
    static BFu7i_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu31i(Test_BFu7i_BFu0i_BFu31i, "BFu7i_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu31ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7i_BFu0i_BFu31ll) C1{ Fi:7 Fi:0 FL:31}



static void Test_BFu7i_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu31ll");
    static BFu7i_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu31ll(Test_BFu7i_BFu0i_BFu31ll, "BFu7i_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu32i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7i_BFu0i_BFu32i) C1{ Fi:7 Fi:0 Fi:32}



static void Test_BFu7i_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu32i");
    static BFu7i_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu32i(Test_BFu7i_BFu0i_BFu32i, "BFu7i_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu32ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7i_BFu0i_BFu32ll) C1{ Fi:7 Fi:0 FL:32}



static void Test_BFu7i_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu32ll");
    static BFu7i_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu32ll(Test_BFu7i_BFu0i_BFu32ll, "BFu7i_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu33  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7i_BFu0i_BFu33) C1{ Fi:7 Fi:0 FL:33}



static void Test_BFu7i_BFu0i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu33");
    static BFu7i_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu7i_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7i_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu33(Test_BFu7i_BFu0i_BFu33, "BFu7i_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu7c  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7i_BFu0i_BFu7c) C1{ Fi:7 Fi:0 Fc:7}



static void Test_BFu7i_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu7c");
    static BFu7i_BFu0i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7i_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu7c(Test_BFu7i_BFu0i_BFu7c, "BFu7i_BFu0i_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu7i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7i_BFu0i_BFu7i) C1{ Fi:7 Fi:0 Fi:7}



static void Test_BFu7i_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu7i");
    static BFu7i_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7i_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu7i(Test_BFu7i_BFu0i_BFu7i, "BFu7i_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu7ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7i_BFu0i_BFu7ll) C1{ Fi:7 Fi:0 FL:7}



static void Test_BFu7i_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu7ll");
    static BFu7i_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7i_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu7ll(Test_BFu7i_BFu0i_BFu7ll, "BFu7i_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu7s  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7i_BFu0i_BFu7s) C1{ Fi:7 Fi:0 Fs:7}



static void Test_BFu7i_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu7s");
    static BFu7i_BFu0i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7i_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu7s(Test_BFu7i_BFu0i_BFu7s, "BFu7i_BFu0i_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu8c  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7i_BFu0i_BFu8c) C1{ Fi:7 Fi:0 Fc:8}



static void Test_BFu7i_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu8c");
    static BFu7i_BFu0i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7i_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu8c(Test_BFu7i_BFu0i_BFu8c, "BFu7i_BFu0i_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu8i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7i_BFu0i_BFu8i) C1{ Fi:7 Fi:0 Fi:8}



static void Test_BFu7i_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu8i");
    static BFu7i_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7i_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu8i(Test_BFu7i_BFu0i_BFu8i, "BFu7i_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu8ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7i_BFu0i_BFu8ll) C1{ Fi:7 Fi:0 FL:8}



static void Test_BFu7i_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu8ll");
    static BFu7i_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7i_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu8ll(Test_BFu7i_BFu0i_BFu8ll, "BFu7i_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu8s  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7i_BFu0i_BFu8s) C1{ Fi:7 Fi:0 Fs:8}



static void Test_BFu7i_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu8s");
    static BFu7i_BFu0i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7i_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu8s(Test_BFu7i_BFu0i_BFu8s, "BFu7i_BFu0i_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu9i  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7i_BFu0i_BFu9i) C1{ Fi:7 Fi:0 Fi:9}



static void Test_BFu7i_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu9i");
    static BFu7i_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7i_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu9i(Test_BFu7i_BFu0i_BFu9i, "BFu7i_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu9ll  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7i_BFu0i_BFu9ll) C1{ Fi:7 Fi:0 FL:9}



static void Test_BFu7i_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu9ll");
    static BFu7i_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7i_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu9ll(Test_BFu7i_BFu0i_BFu9ll, "BFu7i_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_BFu9s  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7i_BFu0i_BFu9s) C1{ Fi:7 Fi:0 Fs:9}



static void Test_BFu7i_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu0i_BFu9s");
    static BFu7i_BFu0i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7i_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_BFu9s(Test_BFu7i_BFu0i_BFu9s, "BFu7i_BFu0i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_C  {
  unsigned int v1:7;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu7i_BFu0i_C) C1{ Fi:7 Fi:0 Fc}



static void Test_BFu7i_BFu0i_C()
{
  {
    init_simple_test("BFu7i_BFu0i_C");
    static BFu7i_BFu0i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_C(Test_BFu7i_BFu0i_C, "BFu7i_BFu0i_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_D  {
  unsigned int v1:7;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu7i_BFu0i_D) C1{ Fi:7 Fi:0 FL}



static void Test_BFu7i_BFu0i_D()
{
  {
    init_simple_test("BFu7i_BFu0i_D");
    static BFu7i_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_D(Test_BFu7i_BFu0i_D, "BFu7i_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_F  {
  unsigned int v1:7;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu7i_BFu0i_F) C1{ Fi:7 Fi:0 Fi}



static void Test_BFu7i_BFu0i_F()
{
  {
    init_simple_test("BFu7i_BFu0i_F");
    static BFu7i_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_F(Test_BFu7i_BFu0i_F, "BFu7i_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_I  {
  unsigned int v1:7;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu7i_BFu0i_I) C1{ Fi:7 Fi:0 Fi}



static void Test_BFu7i_BFu0i_I()
{
  {
    init_simple_test("BFu7i_BFu0i_I");
    static BFu7i_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_I(Test_BFu7i_BFu0i_I, "BFu7i_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_Ip  {
  unsigned int v1:7;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu7i_BFu0i_Ip) C1{ Fi:7 Fi:0 Fp}



static void Test_BFu7i_BFu0i_Ip()
{
  {
    init_simple_test("BFu7i_BFu0i_Ip");
    static BFu7i_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_Ip(Test_BFu7i_BFu0i_Ip, "BFu7i_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_L  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu7i_BFu0i_L) C1{ Fi:7 Fi:0 FL}



static void Test_BFu7i_BFu0i_L()
{
  {
    init_simple_test("BFu7i_BFu0i_L");
    static BFu7i_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_L(Test_BFu7i_BFu0i_L, "BFu7i_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_S  {
  unsigned int v1:7;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu7i_BFu0i_S) C1{ Fi:7 Fi:0 Fs}



static void Test_BFu7i_BFu0i_S()
{
  {
    init_simple_test("BFu7i_BFu0i_S");
    static BFu7i_BFu0i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_S(Test_BFu7i_BFu0i_S, "BFu7i_BFu0i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_Uc  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu7i_BFu0i_Uc) C1{ Fi:7 Fi:0 Fc}



static void Test_BFu7i_BFu0i_Uc()
{
  {
    init_simple_test("BFu7i_BFu0i_Uc");
    static BFu7i_BFu0i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_Uc(Test_BFu7i_BFu0i_Uc, "BFu7i_BFu0i_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_Ui  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu7i_BFu0i_Ui) C1{ Fi:7 Fi:0 Fi}



static void Test_BFu7i_BFu0i_Ui()
{
  {
    init_simple_test("BFu7i_BFu0i_Ui");
    static BFu7i_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_Ui(Test_BFu7i_BFu0i_Ui, "BFu7i_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_Ul  {
  unsigned int v1:7;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu7i_BFu0i_Ul) C1{ Fi:7 Fi:0 FL}



static void Test_BFu7i_BFu0i_Ul()
{
  {
    init_simple_test("BFu7i_BFu0i_Ul");
    static BFu7i_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_Ul(Test_BFu7i_BFu0i_Ul, "BFu7i_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_Us  {
  unsigned int v1:7;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu7i_BFu0i_Us) C1{ Fi:7 Fi:0 Fs}



static void Test_BFu7i_BFu0i_Us()
{
  {
    init_simple_test("BFu7i_BFu0i_Us");
    static BFu7i_BFu0i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_Us(Test_BFu7i_BFu0i_Us, "BFu7i_BFu0i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0i_Vp  {
  unsigned int v1:7;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu7i_BFu0i_Vp) C1{ Fi:7 Fi:0 Fp}



static void Test_BFu7i_BFu0i_Vp()
{
  {
    init_simple_test("BFu7i_BFu0i_Vp");
    static BFu7i_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0i_Vp(Test_BFu7i_BFu0i_Vp, "BFu7i_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll  {
  unsigned int v1:7;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu0ll) C1{ Fi:7 FL:0}



static void Test_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu0ll");
    static BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll(Test_BFu7i_BFu0ll, "BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu0c  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu0ll_BFu0c) C1{ Fi:7 FL:0 Fc:0}



static void Test_BFu7i_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu0c");
    static BFu7i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu0c(Test_BFu7i_BFu0ll_BFu0c, "BFu7i_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu0i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu0ll_BFu0i) C1{ Fi:7 FL:0 Fi:0}



static void Test_BFu7i_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu0i");
    static BFu7i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu0i(Test_BFu7i_BFu0ll_BFu0i, "BFu7i_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu0ll_BFu0ll) C1{ Fi:7 FL:0 FL:0}



static void Test_BFu7i_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu0ll");
    static BFu7i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu0ll(Test_BFu7i_BFu0ll_BFu0ll, "BFu7i_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu0s  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu0ll_BFu0s) C1{ Fi:7 FL:0 Fs:0}



static void Test_BFu7i_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu0s");
    static BFu7i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu0s(Test_BFu7i_BFu0ll_BFu0s, "BFu7i_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu15i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7i_BFu0ll_BFu15i) C1{ Fi:7 FL:0 Fi:15}



static void Test_BFu7i_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu15i");
    static BFu7i_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7i_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu15i(Test_BFu7i_BFu0ll_BFu15i, "BFu7i_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7i_BFu0ll_BFu15ll) C1{ Fi:7 FL:0 FL:15}



static void Test_BFu7i_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu15ll");
    static BFu7i_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7i_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu15ll(Test_BFu7i_BFu0ll_BFu15ll, "BFu7i_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu15s  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7i_BFu0ll_BFu15s) C1{ Fi:7 FL:0 Fs:15}



static void Test_BFu7i_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu15s");
    static BFu7i_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7i_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu15s(Test_BFu7i_BFu0ll_BFu15s, "BFu7i_BFu0ll_BFu15s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu16i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7i_BFu0ll_BFu16i) C1{ Fi:7 FL:0 Fi:16}



static void Test_BFu7i_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu16i");
    static BFu7i_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7i_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu16i(Test_BFu7i_BFu0ll_BFu16i, "BFu7i_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7i_BFu0ll_BFu16ll) C1{ Fi:7 FL:0 FL:16}



static void Test_BFu7i_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu16ll");
    static BFu7i_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7i_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu16ll(Test_BFu7i_BFu0ll_BFu16ll, "BFu7i_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu16s  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7i_BFu0ll_BFu16s) C1{ Fi:7 FL:0 Fs:16}



static void Test_BFu7i_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu16s");
    static BFu7i_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7i_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu16s(Test_BFu7i_BFu0ll_BFu16s, "BFu7i_BFu0ll_BFu16s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu17i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7i_BFu0ll_BFu17i) C1{ Fi:7 FL:0 Fi:17}



static void Test_BFu7i_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu17i");
    static BFu7i_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu7i_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu7i_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu17i(Test_BFu7i_BFu0ll_BFu17i, "BFu7i_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7i_BFu0ll_BFu17ll) C1{ Fi:7 FL:0 FL:17}



static void Test_BFu7i_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu17ll");
    static BFu7i_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu7i_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu7i_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu17ll(Test_BFu7i_BFu0ll_BFu17ll, "BFu7i_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu1c  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7i_BFu0ll_BFu1c) C1{ Fi:7 FL:0 Fc:1}



static void Test_BFu7i_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu1c");
    static BFu7i_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7i_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu1c(Test_BFu7i_BFu0ll_BFu1c, "BFu7i_BFu0ll_BFu1c", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu1i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7i_BFu0ll_BFu1i) C1{ Fi:7 FL:0 Fi:1}



static void Test_BFu7i_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu1i");
    static BFu7i_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7i_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu1i(Test_BFu7i_BFu0ll_BFu1i, "BFu7i_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7i_BFu0ll_BFu1ll) C1{ Fi:7 FL:0 FL:1}



static void Test_BFu7i_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu1ll");
    static BFu7i_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7i_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu1ll(Test_BFu7i_BFu0ll_BFu1ll, "BFu7i_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu1s  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7i_BFu0ll_BFu1s) C1{ Fi:7 FL:0 Fs:1}



static void Test_BFu7i_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu1s");
    static BFu7i_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7i_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu1s(Test_BFu7i_BFu0ll_BFu1s, "BFu7i_BFu0ll_BFu1s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu31i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7i_BFu0ll_BFu31i) C1{ Fi:7 FL:0 Fi:31}



static void Test_BFu7i_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu31i");
    static BFu7i_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu7i_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu7i_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu31i(Test_BFu7i_BFu0ll_BFu31i, "BFu7i_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7i_BFu0ll_BFu31ll) C1{ Fi:7 FL:0 FL:31}



static void Test_BFu7i_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu31ll");
    static BFu7i_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu7i_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu7i_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu31ll(Test_BFu7i_BFu0ll_BFu31ll, "BFu7i_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu32i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7i_BFu0ll_BFu32i) C1{ Fi:7 FL:0 Fi:32}



static void Test_BFu7i_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu32i");
    static BFu7i_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu7i_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu7i_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu32i(Test_BFu7i_BFu0ll_BFu32i, "BFu7i_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7i_BFu0ll_BFu32ll) C1{ Fi:7 FL:0 FL:32}



static void Test_BFu7i_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu32ll");
    static BFu7i_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu7i_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu7i_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu32ll(Test_BFu7i_BFu0ll_BFu32ll, "BFu7i_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu33  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7i_BFu0ll_BFu33) C1{ Fi:7 FL:0 FL:33}



static void Test_BFu7i_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu33");
    static BFu7i_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu7i_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7i_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu33(Test_BFu7i_BFu0ll_BFu33, "BFu7i_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu7c  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7i_BFu0ll_BFu7c) C1{ Fi:7 FL:0 Fc:7}



static void Test_BFu7i_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu7c");
    static BFu7i_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7i_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu7c(Test_BFu7i_BFu0ll_BFu7c, "BFu7i_BFu0ll_BFu7c", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu7i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7i_BFu0ll_BFu7i) C1{ Fi:7 FL:0 Fi:7}



static void Test_BFu7i_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu7i");
    static BFu7i_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7i_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu7i(Test_BFu7i_BFu0ll_BFu7i, "BFu7i_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7i_BFu0ll_BFu7ll) C1{ Fi:7 FL:0 FL:7}



static void Test_BFu7i_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu7ll");
    static BFu7i_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7i_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu7ll(Test_BFu7i_BFu0ll_BFu7ll, "BFu7i_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu7s  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7i_BFu0ll_BFu7s) C1{ Fi:7 FL:0 Fs:7}



static void Test_BFu7i_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu7s");
    static BFu7i_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7i_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu7s(Test_BFu7i_BFu0ll_BFu7s, "BFu7i_BFu0ll_BFu7s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu8c  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7i_BFu0ll_BFu8c) C1{ Fi:7 FL:0 Fc:8}



static void Test_BFu7i_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu8c");
    static BFu7i_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7i_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu8c(Test_BFu7i_BFu0ll_BFu8c, "BFu7i_BFu0ll_BFu8c", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu8i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7i_BFu0ll_BFu8i) C1{ Fi:7 FL:0 Fi:8}



static void Test_BFu7i_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu8i");
    static BFu7i_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7i_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu8i(Test_BFu7i_BFu0ll_BFu8i, "BFu7i_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7i_BFu0ll_BFu8ll) C1{ Fi:7 FL:0 FL:8}



static void Test_BFu7i_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu8ll");
    static BFu7i_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7i_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu8ll(Test_BFu7i_BFu0ll_BFu8ll, "BFu7i_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu8s  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7i_BFu0ll_BFu8s) C1{ Fi:7 FL:0 Fs:8}



static void Test_BFu7i_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu8s");
    static BFu7i_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7i_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu8s(Test_BFu7i_BFu0ll_BFu8s, "BFu7i_BFu0ll_BFu8s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu9i  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7i_BFu0ll_BFu9i) C1{ Fi:7 FL:0 Fi:9}



static void Test_BFu7i_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu9i");
    static BFu7i_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7i_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu9i(Test_BFu7i_BFu0ll_BFu9i, "BFu7i_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7i_BFu0ll_BFu9ll) C1{ Fi:7 FL:0 FL:9}



static void Test_BFu7i_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu9ll");
    static BFu7i_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7i_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu9ll(Test_BFu7i_BFu0ll_BFu9ll, "BFu7i_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_BFu9s  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7i_BFu0ll_BFu9s) C1{ Fi:7 FL:0 Fs:9}



static void Test_BFu7i_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu0ll_BFu9s");
    static BFu7i_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7i_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_BFu9s(Test_BFu7i_BFu0ll_BFu9s, "BFu7i_BFu0ll_BFu9s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_C  {
  unsigned int v1:7;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu7i_BFu0ll_C) C1{ Fi:7 FL:0 Fc}



static void Test_BFu7i_BFu0ll_C()
{
  {
    init_simple_test("BFu7i_BFu0ll_C");
    static BFu7i_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_C(Test_BFu7i_BFu0ll_C, "BFu7i_BFu0ll_C", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_D  {
  unsigned int v1:7;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu7i_BFu0ll_D) C1{ Fi:7 FL:0 FL}



static void Test_BFu7i_BFu0ll_D()
{
  {
    init_simple_test("BFu7i_BFu0ll_D");
    static BFu7i_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_D(Test_BFu7i_BFu0ll_D, "BFu7i_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_F  {
  unsigned int v1:7;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu7i_BFu0ll_F) C1{ Fi:7 FL:0 Fi}



static void Test_BFu7i_BFu0ll_F()
{
  {
    init_simple_test("BFu7i_BFu0ll_F");
    static BFu7i_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_F(Test_BFu7i_BFu0ll_F, "BFu7i_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_I  {
  unsigned int v1:7;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu7i_BFu0ll_I) C1{ Fi:7 FL:0 Fi}



static void Test_BFu7i_BFu0ll_I()
{
  {
    init_simple_test("BFu7i_BFu0ll_I");
    static BFu7i_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_I(Test_BFu7i_BFu0ll_I, "BFu7i_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_Ip  {
  unsigned int v1:7;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu7i_BFu0ll_Ip) C1{ Fi:7 FL:0 Fp}



static void Test_BFu7i_BFu0ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu0ll_Ip");
    static BFu7i_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_Ip(Test_BFu7i_BFu0ll_Ip, "BFu7i_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_L  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu7i_BFu0ll_L) C1{ Fi:7 FL:0 FL}



static void Test_BFu7i_BFu0ll_L()
{
  {
    init_simple_test("BFu7i_BFu0ll_L");
    static BFu7i_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_L(Test_BFu7i_BFu0ll_L, "BFu7i_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_S  {
  unsigned int v1:7;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu7i_BFu0ll_S) C1{ Fi:7 FL:0 Fs}



static void Test_BFu7i_BFu0ll_S()
{
  {
    init_simple_test("BFu7i_BFu0ll_S");
    static BFu7i_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_S(Test_BFu7i_BFu0ll_S, "BFu7i_BFu0ll_S", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_Uc  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu7i_BFu0ll_Uc) C1{ Fi:7 FL:0 Fc}



static void Test_BFu7i_BFu0ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu0ll_Uc");
    static BFu7i_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_Uc(Test_BFu7i_BFu0ll_Uc, "BFu7i_BFu0ll_Uc", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_Ui  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu7i_BFu0ll_Ui) C1{ Fi:7 FL:0 Fi}



static void Test_BFu7i_BFu0ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu0ll_Ui");
    static BFu7i_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_Ui(Test_BFu7i_BFu0ll_Ui, "BFu7i_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_Ul  {
  unsigned int v1:7;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu7i_BFu0ll_Ul) C1{ Fi:7 FL:0 FL}



static void Test_BFu7i_BFu0ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu0ll_Ul");
    static BFu7i_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_Ul(Test_BFu7i_BFu0ll_Ul, "BFu7i_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_Us  {
  unsigned int v1:7;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu7i_BFu0ll_Us) C1{ Fi:7 FL:0 Fs}



static void Test_BFu7i_BFu0ll_Us()
{
  {
    init_simple_test("BFu7i_BFu0ll_Us");
    static BFu7i_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7i_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_Us(Test_BFu7i_BFu0ll_Us, "BFu7i_BFu0ll_Us", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0ll_Vp  {
  unsigned int v1:7;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu7i_BFu0ll_Vp) C1{ Fi:7 FL:0 Fp}



static void Test_BFu7i_BFu0ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu0ll_Vp");
    static BFu7i_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0ll_Vp(Test_BFu7i_BFu0ll_Vp, "BFu7i_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s  {
  unsigned int v1:7;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu0s) C1{ Fi:7 Fs:0}



static void Test_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu0s");
    static BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s(Test_BFu7i_BFu0s, "BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu0c  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu0s_BFu0c) C1{ Fi:7 Fs:0 Fc:0}



static void Test_BFu7i_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu0c");
    static BFu7i_BFu0s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu0c(Test_BFu7i_BFu0s_BFu0c, "BFu7i_BFu0s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu0i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu0s_BFu0i) C1{ Fi:7 Fs:0 Fi:0}



static void Test_BFu7i_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu0i");
    static BFu7i_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu0i(Test_BFu7i_BFu0s_BFu0i, "BFu7i_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu0ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu0s_BFu0ll) C1{ Fi:7 Fs:0 FL:0}



static void Test_BFu7i_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu0ll");
    static BFu7i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu0ll(Test_BFu7i_BFu0s_BFu0ll, "BFu7i_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu0s  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu0s_BFu0s) C1{ Fi:7 Fs:0 Fs:0}



static void Test_BFu7i_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu0s");
    static BFu7i_BFu0s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu0s(Test_BFu7i_BFu0s_BFu0s, "BFu7i_BFu0s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu15i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7i_BFu0s_BFu15i) C1{ Fi:7 Fs:0 Fi:15}



static void Test_BFu7i_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu15i");
    static BFu7i_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu15i(Test_BFu7i_BFu0s_BFu15i, "BFu7i_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu15ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7i_BFu0s_BFu15ll) C1{ Fi:7 Fs:0 FL:15}



static void Test_BFu7i_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu15ll");
    static BFu7i_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu15ll(Test_BFu7i_BFu0s_BFu15ll, "BFu7i_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu15s  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7i_BFu0s_BFu15s) C1{ Fi:7 Fs:0 Fs:15}



static void Test_BFu7i_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu15s");
    static BFu7i_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu15s(Test_BFu7i_BFu0s_BFu15s, "BFu7i_BFu0s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu16i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7i_BFu0s_BFu16i) C1{ Fi:7 Fs:0 Fi:16}



static void Test_BFu7i_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu16i");
    static BFu7i_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu16i(Test_BFu7i_BFu0s_BFu16i, "BFu7i_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu16ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7i_BFu0s_BFu16ll) C1{ Fi:7 Fs:0 FL:16}



static void Test_BFu7i_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu16ll");
    static BFu7i_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu16ll(Test_BFu7i_BFu0s_BFu16ll, "BFu7i_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu16s  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7i_BFu0s_BFu16s) C1{ Fi:7 Fs:0 Fs:16}



static void Test_BFu7i_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu16s");
    static BFu7i_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu16s(Test_BFu7i_BFu0s_BFu16s, "BFu7i_BFu0s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu17i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7i_BFu0s_BFu17i) C1{ Fi:7 Fs:0 Fi:17}



static void Test_BFu7i_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu17i");
    static BFu7i_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7i_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu17i(Test_BFu7i_BFu0s_BFu17i, "BFu7i_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu17ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7i_BFu0s_BFu17ll) C1{ Fi:7 Fs:0 FL:17}



static void Test_BFu7i_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu17ll");
    static BFu7i_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu7i_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu17ll(Test_BFu7i_BFu0s_BFu17ll, "BFu7i_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu1c  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7i_BFu0s_BFu1c) C1{ Fi:7 Fs:0 Fc:1}



static void Test_BFu7i_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu1c");
    static BFu7i_BFu0s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7i_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu1c(Test_BFu7i_BFu0s_BFu1c, "BFu7i_BFu0s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu1i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7i_BFu0s_BFu1i) C1{ Fi:7 Fs:0 Fi:1}



static void Test_BFu7i_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu1i");
    static BFu7i_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7i_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu1i(Test_BFu7i_BFu0s_BFu1i, "BFu7i_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu1ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7i_BFu0s_BFu1ll) C1{ Fi:7 Fs:0 FL:1}



static void Test_BFu7i_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu1ll");
    static BFu7i_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7i_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu1ll(Test_BFu7i_BFu0s_BFu1ll, "BFu7i_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu1s  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7i_BFu0s_BFu1s) C1{ Fi:7 Fs:0 Fs:1}



static void Test_BFu7i_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu1s");
    static BFu7i_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7i_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu1s(Test_BFu7i_BFu0s_BFu1s, "BFu7i_BFu0s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu31i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7i_BFu0s_BFu31i) C1{ Fi:7 Fs:0 Fi:31}



static void Test_BFu7i_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu31i");
    static BFu7i_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu31i(Test_BFu7i_BFu0s_BFu31i, "BFu7i_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu31ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7i_BFu0s_BFu31ll) C1{ Fi:7 Fs:0 FL:31}



static void Test_BFu7i_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu31ll");
    static BFu7i_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu7i_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu31ll(Test_BFu7i_BFu0s_BFu31ll, "BFu7i_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu32i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7i_BFu0s_BFu32i) C1{ Fi:7 Fs:0 Fi:32}



static void Test_BFu7i_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu32i");
    static BFu7i_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu32i(Test_BFu7i_BFu0s_BFu32i, "BFu7i_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu32ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7i_BFu0s_BFu32ll) C1{ Fi:7 Fs:0 FL:32}



static void Test_BFu7i_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu32ll");
    static BFu7i_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu7i_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu32ll(Test_BFu7i_BFu0s_BFu32ll, "BFu7i_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu33  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7i_BFu0s_BFu33) C1{ Fi:7 Fs:0 FL:33}



static void Test_BFu7i_BFu0s_BFu33()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu33");
    static BFu7i_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu7i_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu33(Test_BFu7i_BFu0s_BFu33, "BFu7i_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu7c  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7i_BFu0s_BFu7c) C1{ Fi:7 Fs:0 Fc:7}



static void Test_BFu7i_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu7c");
    static BFu7i_BFu0s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7i_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu7c(Test_BFu7i_BFu0s_BFu7c, "BFu7i_BFu0s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu7i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7i_BFu0s_BFu7i) C1{ Fi:7 Fs:0 Fi:7}



static void Test_BFu7i_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu7i");
    static BFu7i_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7i_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu7i(Test_BFu7i_BFu0s_BFu7i, "BFu7i_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu7ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7i_BFu0s_BFu7ll) C1{ Fi:7 Fs:0 FL:7}



static void Test_BFu7i_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu7ll");
    static BFu7i_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7i_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu7ll(Test_BFu7i_BFu0s_BFu7ll, "BFu7i_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu7s  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7i_BFu0s_BFu7s) C1{ Fi:7 Fs:0 Fs:7}



static void Test_BFu7i_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu7s");
    static BFu7i_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7i_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu7s(Test_BFu7i_BFu0s_BFu7s, "BFu7i_BFu0s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu8c  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7i_BFu0s_BFu8c) C1{ Fi:7 Fs:0 Fc:8}



static void Test_BFu7i_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu8c");
    static BFu7i_BFu0s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7i_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu8c(Test_BFu7i_BFu0s_BFu8c, "BFu7i_BFu0s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu8i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7i_BFu0s_BFu8i) C1{ Fi:7 Fs:0 Fi:8}



static void Test_BFu7i_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu8i");
    static BFu7i_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7i_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu8i(Test_BFu7i_BFu0s_BFu8i, "BFu7i_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu8ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7i_BFu0s_BFu8ll) C1{ Fi:7 Fs:0 FL:8}



static void Test_BFu7i_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu8ll");
    static BFu7i_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7i_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu8ll(Test_BFu7i_BFu0s_BFu8ll, "BFu7i_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu8s  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7i_BFu0s_BFu8s) C1{ Fi:7 Fs:0 Fs:8}



static void Test_BFu7i_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu8s");
    static BFu7i_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7i_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu8s(Test_BFu7i_BFu0s_BFu8s, "BFu7i_BFu0s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu9i  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7i_BFu0s_BFu9i) C1{ Fi:7 Fs:0 Fi:9}



static void Test_BFu7i_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu9i");
    static BFu7i_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7i_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu9i(Test_BFu7i_BFu0s_BFu9i, "BFu7i_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu9ll  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7i_BFu0s_BFu9ll) C1{ Fi:7 Fs:0 FL:9}



static void Test_BFu7i_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu9ll");
    static BFu7i_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7i_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu9ll(Test_BFu7i_BFu0s_BFu9ll, "BFu7i_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_BFu9s  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7i_BFu0s_BFu9s) C1{ Fi:7 Fs:0 Fs:9}



static void Test_BFu7i_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu0s_BFu9s");
    static BFu7i_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7i_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_BFu9s(Test_BFu7i_BFu0s_BFu9s, "BFu7i_BFu0s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_C  {
  unsigned int v1:7;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu7i_BFu0s_C) C1{ Fi:7 Fs:0 Fc}



static void Test_BFu7i_BFu0s_C()
{
  {
    init_simple_test("BFu7i_BFu0s_C");
    static BFu7i_BFu0s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu7i_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_C(Test_BFu7i_BFu0s_C, "BFu7i_BFu0s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_D  {
  unsigned int v1:7;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu7i_BFu0s_D) C1{ Fi:7 Fs:0 FL}



static void Test_BFu7i_BFu0s_D()
{
  {
    init_simple_test("BFu7i_BFu0s_D");
    static BFu7i_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_D(Test_BFu7i_BFu0s_D, "BFu7i_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_F  {
  unsigned int v1:7;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu7i_BFu0s_F) C1{ Fi:7 Fs:0 Fi}



static void Test_BFu7i_BFu0s_F()
{
  {
    init_simple_test("BFu7i_BFu0s_F");
    static BFu7i_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_F(Test_BFu7i_BFu0s_F, "BFu7i_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_I  {
  unsigned int v1:7;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu7i_BFu0s_I) C1{ Fi:7 Fs:0 Fi}



static void Test_BFu7i_BFu0s_I()
{
  {
    init_simple_test("BFu7i_BFu0s_I");
    static BFu7i_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_I(Test_BFu7i_BFu0s_I, "BFu7i_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_Ip  {
  unsigned int v1:7;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu7i_BFu0s_Ip) C1{ Fi:7 Fs:0 Fp}



static void Test_BFu7i_BFu0s_Ip()
{
  {
    init_simple_test("BFu7i_BFu0s_Ip");
    static BFu7i_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_Ip(Test_BFu7i_BFu0s_Ip, "BFu7i_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_L  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu7i_BFu0s_L) C1{ Fi:7 Fs:0 FL}



static void Test_BFu7i_BFu0s_L()
{
  {
    init_simple_test("BFu7i_BFu0s_L");
    static BFu7i_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_L(Test_BFu7i_BFu0s_L, "BFu7i_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_S  {
  unsigned int v1:7;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu7i_BFu0s_S) C1{ Fi:7 Fs:0 Fs}



static void Test_BFu7i_BFu0s_S()
{
  {
    init_simple_test("BFu7i_BFu0s_S");
    static BFu7i_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu7i_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_S(Test_BFu7i_BFu0s_S, "BFu7i_BFu0s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_Uc  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu7i_BFu0s_Uc) C1{ Fi:7 Fs:0 Fc}



static void Test_BFu7i_BFu0s_Uc()
{
  {
    init_simple_test("BFu7i_BFu0s_Uc");
    static BFu7i_BFu0s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu7i_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_Uc(Test_BFu7i_BFu0s_Uc, "BFu7i_BFu0s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_Ui  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu7i_BFu0s_Ui) C1{ Fi:7 Fs:0 Fi}



static void Test_BFu7i_BFu0s_Ui()
{
  {
    init_simple_test("BFu7i_BFu0s_Ui");
    static BFu7i_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu7i_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_Ui(Test_BFu7i_BFu0s_Ui, "BFu7i_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_Ul  {
  unsigned int v1:7;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu7i_BFu0s_Ul) C1{ Fi:7 Fs:0 FL}



static void Test_BFu7i_BFu0s_Ul()
{
  {
    init_simple_test("BFu7i_BFu0s_Ul");
    static BFu7i_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_Ul(Test_BFu7i_BFu0s_Ul, "BFu7i_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_Us  {
  unsigned int v1:7;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu7i_BFu0s_Us) C1{ Fi:7 Fs:0 Fs}



static void Test_BFu7i_BFu0s_Us()
{
  {
    init_simple_test("BFu7i_BFu0s_Us");
    static BFu7i_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu0s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu7i_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_Us(Test_BFu7i_BFu0s_Us, "BFu7i_BFu0s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu0s_Vp  {
  unsigned int v1:7;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu7i_BFu0s_Vp) C1{ Fi:7 Fs:0 Fp}



static void Test_BFu7i_BFu0s_Vp()
{
  {
    init_simple_test("BFu7i_BFu0s_Vp");
    static BFu7i_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu0s_Vp(Test_BFu7i_BFu0s_Vp, "BFu7i_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15i_BFu0c  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu15i_BFu0c) C1{ Fi:7 Fi:15 Fc:0}



static void Test_BFu7i_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu0c");
    static BFu7i_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15i_BFu0c(Test_BFu7i_BFu15i_BFu0c, "BFu7i_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15i_BFu0i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu15i_BFu0i) C1{ Fi:7 Fi:15 Fi:0}



static void Test_BFu7i_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu0i");
    static BFu7i_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15i_BFu0i(Test_BFu7i_BFu15i_BFu0i, "BFu7i_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15i_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu15i_BFu0ll) C1{ Fi:7 Fi:15 FL:0}



static void Test_BFu7i_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu0ll");
    static BFu7i_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15i_BFu0ll(Test_BFu7i_BFu15i_BFu0ll, "BFu7i_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15i_BFu0s  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu15i_BFu0s) C1{ Fi:7 Fi:15 Fs:0}



static void Test_BFu7i_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu0s");
    static BFu7i_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15i_BFu0s(Test_BFu7i_BFu15i_BFu0s, "BFu7i_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15ll_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu15ll_BFu0c) C1{ Fi:7 FL:15 Fc:0}



static void Test_BFu7i_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu0c");
    static BFu7i_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15ll_BFu0c(Test_BFu7i_BFu15ll_BFu0c, "BFu7i_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15ll_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu15ll_BFu0i) C1{ Fi:7 FL:15 Fi:0}



static void Test_BFu7i_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu0i");
    static BFu7i_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15ll_BFu0i(Test_BFu7i_BFu15ll_BFu0i, "BFu7i_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu15ll_BFu0ll) C1{ Fi:7 FL:15 FL:0}



static void Test_BFu7i_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu0ll");
    static BFu7i_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15ll_BFu0ll(Test_BFu7i_BFu15ll_BFu0ll, "BFu7i_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15ll_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu15ll_BFu0s) C1{ Fi:7 FL:15 Fs:0}



static void Test_BFu7i_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu0s");
    static BFu7i_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15ll_BFu0s(Test_BFu7i_BFu15ll_BFu0s, "BFu7i_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15s_BFu0c  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu15s_BFu0c) C1{ Fi:7 Fs:15 Fc:0}



static void Test_BFu7i_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu0c");
    static BFu7i_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15s_BFu0c(Test_BFu7i_BFu15s_BFu0c, "BFu7i_BFu15s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15s_BFu0i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu15s_BFu0i) C1{ Fi:7 Fs:15 Fi:0}



static void Test_BFu7i_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu0i");
    static BFu7i_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15s_BFu0i(Test_BFu7i_BFu15s_BFu0i, "BFu7i_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15s_BFu0ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu15s_BFu0ll) C1{ Fi:7 Fs:15 FL:0}



static void Test_BFu7i_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu0ll");
    static BFu7i_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15s_BFu0ll(Test_BFu7i_BFu15s_BFu0ll, "BFu7i_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu15s_BFu0s  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu15s_BFu0s) C1{ Fi:7 Fs:15 Fs:0}



static void Test_BFu7i_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu0s");
    static BFu7i_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu15s_BFu0s(Test_BFu7i_BFu15s_BFu0s, "BFu7i_BFu15s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16i_BFu0c  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu16i_BFu0c) C1{ Fi:7 Fi:16 Fc:0}



static void Test_BFu7i_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu0c");
    static BFu7i_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16i_BFu0c(Test_BFu7i_BFu16i_BFu0c, "BFu7i_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16i_BFu0i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu16i_BFu0i) C1{ Fi:7 Fi:16 Fi:0}



static void Test_BFu7i_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu0i");
    static BFu7i_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16i_BFu0i(Test_BFu7i_BFu16i_BFu0i, "BFu7i_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16i_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu16i_BFu0ll) C1{ Fi:7 Fi:16 FL:0}



static void Test_BFu7i_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu0ll");
    static BFu7i_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16i_BFu0ll(Test_BFu7i_BFu16i_BFu0ll, "BFu7i_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16i_BFu0s  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu16i_BFu0s) C1{ Fi:7 Fi:16 Fs:0}



static void Test_BFu7i_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu0s");
    static BFu7i_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16i_BFu0s(Test_BFu7i_BFu16i_BFu0s, "BFu7i_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16ll_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu16ll_BFu0c) C1{ Fi:7 FL:16 Fc:0}



static void Test_BFu7i_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu0c");
    static BFu7i_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16ll_BFu0c(Test_BFu7i_BFu16ll_BFu0c, "BFu7i_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16ll_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu16ll_BFu0i) C1{ Fi:7 FL:16 Fi:0}



static void Test_BFu7i_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu0i");
    static BFu7i_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16ll_BFu0i(Test_BFu7i_BFu16ll_BFu0i, "BFu7i_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu16ll_BFu0ll) C1{ Fi:7 FL:16 FL:0}



static void Test_BFu7i_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu0ll");
    static BFu7i_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16ll_BFu0ll(Test_BFu7i_BFu16ll_BFu0ll, "BFu7i_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16ll_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu16ll_BFu0s) C1{ Fi:7 FL:16 Fs:0}



static void Test_BFu7i_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu0s");
    static BFu7i_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16ll_BFu0s(Test_BFu7i_BFu16ll_BFu0s, "BFu7i_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16s_BFu0c  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu16s_BFu0c) C1{ Fi:7 Fs:16 Fc:0}



static void Test_BFu7i_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu0c");
    static BFu7i_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16s_BFu0c(Test_BFu7i_BFu16s_BFu0c, "BFu7i_BFu16s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16s_BFu0i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu16s_BFu0i) C1{ Fi:7 Fs:16 Fi:0}



static void Test_BFu7i_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu0i");
    static BFu7i_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16s_BFu0i(Test_BFu7i_BFu16s_BFu0i, "BFu7i_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16s_BFu0ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu16s_BFu0ll) C1{ Fi:7 Fs:16 FL:0}



static void Test_BFu7i_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu0ll");
    static BFu7i_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16s_BFu0ll(Test_BFu7i_BFu16s_BFu0ll, "BFu7i_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu16s_BFu0s  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu16s_BFu0s) C1{ Fi:7 Fs:16 Fs:0}



static void Test_BFu7i_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu0s");
    static BFu7i_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu16s_BFu0s(Test_BFu7i_BFu16s_BFu0s, "BFu7i_BFu16s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu17i_BFu0c  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu17i_BFu0c) C1{ Fi:7 Fi:17 Fc:0}



static void Test_BFu7i_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu0c");
    static BFu7i_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu17i_BFu0c(Test_BFu7i_BFu17i_BFu0c, "BFu7i_BFu17i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu17i_BFu0i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu17i_BFu0i) C1{ Fi:7 Fi:17 Fi:0}



static void Test_BFu7i_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu0i");
    static BFu7i_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu17i_BFu0i(Test_BFu7i_BFu17i_BFu0i, "BFu7i_BFu17i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu17i_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu17i_BFu0ll) C1{ Fi:7 Fi:17 FL:0}



static void Test_BFu7i_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu0ll");
    static BFu7i_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu17i_BFu0ll(Test_BFu7i_BFu17i_BFu0ll, "BFu7i_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu17i_BFu0s  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu17i_BFu0s) C1{ Fi:7 Fi:17 Fs:0}



static void Test_BFu7i_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu0s");
    static BFu7i_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu17i_BFu0s(Test_BFu7i_BFu17i_BFu0s, "BFu7i_BFu17i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu17ll_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu17ll_BFu0c) C1{ Fi:7 FL:17 Fc:0}



static void Test_BFu7i_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu0c");
    static BFu7i_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu17ll_BFu0c(Test_BFu7i_BFu17ll_BFu0c, "BFu7i_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu17ll_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu17ll_BFu0i) C1{ Fi:7 FL:17 Fi:0}



static void Test_BFu7i_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu0i");
    static BFu7i_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu17ll_BFu0i(Test_BFu7i_BFu17ll_BFu0i, "BFu7i_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu17ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu17ll_BFu0ll) C1{ Fi:7 FL:17 FL:0}



static void Test_BFu7i_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu0ll");
    static BFu7i_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu17ll_BFu0ll(Test_BFu7i_BFu17ll_BFu0ll, "BFu7i_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu17ll_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu17ll_BFu0s) C1{ Fi:7 FL:17 Fs:0}



static void Test_BFu7i_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu0s");
    static BFu7i_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu17ll_BFu0s(Test_BFu7i_BFu17ll_BFu0s, "BFu7i_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1c_BFu0c  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu1c_BFu0c) C1{ Fi:7 Fc:1 Fc:0}



static void Test_BFu7i_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu0c");
    static BFu7i_BFu1c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1c_BFu0c(Test_BFu7i_BFu1c_BFu0c, "BFu7i_BFu1c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1c_BFu0i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu1c_BFu0i) C1{ Fi:7 Fc:1 Fi:0}



static void Test_BFu7i_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu0i");
    static BFu7i_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1c_BFu0i(Test_BFu7i_BFu1c_BFu0i, "BFu7i_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1c_BFu0ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu1c_BFu0ll) C1{ Fi:7 Fc:1 FL:0}



static void Test_BFu7i_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu0ll");
    static BFu7i_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1c_BFu0ll(Test_BFu7i_BFu1c_BFu0ll, "BFu7i_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1c_BFu0s  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu1c_BFu0s) C1{ Fi:7 Fc:1 Fs:0}



static void Test_BFu7i_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu0s");
    static BFu7i_BFu1c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1c_BFu0s(Test_BFu7i_BFu1c_BFu0s, "BFu7i_BFu1c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1i_BFu0c  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu1i_BFu0c) C1{ Fi:7 Fi:1 Fc:0}



static void Test_BFu7i_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu0c");
    static BFu7i_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1i_BFu0c(Test_BFu7i_BFu1i_BFu0c, "BFu7i_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1i_BFu0i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu1i_BFu0i) C1{ Fi:7 Fi:1 Fi:0}



static void Test_BFu7i_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu0i");
    static BFu7i_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1i_BFu0i(Test_BFu7i_BFu1i_BFu0i, "BFu7i_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1i_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu1i_BFu0ll) C1{ Fi:7 Fi:1 FL:0}



static void Test_BFu7i_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu0ll");
    static BFu7i_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1i_BFu0ll(Test_BFu7i_BFu1i_BFu0ll, "BFu7i_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1i_BFu0s  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu1i_BFu0s) C1{ Fi:7 Fi:1 Fs:0}



static void Test_BFu7i_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu0s");
    static BFu7i_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1i_BFu0s(Test_BFu7i_BFu1i_BFu0s, "BFu7i_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1ll_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu1ll_BFu0c) C1{ Fi:7 FL:1 Fc:0}



static void Test_BFu7i_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu0c");
    static BFu7i_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1ll_BFu0c(Test_BFu7i_BFu1ll_BFu0c, "BFu7i_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1ll_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu1ll_BFu0i) C1{ Fi:7 FL:1 Fi:0}



static void Test_BFu7i_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu0i");
    static BFu7i_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1ll_BFu0i(Test_BFu7i_BFu1ll_BFu0i, "BFu7i_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu1ll_BFu0ll) C1{ Fi:7 FL:1 FL:0}



static void Test_BFu7i_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu0ll");
    static BFu7i_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1ll_BFu0ll(Test_BFu7i_BFu1ll_BFu0ll, "BFu7i_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1ll_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu1ll_BFu0s) C1{ Fi:7 FL:1 Fs:0}



static void Test_BFu7i_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu0s");
    static BFu7i_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1ll_BFu0s(Test_BFu7i_BFu1ll_BFu0s, "BFu7i_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1s_BFu0c  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu1s_BFu0c) C1{ Fi:7 Fs:1 Fc:0}



static void Test_BFu7i_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu0c");
    static BFu7i_BFu1s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1s_BFu0c(Test_BFu7i_BFu1s_BFu0c, "BFu7i_BFu1s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1s_BFu0i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu1s_BFu0i) C1{ Fi:7 Fs:1 Fi:0}



static void Test_BFu7i_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu0i");
    static BFu7i_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1s_BFu0i(Test_BFu7i_BFu1s_BFu0i, "BFu7i_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1s_BFu0ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu1s_BFu0ll) C1{ Fi:7 Fs:1 FL:0}



static void Test_BFu7i_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu0ll");
    static BFu7i_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1s_BFu0ll(Test_BFu7i_BFu1s_BFu0ll, "BFu7i_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu1s_BFu0s  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu1s_BFu0s) C1{ Fi:7 Fs:1 Fs:0}



static void Test_BFu7i_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu0s");
    static BFu7i_BFu1s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu1s_BFu0s(Test_BFu7i_BFu1s_BFu0s, "BFu7i_BFu1s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu31i_BFu0c  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu31i_BFu0c) C1{ Fi:7 Fi:31 Fc:0}



static void Test_BFu7i_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu0c");
    static BFu7i_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu31i_BFu0c(Test_BFu7i_BFu31i_BFu0c, "BFu7i_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu31i_BFu0i  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu31i_BFu0i) C1{ Fi:7 Fi:31 Fi:0}



static void Test_BFu7i_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu0i");
    static BFu7i_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu31i_BFu0i(Test_BFu7i_BFu31i_BFu0i, "BFu7i_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu31i_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu31i_BFu0ll) C1{ Fi:7 Fi:31 FL:0}



static void Test_BFu7i_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu0ll");
    static BFu7i_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu31i_BFu0ll(Test_BFu7i_BFu31i_BFu0ll, "BFu7i_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu31i_BFu0s  {
  unsigned int v1:7;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu31i_BFu0s) C1{ Fi:7 Fi:31 Fs:0}



static void Test_BFu7i_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu31i_BFu0s");
    static BFu7i_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7i_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu31i_BFu0s(Test_BFu7i_BFu31i_BFu0s, "BFu7i_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu31ll_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu31ll_BFu0c) C1{ Fi:7 FL:31 Fc:0}



static void Test_BFu7i_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu0c");
    static BFu7i_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu31ll_BFu0c(Test_BFu7i_BFu31ll_BFu0c, "BFu7i_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu31ll_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu31ll_BFu0i) C1{ Fi:7 FL:31 Fi:0}



static void Test_BFu7i_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu0i");
    static BFu7i_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu31ll_BFu0i(Test_BFu7i_BFu31ll_BFu0i, "BFu7i_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu31ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu31ll_BFu0ll) C1{ Fi:7 FL:31 FL:0}



static void Test_BFu7i_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu0ll");
    static BFu7i_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu31ll_BFu0ll(Test_BFu7i_BFu31ll_BFu0ll, "BFu7i_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu31ll_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu31ll_BFu0s) C1{ Fi:7 FL:31 Fs:0}



static void Test_BFu7i_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu31ll_BFu0s");
    static BFu7i_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7i_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu31ll_BFu0s(Test_BFu7i_BFu31ll_BFu0s, "BFu7i_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu32i_BFu0c  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu32i_BFu0c) C1{ Fi:7 Fi:32 Fc:0}



static void Test_BFu7i_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu0c");
    static BFu7i_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu32i_BFu0c(Test_BFu7i_BFu32i_BFu0c, "BFu7i_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu32i_BFu0i  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu32i_BFu0i) C1{ Fi:7 Fi:32 Fi:0}



static void Test_BFu7i_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu0i");
    static BFu7i_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu32i_BFu0i(Test_BFu7i_BFu32i_BFu0i, "BFu7i_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu32i_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu32i_BFu0ll) C1{ Fi:7 Fi:32 FL:0}



static void Test_BFu7i_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu0ll");
    static BFu7i_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu32i_BFu0ll(Test_BFu7i_BFu32i_BFu0ll, "BFu7i_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu32i_BFu0s  {
  unsigned int v1:7;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu32i_BFu0s) C1{ Fi:7 Fi:32 Fs:0}



static void Test_BFu7i_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu32i_BFu0s");
    static BFu7i_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7i_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu32i_BFu0s(Test_BFu7i_BFu32i_BFu0s, "BFu7i_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu32ll_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu32ll_BFu0c) C1{ Fi:7 FL:32 Fc:0}



static void Test_BFu7i_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu0c");
    static BFu7i_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu32ll_BFu0c(Test_BFu7i_BFu32ll_BFu0c, "BFu7i_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu32ll_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu32ll_BFu0i) C1{ Fi:7 FL:32 Fi:0}



static void Test_BFu7i_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu0i");
    static BFu7i_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu32ll_BFu0i(Test_BFu7i_BFu32ll_BFu0i, "BFu7i_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu32ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu32ll_BFu0ll) C1{ Fi:7 FL:32 FL:0}



static void Test_BFu7i_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu0ll");
    static BFu7i_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu32ll_BFu0ll(Test_BFu7i_BFu32ll_BFu0ll, "BFu7i_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu32ll_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu32ll_BFu0s) C1{ Fi:7 FL:32 Fs:0}



static void Test_BFu7i_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu32ll_BFu0s");
    static BFu7i_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7i_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu32ll_BFu0s(Test_BFu7i_BFu32ll_BFu0s, "BFu7i_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu33_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu33_BFu0c) C1{ Fi:7 FL:33 Fc:0}



static void Test_BFu7i_BFu33_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu33_BFu0c");
    static BFu7i_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu33_BFu0c(Test_BFu7i_BFu33_BFu0c, "BFu7i_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu33_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu33_BFu0i) C1{ Fi:7 FL:33 Fi:0}



static void Test_BFu7i_BFu33_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu33_BFu0i");
    static BFu7i_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu33_BFu0i(Test_BFu7i_BFu33_BFu0i, "BFu7i_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu33_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu33_BFu0ll) C1{ Fi:7 FL:33 FL:0}



static void Test_BFu7i_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu33_BFu0ll");
    static BFu7i_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu33_BFu0ll(Test_BFu7i_BFu33_BFu0ll, "BFu7i_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu33_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu33_BFu0s) C1{ Fi:7 FL:33 Fs:0}



static void Test_BFu7i_BFu33_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu33_BFu0s");
    static BFu7i_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7i_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu33_BFu0s(Test_BFu7i_BFu33_BFu0s, "BFu7i_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7c_BFu0c  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu7c_BFu0c) C1{ Fi:7 Fc:7 Fc:0}



static void Test_BFu7i_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu0c");
    static BFu7i_BFu7c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7c_BFu0c(Test_BFu7i_BFu7c_BFu0c, "BFu7i_BFu7c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7c_BFu0i  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu7c_BFu0i) C1{ Fi:7 Fc:7 Fi:0}



static void Test_BFu7i_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu0i");
    static BFu7i_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7c_BFu0i(Test_BFu7i_BFu7c_BFu0i, "BFu7i_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7c_BFu0ll  {
  unsigned int v1:7;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu7c_BFu0ll) C1{ Fi:7 Fc:7 FL:0}



static void Test_BFu7i_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu0ll");
    static BFu7i_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7c_BFu0ll(Test_BFu7i_BFu7c_BFu0ll, "BFu7i_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7c_BFu0s  {
  unsigned int v1:7;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu7c_BFu0s) C1{ Fi:7 Fc:7 Fs:0}



static void Test_BFu7i_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu7c_BFu0s");
    static BFu7i_BFu7c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7c_BFu0s(Test_BFu7i_BFu7c_BFu0s, "BFu7i_BFu7c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7i_BFu0c  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu7i_BFu0c) C1{ Fi:7 Fi:7 Fc:0}



static void Test_BFu7i_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu0c");
    static BFu7i_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7i_BFu0c(Test_BFu7i_BFu7i_BFu0c, "BFu7i_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7i_BFu0i  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu7i_BFu0i) C1{ Fi:7 Fi:7 Fi:0}



static void Test_BFu7i_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu0i");
    static BFu7i_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7i_BFu0i(Test_BFu7i_BFu7i_BFu0i, "BFu7i_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7i_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu7i_BFu0ll) C1{ Fi:7 Fi:7 FL:0}



static void Test_BFu7i_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu0ll");
    static BFu7i_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7i_BFu0ll(Test_BFu7i_BFu7i_BFu0ll, "BFu7i_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7i_BFu0s  {
  unsigned int v1:7;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu7i_BFu0s) C1{ Fi:7 Fi:7 Fs:0}



static void Test_BFu7i_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu7i_BFu0s");
    static BFu7i_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7i_BFu0s(Test_BFu7i_BFu7i_BFu0s, "BFu7i_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7ll_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu7ll_BFu0c) C1{ Fi:7 FL:7 Fc:0}



static void Test_BFu7i_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu0c");
    static BFu7i_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7ll_BFu0c(Test_BFu7i_BFu7ll_BFu0c, "BFu7i_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7ll_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu7ll_BFu0i) C1{ Fi:7 FL:7 Fi:0}



static void Test_BFu7i_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu0i");
    static BFu7i_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7ll_BFu0i(Test_BFu7i_BFu7ll_BFu0i, "BFu7i_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu7ll_BFu0ll) C1{ Fi:7 FL:7 FL:0}



static void Test_BFu7i_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu0ll");
    static BFu7i_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7ll_BFu0ll(Test_BFu7i_BFu7ll_BFu0ll, "BFu7i_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7ll_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu7ll_BFu0s) C1{ Fi:7 FL:7 Fs:0}



static void Test_BFu7i_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu7ll_BFu0s");
    static BFu7i_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7ll_BFu0s(Test_BFu7i_BFu7ll_BFu0s, "BFu7i_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7s_BFu0c  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu7s_BFu0c) C1{ Fi:7 Fs:7 Fc:0}



static void Test_BFu7i_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu0c");
    static BFu7i_BFu7s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7s_BFu0c(Test_BFu7i_BFu7s_BFu0c, "BFu7i_BFu7s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7s_BFu0i  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu7s_BFu0i) C1{ Fi:7 Fs:7 Fi:0}



static void Test_BFu7i_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu0i");
    static BFu7i_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7s_BFu0i(Test_BFu7i_BFu7s_BFu0i, "BFu7i_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7s_BFu0ll  {
  unsigned int v1:7;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu7s_BFu0ll) C1{ Fi:7 Fs:7 FL:0}



static void Test_BFu7i_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu0ll");
    static BFu7i_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7s_BFu0ll(Test_BFu7i_BFu7s_BFu0ll, "BFu7i_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu7s_BFu0s  {
  unsigned int v1:7;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu7s_BFu0s) C1{ Fi:7 Fs:7 Fs:0}



static void Test_BFu7i_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu7s_BFu0s");
    static BFu7i_BFu7s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu7s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu7s_BFu0s(Test_BFu7i_BFu7s_BFu0s, "BFu7i_BFu7s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8c_BFu0c  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu8c_BFu0c) C1{ Fi:7 Fc:8 Fc:0}



static void Test_BFu7i_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu0c");
    static BFu7i_BFu8c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8c_BFu0c(Test_BFu7i_BFu8c_BFu0c, "BFu7i_BFu8c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8c_BFu0i  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu8c_BFu0i) C1{ Fi:7 Fc:8 Fi:0}



static void Test_BFu7i_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu0i");
    static BFu7i_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8c_BFu0i(Test_BFu7i_BFu8c_BFu0i, "BFu7i_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8c_BFu0ll  {
  unsigned int v1:7;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu8c_BFu0ll) C1{ Fi:7 Fc:8 FL:0}



static void Test_BFu7i_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu0ll");
    static BFu7i_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8c_BFu0ll(Test_BFu7i_BFu8c_BFu0ll, "BFu7i_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8c_BFu0s  {
  unsigned int v1:7;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu8c_BFu0s) C1{ Fi:7 Fc:8 Fs:0}



static void Test_BFu7i_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu8c_BFu0s");
    static BFu7i_BFu8c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7i_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8c_BFu0s(Test_BFu7i_BFu8c_BFu0s, "BFu7i_BFu8c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8i_BFu0c  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu8i_BFu0c) C1{ Fi:7 Fi:8 Fc:0}



static void Test_BFu7i_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu0c");
    static BFu7i_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8i_BFu0c(Test_BFu7i_BFu8i_BFu0c, "BFu7i_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8i_BFu0i  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu8i_BFu0i) C1{ Fi:7 Fi:8 Fi:0}



static void Test_BFu7i_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu0i");
    static BFu7i_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8i_BFu0i(Test_BFu7i_BFu8i_BFu0i, "BFu7i_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8i_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu8i_BFu0ll) C1{ Fi:7 Fi:8 FL:0}



static void Test_BFu7i_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu0ll");
    static BFu7i_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8i_BFu0ll(Test_BFu7i_BFu8i_BFu0ll, "BFu7i_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8i_BFu0s  {
  unsigned int v1:7;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu8i_BFu0s) C1{ Fi:7 Fi:8 Fs:0}



static void Test_BFu7i_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu8i_BFu0s");
    static BFu7i_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8i_BFu0s(Test_BFu7i_BFu8i_BFu0s, "BFu7i_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8ll_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu8ll_BFu0c) C1{ Fi:7 FL:8 Fc:0}



static void Test_BFu7i_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu0c");
    static BFu7i_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8ll_BFu0c(Test_BFu7i_BFu8ll_BFu0c, "BFu7i_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8ll_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu8ll_BFu0i) C1{ Fi:7 FL:8 Fi:0}



static void Test_BFu7i_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu0i");
    static BFu7i_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8ll_BFu0i(Test_BFu7i_BFu8ll_BFu0i, "BFu7i_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu8ll_BFu0ll) C1{ Fi:7 FL:8 FL:0}



static void Test_BFu7i_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu0ll");
    static BFu7i_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8ll_BFu0ll(Test_BFu7i_BFu8ll_BFu0ll, "BFu7i_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8ll_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu8ll_BFu0s) C1{ Fi:7 FL:8 Fs:0}



static void Test_BFu7i_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu8ll_BFu0s");
    static BFu7i_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8ll_BFu0s(Test_BFu7i_BFu8ll_BFu0s, "BFu7i_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8s_BFu0c  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu8s_BFu0c) C1{ Fi:7 Fs:8 Fc:0}



static void Test_BFu7i_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu0c");
    static BFu7i_BFu8s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8s_BFu0c(Test_BFu7i_BFu8s_BFu0c, "BFu7i_BFu8s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8s_BFu0i  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu8s_BFu0i) C1{ Fi:7 Fs:8 Fi:0}



static void Test_BFu7i_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu0i");
    static BFu7i_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8s_BFu0i(Test_BFu7i_BFu8s_BFu0i, "BFu7i_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8s_BFu0ll  {
  unsigned int v1:7;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu8s_BFu0ll) C1{ Fi:7 Fs:8 FL:0}



static void Test_BFu7i_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu0ll");
    static BFu7i_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8s_BFu0ll(Test_BFu7i_BFu8s_BFu0ll, "BFu7i_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu8s_BFu0s  {
  unsigned int v1:7;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu8s_BFu0s) C1{ Fi:7 Fs:8 Fs:0}



static void Test_BFu7i_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu8s_BFu0s");
    static BFu7i_BFu8s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu8s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7i_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu8s_BFu0s(Test_BFu7i_BFu8s_BFu0s, "BFu7i_BFu8s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9i_BFu0c  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu9i_BFu0c) C1{ Fi:7 Fi:9 Fc:0}



static void Test_BFu7i_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu0c");
    static BFu7i_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9i_BFu0c(Test_BFu7i_BFu9i_BFu0c, "BFu7i_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9i_BFu0i  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu9i_BFu0i) C1{ Fi:7 Fi:9 Fi:0}



static void Test_BFu7i_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu0i");
    static BFu7i_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9i_BFu0i(Test_BFu7i_BFu9i_BFu0i, "BFu7i_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9i_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu9i_BFu0ll) C1{ Fi:7 Fi:9 FL:0}



static void Test_BFu7i_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu0ll");
    static BFu7i_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9i_BFu0ll(Test_BFu7i_BFu9i_BFu0ll, "BFu7i_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9i_BFu0s  {
  unsigned int v1:7;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu9i_BFu0s) C1{ Fi:7 Fi:9 Fs:0}



static void Test_BFu7i_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu9i_BFu0s");
    static BFu7i_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9i_BFu0s(Test_BFu7i_BFu9i_BFu0s, "BFu7i_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9ll_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu9ll_BFu0c) C1{ Fi:7 FL:9 Fc:0}



static void Test_BFu7i_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu0c");
    static BFu7i_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9ll_BFu0c(Test_BFu7i_BFu9ll_BFu0c, "BFu7i_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9ll_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu9ll_BFu0i) C1{ Fi:7 FL:9 Fi:0}



static void Test_BFu7i_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu0i");
    static BFu7i_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9ll_BFu0i(Test_BFu7i_BFu9ll_BFu0i, "BFu7i_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9ll_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu9ll_BFu0ll) C1{ Fi:7 FL:9 FL:0}



static void Test_BFu7i_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu0ll");
    static BFu7i_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9ll_BFu0ll(Test_BFu7i_BFu9ll_BFu0ll, "BFu7i_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9ll_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu9ll_BFu0s) C1{ Fi:7 FL:9 Fs:0}



static void Test_BFu7i_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu9ll_BFu0s");
    static BFu7i_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9ll_BFu0s(Test_BFu7i_BFu9ll_BFu0s, "BFu7i_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9s_BFu0c  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7i_BFu9s_BFu0c) C1{ Fi:7 Fs:9 Fc:0}



static void Test_BFu7i_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu0c");
    static BFu7i_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9s_BFu0c(Test_BFu7i_BFu9s_BFu0c, "BFu7i_BFu9s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9s_BFu0i  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7i_BFu9s_BFu0i) C1{ Fi:7 Fs:9 Fi:0}



static void Test_BFu7i_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu0i");
    static BFu7i_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9s_BFu0i(Test_BFu7i_BFu9s_BFu0i, "BFu7i_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9s_BFu0ll  {
  unsigned int v1:7;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7i_BFu9s_BFu0ll) C1{ Fi:7 Fs:9 FL:0}



static void Test_BFu7i_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu0ll");
    static BFu7i_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9s_BFu0ll(Test_BFu7i_BFu9s_BFu0ll, "BFu7i_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_BFu9s_BFu0s  {
  unsigned int v1:7;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7i_BFu9s_BFu0s) C1{ Fi:7 Fs:9 Fs:0}



static void Test_BFu7i_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu7i_BFu9s_BFu0s");
    static BFu7i_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu9s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7i_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7i_BFu9s_BFu0s(Test_BFu7i_BFu9s_BFu0s, "BFu7i_BFu9s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_C_BFu0c  {
  unsigned int v1:7;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_C_BFu0c) C1{ Fi:7 Fc Fc:0}



static void Test_BFu7i_C_BFu0c()
{
  {
    init_simple_test("BFu7i_C_BFu0c");
    static BFu7i_C_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu0c");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_C_BFu0c(Test_BFu7i_C_BFu0c, "BFu7i_C_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_C_BFu0i  {
  unsigned int v1:7;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_C_BFu0i) C1{ Fi:7 Fc Fi:0}



static void Test_BFu7i_C_BFu0i()
{
  {
    init_simple_test("BFu7i_C_BFu0i");
    static BFu7i_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu0i");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_C_BFu0i(Test_BFu7i_C_BFu0i, "BFu7i_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_C_BFu0ll  {
  unsigned int v1:7;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_C_BFu0ll) C1{ Fi:7 Fc FL:0}



static void Test_BFu7i_C_BFu0ll()
{
  {
    init_simple_test("BFu7i_C_BFu0ll");
    static BFu7i_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_C_BFu0ll(Test_BFu7i_C_BFu0ll, "BFu7i_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_C_BFu0s  {
  unsigned int v1:7;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_C_BFu0s) C1{ Fi:7 Fc Fs:0}



static void Test_BFu7i_C_BFu0s()
{
  {
    init_simple_test("BFu7i_C_BFu0s");
    static BFu7i_C_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_C_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_C_BFu0s");
    check_field_offset(lv, v2, 1, "BFu7i_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_C_BFu0s(Test_BFu7i_C_BFu0s, "BFu7i_C_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_D_BFu0c  {
  unsigned int v1:7;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_D_BFu0c) C1{ Fi:7 FL Fc:0}



static void Test_BFu7i_D_BFu0c()
{
  {
    init_simple_test("BFu7i_D_BFu0c");
    static BFu7i_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_D_BFu0c(Test_BFu7i_D_BFu0c, "BFu7i_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_D_BFu0i  {
  unsigned int v1:7;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_D_BFu0i) C1{ Fi:7 FL Fi:0}



static void Test_BFu7i_D_BFu0i()
{
  {
    init_simple_test("BFu7i_D_BFu0i");
    static BFu7i_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_D_BFu0i(Test_BFu7i_D_BFu0i, "BFu7i_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_D_BFu0ll  {
  unsigned int v1:7;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_D_BFu0ll) C1{ Fi:7 FL FL:0}



static void Test_BFu7i_D_BFu0ll()
{
  {
    init_simple_test("BFu7i_D_BFu0ll");
    static BFu7i_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_D_BFu0ll(Test_BFu7i_D_BFu0ll, "BFu7i_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_D_BFu0s  {
  unsigned int v1:7;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_D_BFu0s) C1{ Fi:7 FL Fs:0}



static void Test_BFu7i_D_BFu0s()
{
  {
    init_simple_test("BFu7i_D_BFu0s");
    static BFu7i_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_D_BFu0s(Test_BFu7i_D_BFu0s, "BFu7i_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_F_BFu0c  {
  unsigned int v1:7;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_F_BFu0c) C1{ Fi:7 Fi Fc:0}



static void Test_BFu7i_F_BFu0c()
{
  {
    init_simple_test("BFu7i_F_BFu0c");
    static BFu7i_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_F_BFu0c(Test_BFu7i_F_BFu0c, "BFu7i_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_F_BFu0i  {
  unsigned int v1:7;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_F_BFu0i) C1{ Fi:7 Fi Fi:0}



static void Test_BFu7i_F_BFu0i()
{
  {
    init_simple_test("BFu7i_F_BFu0i");
    static BFu7i_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_F_BFu0i(Test_BFu7i_F_BFu0i, "BFu7i_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_F_BFu0ll  {
  unsigned int v1:7;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_F_BFu0ll) C1{ Fi:7 Fi FL:0}



static void Test_BFu7i_F_BFu0ll()
{
  {
    init_simple_test("BFu7i_F_BFu0ll");
    static BFu7i_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_F_BFu0ll(Test_BFu7i_F_BFu0ll, "BFu7i_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_F_BFu0s  {
  unsigned int v1:7;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_F_BFu0s) C1{ Fi:7 Fi Fs:0}



static void Test_BFu7i_F_BFu0s()
{
  {
    init_simple_test("BFu7i_F_BFu0s");
    static BFu7i_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7i_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_F_BFu0s(Test_BFu7i_F_BFu0s, "BFu7i_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_I_BFu0c  {
  unsigned int v1:7;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_I_BFu0c) C1{ Fi:7 Fi Fc:0}



static void Test_BFu7i_I_BFu0c()
{
  {
    init_simple_test("BFu7i_I_BFu0c");
    static BFu7i_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_I_BFu0c(Test_BFu7i_I_BFu0c, "BFu7i_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_I_BFu0i  {
  unsigned int v1:7;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_I_BFu0i) C1{ Fi:7 Fi Fi:0}



static void Test_BFu7i_I_BFu0i()
{
  {
    init_simple_test("BFu7i_I_BFu0i");
    static BFu7i_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_I_BFu0i(Test_BFu7i_I_BFu0i, "BFu7i_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_I_BFu0ll  {
  unsigned int v1:7;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_I_BFu0ll) C1{ Fi:7 Fi FL:0}



static void Test_BFu7i_I_BFu0ll()
{
  {
    init_simple_test("BFu7i_I_BFu0ll");
    static BFu7i_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_I_BFu0ll(Test_BFu7i_I_BFu0ll, "BFu7i_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_I_BFu0s  {
  unsigned int v1:7;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_I_BFu0s) C1{ Fi:7 Fi Fs:0}



static void Test_BFu7i_I_BFu0s()
{
  {
    init_simple_test("BFu7i_I_BFu0s");
    static BFu7i_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7i_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_I_BFu0s(Test_BFu7i_I_BFu0s, "BFu7i_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ip_BFu0c  {
  unsigned int v1:7;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_Ip_BFu0c) C1{ Fi:7 Fp Fc:0}



static void Test_BFu7i_Ip_BFu0c()
{
  {
    init_simple_test("BFu7i_Ip_BFu0c");
    static BFu7i_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ip_BFu0c(Test_BFu7i_Ip_BFu0c, "BFu7i_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ip_BFu0i  {
  unsigned int v1:7;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_Ip_BFu0i) C1{ Fi:7 Fp Fi:0}



static void Test_BFu7i_Ip_BFu0i()
{
  {
    init_simple_test("BFu7i_Ip_BFu0i");
    static BFu7i_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ip_BFu0i(Test_BFu7i_Ip_BFu0i, "BFu7i_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ip_BFu0ll  {
  unsigned int v1:7;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_Ip_BFu0ll) C1{ Fi:7 Fp FL:0}



static void Test_BFu7i_Ip_BFu0ll()
{
  {
    init_simple_test("BFu7i_Ip_BFu0ll");
    static BFu7i_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ip_BFu0ll(Test_BFu7i_Ip_BFu0ll, "BFu7i_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ip_BFu0s  {
  unsigned int v1:7;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_Ip_BFu0s) C1{ Fi:7 Fp Fs:0}



static void Test_BFu7i_Ip_BFu0s()
{
  {
    init_simple_test("BFu7i_Ip_BFu0s");
    static BFu7i_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ip_BFu0s(Test_BFu7i_Ip_BFu0s, "BFu7i_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_L_BFu0c  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_L_BFu0c) C1{ Fi:7 FL Fc:0}



static void Test_BFu7i_L_BFu0c()
{
  {
    init_simple_test("BFu7i_L_BFu0c");
    static BFu7i_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_L_BFu0c(Test_BFu7i_L_BFu0c, "BFu7i_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_L_BFu0i  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_L_BFu0i) C1{ Fi:7 FL Fi:0}



static void Test_BFu7i_L_BFu0i()
{
  {
    init_simple_test("BFu7i_L_BFu0i");
    static BFu7i_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_L_BFu0i(Test_BFu7i_L_BFu0i, "BFu7i_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_L_BFu0ll  {
  unsigned int v1:7;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_L_BFu0ll) C1{ Fi:7 FL FL:0}



static void Test_BFu7i_L_BFu0ll()
{
  {
    init_simple_test("BFu7i_L_BFu0ll");
    static BFu7i_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_L_BFu0ll(Test_BFu7i_L_BFu0ll, "BFu7i_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_L_BFu0s  {
  unsigned int v1:7;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_L_BFu0s) C1{ Fi:7 FL Fs:0}



static void Test_BFu7i_L_BFu0s()
{
  {
    init_simple_test("BFu7i_L_BFu0s");
    static BFu7i_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_L_BFu0s(Test_BFu7i_L_BFu0s, "BFu7i_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_S_BFu0c  {
  unsigned int v1:7;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_S_BFu0c) C1{ Fi:7 Fs Fc:0}



static void Test_BFu7i_S_BFu0c()
{
  {
    init_simple_test("BFu7i_S_BFu0c");
    static BFu7i_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_S_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_S_BFu0c(Test_BFu7i_S_BFu0c, "BFu7i_S_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_S_BFu0i  {
  unsigned int v1:7;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_S_BFu0i) C1{ Fi:7 Fs Fi:0}



static void Test_BFu7i_S_BFu0i()
{
  {
    init_simple_test("BFu7i_S_BFu0i");
    static BFu7i_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_S_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_S_BFu0i(Test_BFu7i_S_BFu0i, "BFu7i_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_S_BFu0ll  {
  unsigned int v1:7;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_S_BFu0ll) C1{ Fi:7 Fs FL:0}



static void Test_BFu7i_S_BFu0ll()
{
  {
    init_simple_test("BFu7i_S_BFu0ll");
    static BFu7i_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_S_BFu0ll(Test_BFu7i_S_BFu0ll, "BFu7i_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_S_BFu0s  {
  unsigned int v1:7;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_S_BFu0s) C1{ Fi:7 Fs Fs:0}



static void Test_BFu7i_S_BFu0s()
{
  {
    init_simple_test("BFu7i_S_BFu0s");
    static BFu7i_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_S_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu7i_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_S_BFu0s(Test_BFu7i_S_BFu0s, "BFu7i_S_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Uc_BFu0c  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_Uc_BFu0c) C1{ Fi:7 Fc Fc:0}



static void Test_BFu7i_Uc_BFu0c()
{
  {
    init_simple_test("BFu7i_Uc_BFu0c");
    static BFu7i_Uc_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu0c");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Uc_BFu0c(Test_BFu7i_Uc_BFu0c, "BFu7i_Uc_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Uc_BFu0i  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_Uc_BFu0i) C1{ Fi:7 Fc Fi:0}



static void Test_BFu7i_Uc_BFu0i()
{
  {
    init_simple_test("BFu7i_Uc_BFu0i");
    static BFu7i_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu0i");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Uc_BFu0i(Test_BFu7i_Uc_BFu0i, "BFu7i_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Uc_BFu0ll  {
  unsigned int v1:7;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_Uc_BFu0ll) C1{ Fi:7 Fc FL:0}



static void Test_BFu7i_Uc_BFu0ll()
{
  {
    init_simple_test("BFu7i_Uc_BFu0ll");
    static BFu7i_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Uc_BFu0ll(Test_BFu7i_Uc_BFu0ll, "BFu7i_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Uc_BFu0s  {
  unsigned int v1:7;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_Uc_BFu0s) C1{ Fi:7 Fc Fs:0}



static void Test_BFu7i_Uc_BFu0s()
{
  {
    init_simple_test("BFu7i_Uc_BFu0s");
    static BFu7i_Uc_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Uc_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Uc_BFu0s");
    check_field_offset(lv, v2, 1, "BFu7i_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Uc_BFu0s(Test_BFu7i_Uc_BFu0s, "BFu7i_Uc_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ui_BFu0c  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_Ui_BFu0c) C1{ Fi:7 Fi Fc:0}



static void Test_BFu7i_Ui_BFu0c()
{
  {
    init_simple_test("BFu7i_Ui_BFu0c");
    static BFu7i_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ui_BFu0c(Test_BFu7i_Ui_BFu0c, "BFu7i_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ui_BFu0i  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_Ui_BFu0i) C1{ Fi:7 Fi Fi:0}



static void Test_BFu7i_Ui_BFu0i()
{
  {
    init_simple_test("BFu7i_Ui_BFu0i");
    static BFu7i_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ui_BFu0i(Test_BFu7i_Ui_BFu0i, "BFu7i_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ui_BFu0ll  {
  unsigned int v1:7;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_Ui_BFu0ll) C1{ Fi:7 Fi FL:0}



static void Test_BFu7i_Ui_BFu0ll()
{
  {
    init_simple_test("BFu7i_Ui_BFu0ll");
    static BFu7i_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ui_BFu0ll(Test_BFu7i_Ui_BFu0ll, "BFu7i_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ui_BFu0s  {
  unsigned int v1:7;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_Ui_BFu0s) C1{ Fi:7 Fi Fs:0}



static void Test_BFu7i_Ui_BFu0s()
{
  {
    init_simple_test("BFu7i_Ui_BFu0s");
    static BFu7i_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ui_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7i_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ui_BFu0s(Test_BFu7i_Ui_BFu0s, "BFu7i_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ul_BFu0c  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_Ul_BFu0c) C1{ Fi:7 FL Fc:0}



static void Test_BFu7i_Ul_BFu0c()
{
  {
    init_simple_test("BFu7i_Ul_BFu0c");
    static BFu7i_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ul_BFu0c(Test_BFu7i_Ul_BFu0c, "BFu7i_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ul_BFu0i  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_Ul_BFu0i) C1{ Fi:7 FL Fi:0}



static void Test_BFu7i_Ul_BFu0i()
{
  {
    init_simple_test("BFu7i_Ul_BFu0i");
    static BFu7i_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ul_BFu0i(Test_BFu7i_Ul_BFu0i, "BFu7i_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ul_BFu0ll  {
  unsigned int v1:7;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_Ul_BFu0ll) C1{ Fi:7 FL FL:0}



static void Test_BFu7i_Ul_BFu0ll()
{
  {
    init_simple_test("BFu7i_Ul_BFu0ll");
    static BFu7i_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ul_BFu0ll(Test_BFu7i_Ul_BFu0ll, "BFu7i_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Ul_BFu0s  {
  unsigned int v1:7;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_Ul_BFu0s) C1{ Fi:7 FL Fs:0}



static void Test_BFu7i_Ul_BFu0s()
{
  {
    init_simple_test("BFu7i_Ul_BFu0s");
    static BFu7i_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Ul_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Ul_BFu0s(Test_BFu7i_Ul_BFu0s, "BFu7i_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Us_BFu0c  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_Us_BFu0c) C1{ Fi:7 Fs Fc:0}



static void Test_BFu7i_Us_BFu0c()
{
  {
    init_simple_test("BFu7i_Us_BFu0c");
    static BFu7i_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Us_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu0c");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Us_BFu0c(Test_BFu7i_Us_BFu0c, "BFu7i_Us_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Us_BFu0i  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_Us_BFu0i) C1{ Fi:7 Fs Fi:0}



static void Test_BFu7i_Us_BFu0i()
{
  {
    init_simple_test("BFu7i_Us_BFu0i");
    static BFu7i_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Us_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu0i");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Us_BFu0i(Test_BFu7i_Us_BFu0i, "BFu7i_Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Us_BFu0ll  {
  unsigned int v1:7;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_Us_BFu0ll) C1{ Fi:7 Fs FL:0}



static void Test_BFu7i_Us_BFu0ll()
{
  {
    init_simple_test("BFu7i_Us_BFu0ll");
    static BFu7i_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7i_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Us_BFu0ll(Test_BFu7i_Us_BFu0ll, "BFu7i_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Us_BFu0s  {
  unsigned int v1:7;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_Us_BFu0s) C1{ Fi:7 Fs Fs:0}



static void Test_BFu7i_Us_BFu0s()
{
  {
    init_simple_test("BFu7i_Us_BFu0s");
    static BFu7i_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_Us_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Us_BFu0s");
    check_field_offset(lv, v2, 2, "BFu7i_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Us_BFu0s(Test_BFu7i_Us_BFu0s, "BFu7i_Us_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Vp_BFu0c  {
  unsigned int v1:7;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu7i_Vp_BFu0c) C1{ Fi:7 Fp Fc:0}



static void Test_BFu7i_Vp_BFu0c()
{
  {
    init_simple_test("BFu7i_Vp_BFu0c");
    static BFu7i_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Vp_BFu0c(Test_BFu7i_Vp_BFu0c, "BFu7i_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Vp_BFu0i  {
  unsigned int v1:7;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu7i_Vp_BFu0i) C1{ Fi:7 Fp Fi:0}



static void Test_BFu7i_Vp_BFu0i()
{
  {
    init_simple_test("BFu7i_Vp_BFu0i");
    static BFu7i_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Vp_BFu0i(Test_BFu7i_Vp_BFu0i, "BFu7i_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Vp_BFu0ll  {
  unsigned int v1:7;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu7i_Vp_BFu0ll) C1{ Fi:7 Fp FL:0}



static void Test_BFu7i_Vp_BFu0ll()
{
  {
    init_simple_test("BFu7i_Vp_BFu0ll");
    static BFu7i_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Vp_BFu0ll(Test_BFu7i_Vp_BFu0ll, "BFu7i_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7i_Vp_BFu0s  {
  unsigned int v1:7;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu7i_Vp_BFu0s) C1{ Fi:7 Fp Fs:0}



static void Test_BFu7i_Vp_BFu0s()
{
  {
    init_simple_test("BFu7i_Vp_BFu0s");
    static BFu7i_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_Vp_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7i_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7i_Vp_BFu0s(Test_BFu7i_Vp_BFu0s, "BFu7i_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c  {
  __tsu64 v1:7;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu0c) C1{ FL:7 Fc:0}



static void Test_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu0c");
    static BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c(Test_BFu7ll_BFu0c, "BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu0c  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu0c_BFu0c) C1{ FL:7 Fc:0 Fc:0}



static void Test_BFu7ll_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu0c");
    static BFu7ll_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu0c(Test_BFu7ll_BFu0c_BFu0c, "BFu7ll_BFu0c_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu0i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu0c_BFu0i) C1{ FL:7 Fc:0 Fi:0}



static void Test_BFu7ll_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu0i");
    static BFu7ll_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu0i(Test_BFu7ll_BFu0c_BFu0i, "BFu7ll_BFu0c_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu0ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu0c_BFu0ll) C1{ FL:7 Fc:0 FL:0}



static void Test_BFu7ll_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu0ll");
    static BFu7ll_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu0ll(Test_BFu7ll_BFu0c_BFu0ll, "BFu7ll_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu0s  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu0c_BFu0s) C1{ FL:7 Fc:0 Fs:0}



static void Test_BFu7ll_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu0s");
    static BFu7ll_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu0s(Test_BFu7ll_BFu0c_BFu0s, "BFu7ll_BFu0c_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu15i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7ll_BFu0c_BFu15i) C1{ FL:7 Fc:0 Fi:15}



static void Test_BFu7ll_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu15i");
    static BFu7ll_BFu0c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu7ll_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu15i(Test_BFu7ll_BFu0c_BFu15i, "BFu7ll_BFu0c_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu15ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7ll_BFu0c_BFu15ll) C1{ FL:7 Fc:0 FL:15}



static void Test_BFu7ll_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu15ll");
    static BFu7ll_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu7ll_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu15ll(Test_BFu7ll_BFu0c_BFu15ll, "BFu7ll_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu15s  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7ll_BFu0c_BFu15s) C1{ FL:7 Fc:0 Fs:15}



static void Test_BFu7ll_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu15s");
    static BFu7ll_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu15s(Test_BFu7ll_BFu0c_BFu15s, "BFu7ll_BFu0c_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu16i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7ll_BFu0c_BFu16i) C1{ FL:7 Fc:0 Fi:16}



static void Test_BFu7ll_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu16i");
    static BFu7ll_BFu0c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu7ll_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu16i(Test_BFu7ll_BFu0c_BFu16i, "BFu7ll_BFu0c_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu16ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7ll_BFu0c_BFu16ll) C1{ FL:7 Fc:0 FL:16}



static void Test_BFu7ll_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu16ll");
    static BFu7ll_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu7ll_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu16ll(Test_BFu7ll_BFu0c_BFu16ll, "BFu7ll_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu16s  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7ll_BFu0c_BFu16s) C1{ FL:7 Fc:0 Fs:16}



static void Test_BFu7ll_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu16s");
    static BFu7ll_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu16s(Test_BFu7ll_BFu0c_BFu16s, "BFu7ll_BFu0c_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu17i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7ll_BFu0c_BFu17i) C1{ FL:7 Fc:0 Fi:17}



static void Test_BFu7ll_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu17i");
    static BFu7ll_BFu0c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu7ll_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu17i(Test_BFu7ll_BFu0c_BFu17i, "BFu7ll_BFu0c_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu17ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7ll_BFu0c_BFu17ll) C1{ FL:7 Fc:0 FL:17}



static void Test_BFu7ll_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu17ll");
    static BFu7ll_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu7ll_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu17ll(Test_BFu7ll_BFu0c_BFu17ll, "BFu7ll_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu1c  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7ll_BFu0c_BFu1c) C1{ FL:7 Fc:0 Fc:1}



static void Test_BFu7ll_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu1c");
    static BFu7ll_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7ll_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu1c(Test_BFu7ll_BFu0c_BFu1c, "BFu7ll_BFu0c_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu1i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7ll_BFu0c_BFu1i) C1{ FL:7 Fc:0 Fi:1}



static void Test_BFu7ll_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu1i");
    static BFu7ll_BFu0c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7ll_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu1i(Test_BFu7ll_BFu0c_BFu1i, "BFu7ll_BFu0c_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu1ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7ll_BFu0c_BFu1ll) C1{ FL:7 Fc:0 FL:1}



static void Test_BFu7ll_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu1ll");
    static BFu7ll_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7ll_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu1ll(Test_BFu7ll_BFu0c_BFu1ll, "BFu7ll_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu1s  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7ll_BFu0c_BFu1s) C1{ FL:7 Fc:0 Fs:1}



static void Test_BFu7ll_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu1s");
    static BFu7ll_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7ll_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu1s(Test_BFu7ll_BFu0c_BFu1s, "BFu7ll_BFu0c_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu31i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7ll_BFu0c_BFu31i) C1{ FL:7 Fc:0 Fi:31}



static void Test_BFu7ll_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu31i");
    static BFu7ll_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu31i(Test_BFu7ll_BFu0c_BFu31i, "BFu7ll_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu31ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7ll_BFu0c_BFu31ll) C1{ FL:7 Fc:0 FL:31}



static void Test_BFu7ll_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu31ll");
    static BFu7ll_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu7ll_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu31ll(Test_BFu7ll_BFu0c_BFu31ll, "BFu7ll_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu32i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7ll_BFu0c_BFu32i) C1{ FL:7 Fc:0 Fi:32}



static void Test_BFu7ll_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu32i");
    static BFu7ll_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu32i(Test_BFu7ll_BFu0c_BFu32i, "BFu7ll_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu32ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7ll_BFu0c_BFu32ll) C1{ FL:7 Fc:0 FL:32}



static void Test_BFu7ll_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu32ll");
    static BFu7ll_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu7ll_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu32ll(Test_BFu7ll_BFu0c_BFu32ll, "BFu7ll_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu33  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7ll_BFu0c_BFu33) C1{ FL:7 Fc:0 FL:33}



static void Test_BFu7ll_BFu0c_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu33");
    static BFu7ll_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu7ll_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu33(Test_BFu7ll_BFu0c_BFu33, "BFu7ll_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu7c  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7ll_BFu0c_BFu7c) C1{ FL:7 Fc:0 Fc:7}



static void Test_BFu7ll_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu7c");
    static BFu7ll_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu7c(Test_BFu7ll_BFu0c_BFu7c, "BFu7ll_BFu0c_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu7i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7ll_BFu0c_BFu7i) C1{ FL:7 Fc:0 Fi:7}



static void Test_BFu7ll_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu7i");
    static BFu7ll_BFu0c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu7i(Test_BFu7ll_BFu0c_BFu7i, "BFu7ll_BFu0c_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu7ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7ll_BFu0c_BFu7ll) C1{ FL:7 Fc:0 FL:7}



static void Test_BFu7ll_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu7ll");
    static BFu7ll_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu7ll(Test_BFu7ll_BFu0c_BFu7ll, "BFu7ll_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu7s  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7ll_BFu0c_BFu7s) C1{ FL:7 Fc:0 Fs:7}



static void Test_BFu7ll_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu7s");
    static BFu7ll_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu7s(Test_BFu7ll_BFu0c_BFu7s, "BFu7ll_BFu0c_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu8c  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7ll_BFu0c_BFu8c) C1{ FL:7 Fc:0 Fc:8}



static void Test_BFu7ll_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu8c");
    static BFu7ll_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu8c(Test_BFu7ll_BFu0c_BFu8c, "BFu7ll_BFu0c_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu8i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7ll_BFu0c_BFu8i) C1{ FL:7 Fc:0 Fi:8}



static void Test_BFu7ll_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu8i");
    static BFu7ll_BFu0c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu8i(Test_BFu7ll_BFu0c_BFu8i, "BFu7ll_BFu0c_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu8ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7ll_BFu0c_BFu8ll) C1{ FL:7 Fc:0 FL:8}



static void Test_BFu7ll_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu8ll");
    static BFu7ll_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu8ll(Test_BFu7ll_BFu0c_BFu8ll, "BFu7ll_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu8s  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7ll_BFu0c_BFu8s) C1{ FL:7 Fc:0 Fs:8}



static void Test_BFu7ll_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu8s");
    static BFu7ll_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu8s(Test_BFu7ll_BFu0c_BFu8s, "BFu7ll_BFu0c_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu9i  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7ll_BFu0c_BFu9i) C1{ FL:7 Fc:0 Fi:9}



static void Test_BFu7ll_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu9i");
    static BFu7ll_BFu0c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu7ll_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu9i(Test_BFu7ll_BFu0c_BFu9i, "BFu7ll_BFu0c_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu9ll  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7ll_BFu0c_BFu9ll) C1{ FL:7 Fc:0 FL:9}



static void Test_BFu7ll_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu9ll");
    static BFu7ll_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu7ll_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu9ll(Test_BFu7ll_BFu0c_BFu9ll, "BFu7ll_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_BFu9s  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7ll_BFu0c_BFu9s) C1{ FL:7 Fc:0 Fs:9}



static void Test_BFu7ll_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu0c_BFu9s");
    static BFu7ll_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7ll_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_BFu9s(Test_BFu7ll_BFu0c_BFu9s, "BFu7ll_BFu0c_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_C  {
  __tsu64 v1:7;
  unsigned char  :0;
  char v2;
};
//SIG(1 BFu7ll_BFu0c_C) C1{ FL:7 Fc:0 Fc}



static void Test_BFu7ll_BFu0c_C()
{
  {
    init_simple_test("BFu7ll_BFu0c_C");
    static BFu7ll_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_C");
    check_field_offset(lv, v2, 1, "BFu7ll_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_C(Test_BFu7ll_BFu0c_C, "BFu7ll_BFu0c_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_D  {
  __tsu64 v1:7;
  unsigned char  :0;
  double v2;
};
//SIG(1 BFu7ll_BFu0c_D) C1{ FL:7 Fc:0 FL}



static void Test_BFu7ll_BFu0c_D()
{
  {
    init_simple_test("BFu7ll_BFu0c_D");
    static BFu7ll_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_D(Test_BFu7ll_BFu0c_D, "BFu7ll_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_F  {
  __tsu64 v1:7;
  unsigned char  :0;
  float v2;
};
//SIG(1 BFu7ll_BFu0c_F) C1{ FL:7 Fc:0 Fi}



static void Test_BFu7ll_BFu0c_F()
{
  {
    init_simple_test("BFu7ll_BFu0c_F");
    static BFu7ll_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_F");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_F(Test_BFu7ll_BFu0c_F, "BFu7ll_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_I  {
  __tsu64 v1:7;
  unsigned char  :0;
  int v2;
};
//SIG(1 BFu7ll_BFu0c_I) C1{ FL:7 Fc:0 Fi}



static void Test_BFu7ll_BFu0c_I()
{
  {
    init_simple_test("BFu7ll_BFu0c_I");
    static BFu7ll_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_I");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_I(Test_BFu7ll_BFu0c_I, "BFu7ll_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_Ip  {
  __tsu64 v1:7;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu7ll_BFu0c_Ip) C1{ FL:7 Fc:0 Fp}



static void Test_BFu7ll_BFu0c_Ip()
{
  {
    init_simple_test("BFu7ll_BFu0c_Ip");
    static BFu7ll_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_Ip(Test_BFu7ll_BFu0c_Ip, "BFu7ll_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_L  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 BFu7ll_BFu0c_L) C1{ FL:7 Fc:0 FL}



static void Test_BFu7ll_BFu0c_L()
{
  {
    init_simple_test("BFu7ll_BFu0c_L");
    static BFu7ll_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_L(Test_BFu7ll_BFu0c_L, "BFu7ll_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_S  {
  __tsu64 v1:7;
  unsigned char  :0;
  short v2;
};
//SIG(1 BFu7ll_BFu0c_S) C1{ FL:7 Fc:0 Fs}



static void Test_BFu7ll_BFu0c_S()
{
  {
    init_simple_test("BFu7ll_BFu0c_S");
    static BFu7ll_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_S");
    check_field_offset(lv, v2, 2, "BFu7ll_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_S(Test_BFu7ll_BFu0c_S, "BFu7ll_BFu0c_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_Uc  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 BFu7ll_BFu0c_Uc) C1{ FL:7 Fc:0 Fc}



static void Test_BFu7ll_BFu0c_Uc()
{
  {
    init_simple_test("BFu7ll_BFu0c_Uc");
    static BFu7ll_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_Uc");
    check_field_offset(lv, v2, 1, "BFu7ll_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_Uc(Test_BFu7ll_BFu0c_Uc, "BFu7ll_BFu0c_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_Ui  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 BFu7ll_BFu0c_Ui) C1{ FL:7 Fc:0 Fi}



static void Test_BFu7ll_BFu0c_Ui()
{
  {
    init_simple_test("BFu7ll_BFu0c_Ui");
    static BFu7ll_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_Ui");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_Ui(Test_BFu7ll_BFu0c_Ui, "BFu7ll_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_Ul  {
  __tsu64 v1:7;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 BFu7ll_BFu0c_Ul) C1{ FL:7 Fc:0 FL}



static void Test_BFu7ll_BFu0c_Ul()
{
  {
    init_simple_test("BFu7ll_BFu0c_Ul");
    static BFu7ll_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_Ul(Test_BFu7ll_BFu0c_Ul, "BFu7ll_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_Us  {
  __tsu64 v1:7;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 BFu7ll_BFu0c_Us) C1{ FL:7 Fc:0 Fs}



static void Test_BFu7ll_BFu0c_Us()
{
  {
    init_simple_test("BFu7ll_BFu0c_Us");
    static BFu7ll_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_Us");
    check_field_offset(lv, v2, 2, "BFu7ll_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_Us(Test_BFu7ll_BFu0c_Us, "BFu7ll_BFu0c_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0c_Vp  {
  __tsu64 v1:7;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu7ll_BFu0c_Vp) C1{ FL:7 Fc:0 Fp}



static void Test_BFu7ll_BFu0c_Vp()
{
  {
    init_simple_test("BFu7ll_BFu0c_Vp");
    static BFu7ll_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0c_Vp(Test_BFu7ll_BFu0c_Vp, "BFu7ll_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i  {
  __tsu64 v1:7;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu0i) C1{ FL:7 Fi:0}



static void Test_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu0i");
    static BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i(Test_BFu7ll_BFu0i, "BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu0c  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu0i_BFu0c) C1{ FL:7 Fi:0 Fc:0}



static void Test_BFu7ll_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu0c");
    static BFu7ll_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu0c(Test_BFu7ll_BFu0i_BFu0c, "BFu7ll_BFu0i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu0i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu0i_BFu0i) C1{ FL:7 Fi:0 Fi:0}



static void Test_BFu7ll_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu0i");
    static BFu7ll_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu0i(Test_BFu7ll_BFu0i_BFu0i, "BFu7ll_BFu0i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu0i_BFu0ll) C1{ FL:7 Fi:0 FL:0}



static void Test_BFu7ll_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu0ll");
    static BFu7ll_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu0ll(Test_BFu7ll_BFu0i_BFu0ll, "BFu7ll_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu0s  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu0i_BFu0s) C1{ FL:7 Fi:0 Fs:0}



static void Test_BFu7ll_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu0s");
    static BFu7ll_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu0s(Test_BFu7ll_BFu0i_BFu0s, "BFu7ll_BFu0i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu15i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7ll_BFu0i_BFu15i) C1{ FL:7 Fi:0 Fi:15}



static void Test_BFu7ll_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu15i");
    static BFu7ll_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7ll_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu15i(Test_BFu7ll_BFu0i_BFu15i, "BFu7ll_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu15ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7ll_BFu0i_BFu15ll) C1{ FL:7 Fi:0 FL:15}



static void Test_BFu7ll_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu15ll");
    static BFu7ll_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7ll_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu15ll(Test_BFu7ll_BFu0i_BFu15ll, "BFu7ll_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu15s  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7ll_BFu0i_BFu15s) C1{ FL:7 Fi:0 Fs:15}



static void Test_BFu7ll_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu15s");
    static BFu7ll_BFu0i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7ll_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu15s(Test_BFu7ll_BFu0i_BFu15s, "BFu7ll_BFu0i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu16i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7ll_BFu0i_BFu16i) C1{ FL:7 Fi:0 Fi:16}



static void Test_BFu7ll_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu16i");
    static BFu7ll_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7ll_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu16i(Test_BFu7ll_BFu0i_BFu16i, "BFu7ll_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu16ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7ll_BFu0i_BFu16ll) C1{ FL:7 Fi:0 FL:16}



static void Test_BFu7ll_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu16ll");
    static BFu7ll_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7ll_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu16ll(Test_BFu7ll_BFu0i_BFu16ll, "BFu7ll_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu16s  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7ll_BFu0i_BFu16s) C1{ FL:7 Fi:0 Fs:16}



static void Test_BFu7ll_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu16s");
    static BFu7ll_BFu0i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7ll_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu16s(Test_BFu7ll_BFu0i_BFu16s, "BFu7ll_BFu0i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu17i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7ll_BFu0i_BFu17i) C1{ FL:7 Fi:0 Fi:17}



static void Test_BFu7ll_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu17i");
    static BFu7ll_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7ll_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu17i(Test_BFu7ll_BFu0i_BFu17i, "BFu7ll_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu17ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7ll_BFu0i_BFu17ll) C1{ FL:7 Fi:0 FL:17}



static void Test_BFu7ll_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu17ll");
    static BFu7ll_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7ll_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu17ll(Test_BFu7ll_BFu0i_BFu17ll, "BFu7ll_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu1c  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7ll_BFu0i_BFu1c) C1{ FL:7 Fi:0 Fc:1}



static void Test_BFu7ll_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu1c");
    static BFu7ll_BFu0i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7ll_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu1c(Test_BFu7ll_BFu0i_BFu1c, "BFu7ll_BFu0i_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu1i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7ll_BFu0i_BFu1i) C1{ FL:7 Fi:0 Fi:1}



static void Test_BFu7ll_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu1i");
    static BFu7ll_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7ll_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu1i(Test_BFu7ll_BFu0i_BFu1i, "BFu7ll_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu1ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7ll_BFu0i_BFu1ll) C1{ FL:7 Fi:0 FL:1}



static void Test_BFu7ll_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu1ll");
    static BFu7ll_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7ll_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu1ll(Test_BFu7ll_BFu0i_BFu1ll, "BFu7ll_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu1s  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7ll_BFu0i_BFu1s) C1{ FL:7 Fi:0 Fs:1}



static void Test_BFu7ll_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu1s");
    static BFu7ll_BFu0i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7ll_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu1s(Test_BFu7ll_BFu0i_BFu1s, "BFu7ll_BFu0i_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu31i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7ll_BFu0i_BFu31i) C1{ FL:7 Fi:0 Fi:31}



static void Test_BFu7ll_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu31i");
    static BFu7ll_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu31i(Test_BFu7ll_BFu0i_BFu31i, "BFu7ll_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu31ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7ll_BFu0i_BFu31ll) C1{ FL:7 Fi:0 FL:31}



static void Test_BFu7ll_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu31ll");
    static BFu7ll_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu31ll(Test_BFu7ll_BFu0i_BFu31ll, "BFu7ll_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu32i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7ll_BFu0i_BFu32i) C1{ FL:7 Fi:0 Fi:32}



static void Test_BFu7ll_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu32i");
    static BFu7ll_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu32i(Test_BFu7ll_BFu0i_BFu32i, "BFu7ll_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu32ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7ll_BFu0i_BFu32ll) C1{ FL:7 Fi:0 FL:32}



static void Test_BFu7ll_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu32ll");
    static BFu7ll_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu32ll(Test_BFu7ll_BFu0i_BFu32ll, "BFu7ll_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu33  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7ll_BFu0i_BFu33) C1{ FL:7 Fi:0 FL:33}



static void Test_BFu7ll_BFu0i_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu33");
    static BFu7ll_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu7ll_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu33(Test_BFu7ll_BFu0i_BFu33, "BFu7ll_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu7c  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7ll_BFu0i_BFu7c) C1{ FL:7 Fi:0 Fc:7}



static void Test_BFu7ll_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu7c");
    static BFu7ll_BFu0i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7ll_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu7c(Test_BFu7ll_BFu0i_BFu7c, "BFu7ll_BFu0i_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu7i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7ll_BFu0i_BFu7i) C1{ FL:7 Fi:0 Fi:7}



static void Test_BFu7ll_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu7i");
    static BFu7ll_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7ll_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu7i(Test_BFu7ll_BFu0i_BFu7i, "BFu7ll_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu7ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7ll_BFu0i_BFu7ll) C1{ FL:7 Fi:0 FL:7}



static void Test_BFu7ll_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu7ll");
    static BFu7ll_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7ll_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu7ll(Test_BFu7ll_BFu0i_BFu7ll, "BFu7ll_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu7s  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7ll_BFu0i_BFu7s) C1{ FL:7 Fi:0 Fs:7}



static void Test_BFu7ll_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu7s");
    static BFu7ll_BFu0i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7ll_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu7s(Test_BFu7ll_BFu0i_BFu7s, "BFu7ll_BFu0i_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu8c  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7ll_BFu0i_BFu8c) C1{ FL:7 Fi:0 Fc:8}



static void Test_BFu7ll_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu8c");
    static BFu7ll_BFu0i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7ll_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu8c(Test_BFu7ll_BFu0i_BFu8c, "BFu7ll_BFu0i_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu8i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7ll_BFu0i_BFu8i) C1{ FL:7 Fi:0 Fi:8}



static void Test_BFu7ll_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu8i");
    static BFu7ll_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7ll_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu8i(Test_BFu7ll_BFu0i_BFu8i, "BFu7ll_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu8ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7ll_BFu0i_BFu8ll) C1{ FL:7 Fi:0 FL:8}



static void Test_BFu7ll_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu8ll");
    static BFu7ll_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7ll_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu8ll(Test_BFu7ll_BFu0i_BFu8ll, "BFu7ll_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu8s  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7ll_BFu0i_BFu8s) C1{ FL:7 Fi:0 Fs:8}



static void Test_BFu7ll_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu8s");
    static BFu7ll_BFu0i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7ll_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu8s(Test_BFu7ll_BFu0i_BFu8s, "BFu7ll_BFu0i_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu9i  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7ll_BFu0i_BFu9i) C1{ FL:7 Fi:0 Fi:9}



static void Test_BFu7ll_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu9i");
    static BFu7ll_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7ll_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu9i(Test_BFu7ll_BFu0i_BFu9i, "BFu7ll_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu9ll  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7ll_BFu0i_BFu9ll) C1{ FL:7 Fi:0 FL:9}



static void Test_BFu7ll_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu9ll");
    static BFu7ll_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7ll_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu9ll(Test_BFu7ll_BFu0i_BFu9ll, "BFu7ll_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_BFu9s  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7ll_BFu0i_BFu9s) C1{ FL:7 Fi:0 Fs:9}



static void Test_BFu7ll_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu0i_BFu9s");
    static BFu7ll_BFu0i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7ll_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_BFu9s(Test_BFu7ll_BFu0i_BFu9s, "BFu7ll_BFu0i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_C  {
  __tsu64 v1:7;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu7ll_BFu0i_C) C1{ FL:7 Fi:0 Fc}



static void Test_BFu7ll_BFu0i_C()
{
  {
    init_simple_test("BFu7ll_BFu0i_C");
    static BFu7ll_BFu0i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_C(Test_BFu7ll_BFu0i_C, "BFu7ll_BFu0i_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_D  {
  __tsu64 v1:7;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu7ll_BFu0i_D) C1{ FL:7 Fi:0 FL}



static void Test_BFu7ll_BFu0i_D()
{
  {
    init_simple_test("BFu7ll_BFu0i_D");
    static BFu7ll_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_D(Test_BFu7ll_BFu0i_D, "BFu7ll_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_F  {
  __tsu64 v1:7;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu7ll_BFu0i_F) C1{ FL:7 Fi:0 Fi}



static void Test_BFu7ll_BFu0i_F()
{
  {
    init_simple_test("BFu7ll_BFu0i_F");
    static BFu7ll_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_F(Test_BFu7ll_BFu0i_F, "BFu7ll_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_I  {
  __tsu64 v1:7;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu7ll_BFu0i_I) C1{ FL:7 Fi:0 Fi}



static void Test_BFu7ll_BFu0i_I()
{
  {
    init_simple_test("BFu7ll_BFu0i_I");
    static BFu7ll_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_I(Test_BFu7ll_BFu0i_I, "BFu7ll_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_Ip  {
  __tsu64 v1:7;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu7ll_BFu0i_Ip) C1{ FL:7 Fi:0 Fp}



static void Test_BFu7ll_BFu0i_Ip()
{
  {
    init_simple_test("BFu7ll_BFu0i_Ip");
    static BFu7ll_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_Ip(Test_BFu7ll_BFu0i_Ip, "BFu7ll_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_L  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu7ll_BFu0i_L) C1{ FL:7 Fi:0 FL}



static void Test_BFu7ll_BFu0i_L()
{
  {
    init_simple_test("BFu7ll_BFu0i_L");
    static BFu7ll_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_L(Test_BFu7ll_BFu0i_L, "BFu7ll_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_S  {
  __tsu64 v1:7;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu7ll_BFu0i_S) C1{ FL:7 Fi:0 Fs}



static void Test_BFu7ll_BFu0i_S()
{
  {
    init_simple_test("BFu7ll_BFu0i_S");
    static BFu7ll_BFu0i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_S(Test_BFu7ll_BFu0i_S, "BFu7ll_BFu0i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_Uc  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu7ll_BFu0i_Uc) C1{ FL:7 Fi:0 Fc}



static void Test_BFu7ll_BFu0i_Uc()
{
  {
    init_simple_test("BFu7ll_BFu0i_Uc");
    static BFu7ll_BFu0i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_Uc(Test_BFu7ll_BFu0i_Uc, "BFu7ll_BFu0i_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_Ui  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu7ll_BFu0i_Ui) C1{ FL:7 Fi:0 Fi}



static void Test_BFu7ll_BFu0i_Ui()
{
  {
    init_simple_test("BFu7ll_BFu0i_Ui");
    static BFu7ll_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_Ui(Test_BFu7ll_BFu0i_Ui, "BFu7ll_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_Ul  {
  __tsu64 v1:7;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu7ll_BFu0i_Ul) C1{ FL:7 Fi:0 FL}



static void Test_BFu7ll_BFu0i_Ul()
{
  {
    init_simple_test("BFu7ll_BFu0i_Ul");
    static BFu7ll_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_Ul(Test_BFu7ll_BFu0i_Ul, "BFu7ll_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_Us  {
  __tsu64 v1:7;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu7ll_BFu0i_Us) C1{ FL:7 Fi:0 Fs}



static void Test_BFu7ll_BFu0i_Us()
{
  {
    init_simple_test("BFu7ll_BFu0i_Us");
    static BFu7ll_BFu0i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_Us(Test_BFu7ll_BFu0i_Us, "BFu7ll_BFu0i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0i_Vp  {
  __tsu64 v1:7;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu7ll_BFu0i_Vp) C1{ FL:7 Fi:0 Fp}



static void Test_BFu7ll_BFu0i_Vp()
{
  {
    init_simple_test("BFu7ll_BFu0i_Vp");
    static BFu7ll_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0i_Vp(Test_BFu7ll_BFu0i_Vp, "BFu7ll_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu0ll) C1{ FL:7 FL:0}



static void Test_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll");
    static BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll(Test_BFu7ll_BFu0ll, "BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu0ll_BFu0c) C1{ FL:7 FL:0 Fc:0}



static void Test_BFu7ll_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu0c");
    static BFu7ll_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu0c(Test_BFu7ll_BFu0ll_BFu0c, "BFu7ll_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu0ll_BFu0i) C1{ FL:7 FL:0 Fi:0}



static void Test_BFu7ll_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu0i");
    static BFu7ll_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu0i(Test_BFu7ll_BFu0ll_BFu0i, "BFu7ll_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu0ll_BFu0ll) C1{ FL:7 FL:0 FL:0}



static void Test_BFu7ll_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu0ll");
    static BFu7ll_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu0ll(Test_BFu7ll_BFu0ll_BFu0ll, "BFu7ll_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu0ll_BFu0s) C1{ FL:7 FL:0 Fs:0}



static void Test_BFu7ll_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu0s");
    static BFu7ll_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu0s(Test_BFu7ll_BFu0ll_BFu0s, "BFu7ll_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu15i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7ll_BFu0ll_BFu15i) C1{ FL:7 FL:0 Fi:15}



static void Test_BFu7ll_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu15i");
    static BFu7ll_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7ll_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu15i(Test_BFu7ll_BFu0ll_BFu15i, "BFu7ll_BFu0ll_BFu15i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu15ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7ll_BFu0ll_BFu15ll) C1{ FL:7 FL:0 FL:15}



static void Test_BFu7ll_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu15ll");
    static BFu7ll_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7ll_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu15ll(Test_BFu7ll_BFu0ll_BFu15ll, "BFu7ll_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu15s  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7ll_BFu0ll_BFu15s) C1{ FL:7 FL:0 Fs:15}



static void Test_BFu7ll_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu15s");
    static BFu7ll_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7ll_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu15s(Test_BFu7ll_BFu0ll_BFu15s, "BFu7ll_BFu0ll_BFu15s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu16i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7ll_BFu0ll_BFu16i) C1{ FL:7 FL:0 Fi:16}



static void Test_BFu7ll_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu16i");
    static BFu7ll_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7ll_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu16i(Test_BFu7ll_BFu0ll_BFu16i, "BFu7ll_BFu0ll_BFu16i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu16ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7ll_BFu0ll_BFu16ll) C1{ FL:7 FL:0 FL:16}



static void Test_BFu7ll_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu16ll");
    static BFu7ll_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7ll_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu16ll(Test_BFu7ll_BFu0ll_BFu16ll, "BFu7ll_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu16s  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7ll_BFu0ll_BFu16s) C1{ FL:7 FL:0 Fs:16}



static void Test_BFu7ll_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu16s");
    static BFu7ll_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7ll_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu16s(Test_BFu7ll_BFu0ll_BFu16s, "BFu7ll_BFu0ll_BFu16s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu17i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7ll_BFu0ll_BFu17i) C1{ FL:7 FL:0 Fi:17}



static void Test_BFu7ll_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu17i");
    static BFu7ll_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu7ll_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu17i(Test_BFu7ll_BFu0ll_BFu17i, "BFu7ll_BFu0ll_BFu17i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu17ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7ll_BFu0ll_BFu17ll) C1{ FL:7 FL:0 FL:17}



static void Test_BFu7ll_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu17ll");
    static BFu7ll_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu7ll_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu17ll(Test_BFu7ll_BFu0ll_BFu17ll, "BFu7ll_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu1c  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7ll_BFu0ll_BFu1c) C1{ FL:7 FL:0 Fc:1}



static void Test_BFu7ll_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu1c");
    static BFu7ll_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7ll_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu1c(Test_BFu7ll_BFu0ll_BFu1c, "BFu7ll_BFu0ll_BFu1c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu1i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7ll_BFu0ll_BFu1i) C1{ FL:7 FL:0 Fi:1}



static void Test_BFu7ll_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu1i");
    static BFu7ll_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7ll_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu1i(Test_BFu7ll_BFu0ll_BFu1i, "BFu7ll_BFu0ll_BFu1i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu1ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7ll_BFu0ll_BFu1ll) C1{ FL:7 FL:0 FL:1}



static void Test_BFu7ll_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu1ll");
    static BFu7ll_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7ll_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu1ll(Test_BFu7ll_BFu0ll_BFu1ll, "BFu7ll_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu1s  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7ll_BFu0ll_BFu1s) C1{ FL:7 FL:0 Fs:1}



static void Test_BFu7ll_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu1s");
    static BFu7ll_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7ll_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu1s(Test_BFu7ll_BFu0ll_BFu1s, "BFu7ll_BFu0ll_BFu1s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu31i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7ll_BFu0ll_BFu31i) C1{ FL:7 FL:0 Fi:31}



static void Test_BFu7ll_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu31i");
    static BFu7ll_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu7ll_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu31i(Test_BFu7ll_BFu0ll_BFu31i, "BFu7ll_BFu0ll_BFu31i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu31ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7ll_BFu0ll_BFu31ll) C1{ FL:7 FL:0 FL:31}



static void Test_BFu7ll_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu31ll");
    static BFu7ll_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu7ll_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu31ll(Test_BFu7ll_BFu0ll_BFu31ll, "BFu7ll_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu32i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7ll_BFu0ll_BFu32i) C1{ FL:7 FL:0 Fi:32}



static void Test_BFu7ll_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu32i");
    static BFu7ll_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu7ll_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu32i(Test_BFu7ll_BFu0ll_BFu32i, "BFu7ll_BFu0ll_BFu32i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu32ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7ll_BFu0ll_BFu32ll) C1{ FL:7 FL:0 FL:32}



static void Test_BFu7ll_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu32ll");
    static BFu7ll_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu7ll_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu32ll(Test_BFu7ll_BFu0ll_BFu32ll, "BFu7ll_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu33  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7ll_BFu0ll_BFu33) C1{ FL:7 FL:0 FL:33}



static void Test_BFu7ll_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu33");
    static BFu7ll_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu7ll_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu33(Test_BFu7ll_BFu0ll_BFu33, "BFu7ll_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu7c  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7ll_BFu0ll_BFu7c) C1{ FL:7 FL:0 Fc:7}



static void Test_BFu7ll_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu7c");
    static BFu7ll_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7ll_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu7c(Test_BFu7ll_BFu0ll_BFu7c, "BFu7ll_BFu0ll_BFu7c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu7i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7ll_BFu0ll_BFu7i) C1{ FL:7 FL:0 Fi:7}



static void Test_BFu7ll_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu7i");
    static BFu7ll_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7ll_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu7i(Test_BFu7ll_BFu0ll_BFu7i, "BFu7ll_BFu0ll_BFu7i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu7ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7ll_BFu0ll_BFu7ll) C1{ FL:7 FL:0 FL:7}



static void Test_BFu7ll_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu7ll");
    static BFu7ll_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7ll_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu7ll(Test_BFu7ll_BFu0ll_BFu7ll, "BFu7ll_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu7s  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7ll_BFu0ll_BFu7s) C1{ FL:7 FL:0 Fs:7}



static void Test_BFu7ll_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu7s");
    static BFu7ll_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7ll_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu7s(Test_BFu7ll_BFu0ll_BFu7s, "BFu7ll_BFu0ll_BFu7s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu8c  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7ll_BFu0ll_BFu8c) C1{ FL:7 FL:0 Fc:8}



static void Test_BFu7ll_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu8c");
    static BFu7ll_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7ll_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu8c(Test_BFu7ll_BFu0ll_BFu8c, "BFu7ll_BFu0ll_BFu8c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu8i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7ll_BFu0ll_BFu8i) C1{ FL:7 FL:0 Fi:8}



static void Test_BFu7ll_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu8i");
    static BFu7ll_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7ll_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu8i(Test_BFu7ll_BFu0ll_BFu8i, "BFu7ll_BFu0ll_BFu8i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu8ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7ll_BFu0ll_BFu8ll) C1{ FL:7 FL:0 FL:8}



static void Test_BFu7ll_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu8ll");
    static BFu7ll_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7ll_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu8ll(Test_BFu7ll_BFu0ll_BFu8ll, "BFu7ll_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu8s  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7ll_BFu0ll_BFu8s) C1{ FL:7 FL:0 Fs:8}



static void Test_BFu7ll_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu8s");
    static BFu7ll_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7ll_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu8s(Test_BFu7ll_BFu0ll_BFu8s, "BFu7ll_BFu0ll_BFu8s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu9i  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7ll_BFu0ll_BFu9i) C1{ FL:7 FL:0 Fi:9}



static void Test_BFu7ll_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu9i");
    static BFu7ll_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7ll_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu9i(Test_BFu7ll_BFu0ll_BFu9i, "BFu7ll_BFu0ll_BFu9i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu9ll  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7ll_BFu0ll_BFu9ll) C1{ FL:7 FL:0 FL:9}



static void Test_BFu7ll_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu9ll");
    static BFu7ll_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7ll_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu9ll(Test_BFu7ll_BFu0ll_BFu9ll, "BFu7ll_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_BFu9s  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7ll_BFu0ll_BFu9s) C1{ FL:7 FL:0 Fs:9}



static void Test_BFu7ll_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu0ll_BFu9s");
    static BFu7ll_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7ll_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_BFu9s(Test_BFu7ll_BFu0ll_BFu9s, "BFu7ll_BFu0ll_BFu9s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_C  {
  __tsu64 v1:7;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu7ll_BFu0ll_C) C1{ FL:7 FL:0 Fc}



static void Test_BFu7ll_BFu0ll_C()
{
  {
    init_simple_test("BFu7ll_BFu0ll_C");
    static BFu7ll_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_C(Test_BFu7ll_BFu0ll_C, "BFu7ll_BFu0ll_C", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_D  {
  __tsu64 v1:7;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu7ll_BFu0ll_D) C1{ FL:7 FL:0 FL}



static void Test_BFu7ll_BFu0ll_D()
{
  {
    init_simple_test("BFu7ll_BFu0ll_D");
    static BFu7ll_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_D(Test_BFu7ll_BFu0ll_D, "BFu7ll_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_F  {
  __tsu64 v1:7;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu7ll_BFu0ll_F) C1{ FL:7 FL:0 Fi}



static void Test_BFu7ll_BFu0ll_F()
{
  {
    init_simple_test("BFu7ll_BFu0ll_F");
    static BFu7ll_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_F(Test_BFu7ll_BFu0ll_F, "BFu7ll_BFu0ll_F", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_I  {
  __tsu64 v1:7;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu7ll_BFu0ll_I) C1{ FL:7 FL:0 Fi}



static void Test_BFu7ll_BFu0ll_I()
{
  {
    init_simple_test("BFu7ll_BFu0ll_I");
    static BFu7ll_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_I(Test_BFu7ll_BFu0ll_I, "BFu7ll_BFu0ll_I", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_Ip  {
  __tsu64 v1:7;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu7ll_BFu0ll_Ip) C1{ FL:7 FL:0 Fp}



static void Test_BFu7ll_BFu0ll_Ip()
{
  {
    init_simple_test("BFu7ll_BFu0ll_Ip");
    static BFu7ll_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_Ip(Test_BFu7ll_BFu0ll_Ip, "BFu7ll_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_L  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu7ll_BFu0ll_L) C1{ FL:7 FL:0 FL}



static void Test_BFu7ll_BFu0ll_L()
{
  {
    init_simple_test("BFu7ll_BFu0ll_L");
    static BFu7ll_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_L(Test_BFu7ll_BFu0ll_L, "BFu7ll_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_S  {
  __tsu64 v1:7;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu7ll_BFu0ll_S) C1{ FL:7 FL:0 Fs}



static void Test_BFu7ll_BFu0ll_S()
{
  {
    init_simple_test("BFu7ll_BFu0ll_S");
    static BFu7ll_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_S(Test_BFu7ll_BFu0ll_S, "BFu7ll_BFu0ll_S", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_Uc  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu7ll_BFu0ll_Uc) C1{ FL:7 FL:0 Fc}



static void Test_BFu7ll_BFu0ll_Uc()
{
  {
    init_simple_test("BFu7ll_BFu0ll_Uc");
    static BFu7ll_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_Uc(Test_BFu7ll_BFu0ll_Uc, "BFu7ll_BFu0ll_Uc", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_Ui  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu7ll_BFu0ll_Ui) C1{ FL:7 FL:0 Fi}



static void Test_BFu7ll_BFu0ll_Ui()
{
  {
    init_simple_test("BFu7ll_BFu0ll_Ui");
    static BFu7ll_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_Ui(Test_BFu7ll_BFu0ll_Ui, "BFu7ll_BFu0ll_Ui", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_Ul  {
  __tsu64 v1:7;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu7ll_BFu0ll_Ul) C1{ FL:7 FL:0 FL}



static void Test_BFu7ll_BFu0ll_Ul()
{
  {
    init_simple_test("BFu7ll_BFu0ll_Ul");
    static BFu7ll_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_Ul(Test_BFu7ll_BFu0ll_Ul, "BFu7ll_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_Us  {
  __tsu64 v1:7;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu7ll_BFu0ll_Us) C1{ FL:7 FL:0 Fs}



static void Test_BFu7ll_BFu0ll_Us()
{
  {
    init_simple_test("BFu7ll_BFu0ll_Us");
    static BFu7ll_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_Us(Test_BFu7ll_BFu0ll_Us, "BFu7ll_BFu0ll_Us", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0ll_Vp  {
  __tsu64 v1:7;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu7ll_BFu0ll_Vp) C1{ FL:7 FL:0 Fp}



static void Test_BFu7ll_BFu0ll_Vp()
{
  {
    init_simple_test("BFu7ll_BFu0ll_Vp");
    static BFu7ll_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0ll_Vp(Test_BFu7ll_BFu0ll_Vp, "BFu7ll_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s  {
  __tsu64 v1:7;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu0s) C1{ FL:7 Fs:0}



static void Test_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu0s");
    static BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s(Test_BFu7ll_BFu0s, "BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu0c  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu0s_BFu0c) C1{ FL:7 Fs:0 Fc:0}



static void Test_BFu7ll_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu0c");
    static BFu7ll_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu0c(Test_BFu7ll_BFu0s_BFu0c, "BFu7ll_BFu0s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu0i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu0s_BFu0i) C1{ FL:7 Fs:0 Fi:0}



static void Test_BFu7ll_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu0i");
    static BFu7ll_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu0i(Test_BFu7ll_BFu0s_BFu0i, "BFu7ll_BFu0s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu0ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu0s_BFu0ll) C1{ FL:7 Fs:0 FL:0}



static void Test_BFu7ll_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu0ll");
    static BFu7ll_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu0ll(Test_BFu7ll_BFu0s_BFu0ll, "BFu7ll_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu0s  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu0s_BFu0s) C1{ FL:7 Fs:0 Fs:0}



static void Test_BFu7ll_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu0s");
    static BFu7ll_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu0s(Test_BFu7ll_BFu0s_BFu0s, "BFu7ll_BFu0s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu15i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7ll_BFu0s_BFu15i) C1{ FL:7 Fs:0 Fi:15}



static void Test_BFu7ll_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu15i");
    static BFu7ll_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu15i(Test_BFu7ll_BFu0s_BFu15i, "BFu7ll_BFu0s_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu15ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7ll_BFu0s_BFu15ll) C1{ FL:7 Fs:0 FL:15}



static void Test_BFu7ll_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu15ll");
    static BFu7ll_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu15ll(Test_BFu7ll_BFu0s_BFu15ll, "BFu7ll_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu15s  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7ll_BFu0s_BFu15s) C1{ FL:7 Fs:0 Fs:15}



static void Test_BFu7ll_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu15s");
    static BFu7ll_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu15s(Test_BFu7ll_BFu0s_BFu15s, "BFu7ll_BFu0s_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu16i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7ll_BFu0s_BFu16i) C1{ FL:7 Fs:0 Fi:16}



static void Test_BFu7ll_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu16i");
    static BFu7ll_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu16i(Test_BFu7ll_BFu0s_BFu16i, "BFu7ll_BFu0s_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu16ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7ll_BFu0s_BFu16ll) C1{ FL:7 Fs:0 FL:16}



static void Test_BFu7ll_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu16ll");
    static BFu7ll_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu16ll(Test_BFu7ll_BFu0s_BFu16ll, "BFu7ll_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu16s  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7ll_BFu0s_BFu16s) C1{ FL:7 Fs:0 Fs:16}



static void Test_BFu7ll_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu16s");
    static BFu7ll_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu16s(Test_BFu7ll_BFu0s_BFu16s, "BFu7ll_BFu0s_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu17i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7ll_BFu0s_BFu17i) C1{ FL:7 Fs:0 Fi:17}



static void Test_BFu7ll_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu17i");
    static BFu7ll_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7ll_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu17i(Test_BFu7ll_BFu0s_BFu17i, "BFu7ll_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu17ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7ll_BFu0s_BFu17ll) C1{ FL:7 Fs:0 FL:17}



static void Test_BFu7ll_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu17ll");
    static BFu7ll_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu7ll_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu7ll_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu17ll(Test_BFu7ll_BFu0s_BFu17ll, "BFu7ll_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu1c  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7ll_BFu0s_BFu1c) C1{ FL:7 Fs:0 Fc:1}



static void Test_BFu7ll_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu1c");
    static BFu7ll_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7ll_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu1c(Test_BFu7ll_BFu0s_BFu1c, "BFu7ll_BFu0s_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu1i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7ll_BFu0s_BFu1i) C1{ FL:7 Fs:0 Fi:1}



static void Test_BFu7ll_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu1i");
    static BFu7ll_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7ll_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu1i(Test_BFu7ll_BFu0s_BFu1i, "BFu7ll_BFu0s_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu1ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7ll_BFu0s_BFu1ll) C1{ FL:7 Fs:0 FL:1}



static void Test_BFu7ll_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu1ll");
    static BFu7ll_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7ll_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu1ll(Test_BFu7ll_BFu0s_BFu1ll, "BFu7ll_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu1s  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7ll_BFu0s_BFu1s) C1{ FL:7 Fs:0 Fs:1}



static void Test_BFu7ll_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu1s");
    static BFu7ll_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7ll_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu1s(Test_BFu7ll_BFu0s_BFu1s, "BFu7ll_BFu0s_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu31i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7ll_BFu0s_BFu31i) C1{ FL:7 Fs:0 Fi:31}



static void Test_BFu7ll_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu31i");
    static BFu7ll_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu31i(Test_BFu7ll_BFu0s_BFu31i, "BFu7ll_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu31ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7ll_BFu0s_BFu31ll) C1{ FL:7 Fs:0 FL:31}



static void Test_BFu7ll_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu31ll");
    static BFu7ll_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu7ll_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu31ll(Test_BFu7ll_BFu0s_BFu31ll, "BFu7ll_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu32i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7ll_BFu0s_BFu32i) C1{ FL:7 Fs:0 Fi:32}



static void Test_BFu7ll_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu32i");
    static BFu7ll_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu32i(Test_BFu7ll_BFu0s_BFu32i, "BFu7ll_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu32ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7ll_BFu0s_BFu32ll) C1{ FL:7 Fs:0 FL:32}



static void Test_BFu7ll_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu32ll");
    static BFu7ll_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu7ll_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu32ll(Test_BFu7ll_BFu0s_BFu32ll, "BFu7ll_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu33  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7ll_BFu0s_BFu33) C1{ FL:7 Fs:0 FL:33}



static void Test_BFu7ll_BFu0s_BFu33()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu33");
    static BFu7ll_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu7ll_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu7ll_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu33(Test_BFu7ll_BFu0s_BFu33, "BFu7ll_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu7c  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7ll_BFu0s_BFu7c) C1{ FL:7 Fs:0 Fc:7}



static void Test_BFu7ll_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu7c");
    static BFu7ll_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7ll_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu7c(Test_BFu7ll_BFu0s_BFu7c, "BFu7ll_BFu0s_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu7i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7ll_BFu0s_BFu7i) C1{ FL:7 Fs:0 Fi:7}



static void Test_BFu7ll_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu7i");
    static BFu7ll_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7ll_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu7i(Test_BFu7ll_BFu0s_BFu7i, "BFu7ll_BFu0s_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu7ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7ll_BFu0s_BFu7ll) C1{ FL:7 Fs:0 FL:7}



static void Test_BFu7ll_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu7ll");
    static BFu7ll_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7ll_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu7ll(Test_BFu7ll_BFu0s_BFu7ll, "BFu7ll_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu7s  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7ll_BFu0s_BFu7s) C1{ FL:7 Fs:0 Fs:7}



static void Test_BFu7ll_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu7s");
    static BFu7ll_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7ll_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu7s(Test_BFu7ll_BFu0s_BFu7s, "BFu7ll_BFu0s_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu8c  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7ll_BFu0s_BFu8c) C1{ FL:7 Fs:0 Fc:8}



static void Test_BFu7ll_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu8c");
    static BFu7ll_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7ll_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu8c(Test_BFu7ll_BFu0s_BFu8c, "BFu7ll_BFu0s_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu8i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7ll_BFu0s_BFu8i) C1{ FL:7 Fs:0 Fi:8}



static void Test_BFu7ll_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu8i");
    static BFu7ll_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7ll_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu8i(Test_BFu7ll_BFu0s_BFu8i, "BFu7ll_BFu0s_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu8ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7ll_BFu0s_BFu8ll) C1{ FL:7 Fs:0 FL:8}



static void Test_BFu7ll_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu8ll");
    static BFu7ll_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7ll_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu8ll(Test_BFu7ll_BFu0s_BFu8ll, "BFu7ll_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu8s  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7ll_BFu0s_BFu8s) C1{ FL:7 Fs:0 Fs:8}



static void Test_BFu7ll_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu8s");
    static BFu7ll_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7ll_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu8s(Test_BFu7ll_BFu0s_BFu8s, "BFu7ll_BFu0s_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu9i  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7ll_BFu0s_BFu9i) C1{ FL:7 Fs:0 Fi:9}



static void Test_BFu7ll_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu9i");
    static BFu7ll_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7ll_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu9i(Test_BFu7ll_BFu0s_BFu9i, "BFu7ll_BFu0s_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu9ll  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7ll_BFu0s_BFu9ll) C1{ FL:7 Fs:0 FL:9}



static void Test_BFu7ll_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu9ll");
    static BFu7ll_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7ll_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu9ll(Test_BFu7ll_BFu0s_BFu9ll, "BFu7ll_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_BFu9s  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7ll_BFu0s_BFu9s) C1{ FL:7 Fs:0 Fs:9}



static void Test_BFu7ll_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu7ll_BFu0s_BFu9s");
    static BFu7ll_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7ll_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7ll_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_BFu9s(Test_BFu7ll_BFu0s_BFu9s, "BFu7ll_BFu0s_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_C  {
  __tsu64 v1:7;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu7ll_BFu0s_C) C1{ FL:7 Fs:0 Fc}



static void Test_BFu7ll_BFu0s_C()
{
  {
    init_simple_test("BFu7ll_BFu0s_C");
    static BFu7ll_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu7ll_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_C(Test_BFu7ll_BFu0s_C, "BFu7ll_BFu0s_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_D  {
  __tsu64 v1:7;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu7ll_BFu0s_D) C1{ FL:7 Fs:0 FL}



static void Test_BFu7ll_BFu0s_D()
{
  {
    init_simple_test("BFu7ll_BFu0s_D");
    static BFu7ll_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_D(Test_BFu7ll_BFu0s_D, "BFu7ll_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_F  {
  __tsu64 v1:7;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu7ll_BFu0s_F) C1{ FL:7 Fs:0 Fi}



static void Test_BFu7ll_BFu0s_F()
{
  {
    init_simple_test("BFu7ll_BFu0s_F");
    static BFu7ll_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_F(Test_BFu7ll_BFu0s_F, "BFu7ll_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_I  {
  __tsu64 v1:7;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu7ll_BFu0s_I) C1{ FL:7 Fs:0 Fi}



static void Test_BFu7ll_BFu0s_I()
{
  {
    init_simple_test("BFu7ll_BFu0s_I");
    static BFu7ll_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_I(Test_BFu7ll_BFu0s_I, "BFu7ll_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_Ip  {
  __tsu64 v1:7;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu7ll_BFu0s_Ip) C1{ FL:7 Fs:0 Fp}



static void Test_BFu7ll_BFu0s_Ip()
{
  {
    init_simple_test("BFu7ll_BFu0s_Ip");
    static BFu7ll_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_Ip(Test_BFu7ll_BFu0s_Ip, "BFu7ll_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_L  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu7ll_BFu0s_L) C1{ FL:7 Fs:0 FL}



static void Test_BFu7ll_BFu0s_L()
{
  {
    init_simple_test("BFu7ll_BFu0s_L");
    static BFu7ll_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_L(Test_BFu7ll_BFu0s_L, "BFu7ll_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_S  {
  __tsu64 v1:7;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu7ll_BFu0s_S) C1{ FL:7 Fs:0 Fs}



static void Test_BFu7ll_BFu0s_S()
{
  {
    init_simple_test("BFu7ll_BFu0s_S");
    static BFu7ll_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu7ll_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_S(Test_BFu7ll_BFu0s_S, "BFu7ll_BFu0s_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_Uc  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu7ll_BFu0s_Uc) C1{ FL:7 Fs:0 Fc}



static void Test_BFu7ll_BFu0s_Uc()
{
  {
    init_simple_test("BFu7ll_BFu0s_Uc");
    static BFu7ll_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu7ll_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_Uc(Test_BFu7ll_BFu0s_Uc, "BFu7ll_BFu0s_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_Ui  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu7ll_BFu0s_Ui) C1{ FL:7 Fs:0 Fi}



static void Test_BFu7ll_BFu0s_Ui()
{
  {
    init_simple_test("BFu7ll_BFu0s_Ui");
    static BFu7ll_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu7ll_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_Ui(Test_BFu7ll_BFu0s_Ui, "BFu7ll_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_Ul  {
  __tsu64 v1:7;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu7ll_BFu0s_Ul) C1{ FL:7 Fs:0 FL}



static void Test_BFu7ll_BFu0s_Ul()
{
  {
    init_simple_test("BFu7ll_BFu0s_Ul");
    static BFu7ll_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_Ul(Test_BFu7ll_BFu0s_Ul, "BFu7ll_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_Us  {
  __tsu64 v1:7;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu7ll_BFu0s_Us) C1{ FL:7 Fs:0 Fs}



static void Test_BFu7ll_BFu0s_Us()
{
  {
    init_simple_test("BFu7ll_BFu0s_Us");
    static BFu7ll_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu7ll_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_Us(Test_BFu7ll_BFu0s_Us, "BFu7ll_BFu0s_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu0s_Vp  {
  __tsu64 v1:7;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu7ll_BFu0s_Vp) C1{ FL:7 Fs:0 Fp}



static void Test_BFu7ll_BFu0s_Vp()
{
  {
    init_simple_test("BFu7ll_BFu0s_Vp");
    static BFu7ll_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu0s_Vp(Test_BFu7ll_BFu0s_Vp, "BFu7ll_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15i_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu15i_BFu0c) C1{ FL:7 Fi:15 Fc:0}



static void Test_BFu7ll_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu0c");
    static BFu7ll_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15i_BFu0c(Test_BFu7ll_BFu15i_BFu0c, "BFu7ll_BFu15i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15i_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu15i_BFu0i) C1{ FL:7 Fi:15 Fi:0}



static void Test_BFu7ll_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu0i");
    static BFu7ll_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15i_BFu0i(Test_BFu7ll_BFu15i_BFu0i, "BFu7ll_BFu15i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu15i_BFu0ll) C1{ FL:7 Fi:15 FL:0}



static void Test_BFu7ll_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu0ll");
    static BFu7ll_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15i_BFu0ll(Test_BFu7ll_BFu15i_BFu0ll, "BFu7ll_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15i_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu15i_BFu0s) C1{ FL:7 Fi:15 Fs:0}



static void Test_BFu7ll_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu15i_BFu0s");
    static BFu7ll_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15i_BFu0s(Test_BFu7ll_BFu15i_BFu0s, "BFu7ll_BFu15i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu15ll_BFu0c) C1{ FL:7 FL:15 Fc:0}



static void Test_BFu7ll_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu0c");
    static BFu7ll_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15ll_BFu0c(Test_BFu7ll_BFu15ll_BFu0c, "BFu7ll_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu15ll_BFu0i) C1{ FL:7 FL:15 Fi:0}



static void Test_BFu7ll_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu0i");
    static BFu7ll_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15ll_BFu0i(Test_BFu7ll_BFu15ll_BFu0i, "BFu7ll_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu15ll_BFu0ll) C1{ FL:7 FL:15 FL:0}



static void Test_BFu7ll_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu0ll");
    static BFu7ll_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15ll_BFu0ll(Test_BFu7ll_BFu15ll_BFu0ll, "BFu7ll_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu15ll_BFu0s) C1{ FL:7 FL:15 Fs:0}



static void Test_BFu7ll_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu15ll_BFu0s");
    static BFu7ll_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7ll_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7ll_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15ll_BFu0s(Test_BFu7ll_BFu15ll_BFu0s, "BFu7ll_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15s_BFu0c  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu15s_BFu0c) C1{ FL:7 Fs:15 Fc:0}



static void Test_BFu7ll_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu0c");
    static BFu7ll_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15s_BFu0c(Test_BFu7ll_BFu15s_BFu0c, "BFu7ll_BFu15s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15s_BFu0i  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu15s_BFu0i) C1{ FL:7 Fs:15 Fi:0}



static void Test_BFu7ll_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu0i");
    static BFu7ll_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15s_BFu0i(Test_BFu7ll_BFu15s_BFu0i, "BFu7ll_BFu15s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15s_BFu0ll  {
  __tsu64 v1:7;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu15s_BFu0ll) C1{ FL:7 Fs:15 FL:0}



static void Test_BFu7ll_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu0ll");
    static BFu7ll_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15s_BFu0ll(Test_BFu7ll_BFu15s_BFu0ll, "BFu7ll_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu15s_BFu0s  {
  __tsu64 v1:7;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu15s_BFu0s) C1{ FL:7 Fs:15 Fs:0}



static void Test_BFu7ll_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu15s_BFu0s");
    static BFu7ll_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7ll_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7ll_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu15s_BFu0s(Test_BFu7ll_BFu15s_BFu0s, "BFu7ll_BFu15s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16i_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu16i_BFu0c) C1{ FL:7 Fi:16 Fc:0}



static void Test_BFu7ll_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu0c");
    static BFu7ll_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16i_BFu0c(Test_BFu7ll_BFu16i_BFu0c, "BFu7ll_BFu16i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16i_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu16i_BFu0i) C1{ FL:7 Fi:16 Fi:0}



static void Test_BFu7ll_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu0i");
    static BFu7ll_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16i_BFu0i(Test_BFu7ll_BFu16i_BFu0i, "BFu7ll_BFu16i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu16i_BFu0ll) C1{ FL:7 Fi:16 FL:0}



static void Test_BFu7ll_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu0ll");
    static BFu7ll_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16i_BFu0ll(Test_BFu7ll_BFu16i_BFu0ll, "BFu7ll_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16i_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu16i_BFu0s) C1{ FL:7 Fi:16 Fs:0}



static void Test_BFu7ll_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu16i_BFu0s");
    static BFu7ll_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16i_BFu0s(Test_BFu7ll_BFu16i_BFu0s, "BFu7ll_BFu16i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu16ll_BFu0c) C1{ FL:7 FL:16 Fc:0}



static void Test_BFu7ll_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu0c");
    static BFu7ll_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16ll_BFu0c(Test_BFu7ll_BFu16ll_BFu0c, "BFu7ll_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu16ll_BFu0i) C1{ FL:7 FL:16 Fi:0}



static void Test_BFu7ll_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu0i");
    static BFu7ll_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16ll_BFu0i(Test_BFu7ll_BFu16ll_BFu0i, "BFu7ll_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu16ll_BFu0ll) C1{ FL:7 FL:16 FL:0}



static void Test_BFu7ll_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu0ll");
    static BFu7ll_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16ll_BFu0ll(Test_BFu7ll_BFu16ll_BFu0ll, "BFu7ll_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu16ll_BFu0s) C1{ FL:7 FL:16 Fs:0}



static void Test_BFu7ll_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu16ll_BFu0s");
    static BFu7ll_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7ll_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7ll_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16ll_BFu0s(Test_BFu7ll_BFu16ll_BFu0s, "BFu7ll_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16s_BFu0c  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu16s_BFu0c) C1{ FL:7 Fs:16 Fc:0}



static void Test_BFu7ll_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu0c");
    static BFu7ll_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16s_BFu0c(Test_BFu7ll_BFu16s_BFu0c, "BFu7ll_BFu16s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16s_BFu0i  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu16s_BFu0i) C1{ FL:7 Fs:16 Fi:0}



static void Test_BFu7ll_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu0i");
    static BFu7ll_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16s_BFu0i(Test_BFu7ll_BFu16s_BFu0i, "BFu7ll_BFu16s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16s_BFu0ll  {
  __tsu64 v1:7;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu16s_BFu0ll) C1{ FL:7 Fs:16 FL:0}



static void Test_BFu7ll_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu0ll");
    static BFu7ll_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16s_BFu0ll(Test_BFu7ll_BFu16s_BFu0ll, "BFu7ll_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu16s_BFu0s  {
  __tsu64 v1:7;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu16s_BFu0s) C1{ FL:7 Fs:16 Fs:0}



static void Test_BFu7ll_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu16s_BFu0s");
    static BFu7ll_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7ll_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7ll_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu16s_BFu0s(Test_BFu7ll_BFu16s_BFu0s, "BFu7ll_BFu16s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu17i_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu17i_BFu0c) C1{ FL:7 Fi:17 Fc:0}



static void Test_BFu7ll_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu0c");
    static BFu7ll_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu17i_BFu0c(Test_BFu7ll_BFu17i_BFu0c, "BFu7ll_BFu17i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu17i_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu17i_BFu0i) C1{ FL:7 Fi:17 Fi:0}



static void Test_BFu7ll_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu0i");
    static BFu7ll_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu17i_BFu0i(Test_BFu7ll_BFu17i_BFu0i, "BFu7ll_BFu17i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu17i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu17i_BFu0ll) C1{ FL:7 Fi:17 FL:0}



static void Test_BFu7ll_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu0ll");
    static BFu7ll_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu17i_BFu0ll(Test_BFu7ll_BFu17i_BFu0ll, "BFu7ll_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu17i_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu17i_BFu0s) C1{ FL:7 Fi:17 Fs:0}



static void Test_BFu7ll_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu17i_BFu0s");
    static BFu7ll_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu17i_BFu0s(Test_BFu7ll_BFu17i_BFu0s, "BFu7ll_BFu17i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu17ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu17ll_BFu0c) C1{ FL:7 FL:17 Fc:0}



static void Test_BFu7ll_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu0c");
    static BFu7ll_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu17ll_BFu0c(Test_BFu7ll_BFu17ll_BFu0c, "BFu7ll_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu17ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu17ll_BFu0i) C1{ FL:7 FL:17 Fi:0}



static void Test_BFu7ll_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu0i");
    static BFu7ll_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu17ll_BFu0i(Test_BFu7ll_BFu17ll_BFu0i, "BFu7ll_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu17ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu17ll_BFu0ll) C1{ FL:7 FL:17 FL:0}



static void Test_BFu7ll_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu0ll");
    static BFu7ll_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu17ll_BFu0ll(Test_BFu7ll_BFu17ll_BFu0ll, "BFu7ll_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu17ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu17ll_BFu0s) C1{ FL:7 FL:17 Fs:0}



static void Test_BFu7ll_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu17ll_BFu0s");
    static BFu7ll_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7ll_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7ll_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu17ll_BFu0s(Test_BFu7ll_BFu17ll_BFu0s, "BFu7ll_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1c_BFu0c  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu1c_BFu0c) C1{ FL:7 Fc:1 Fc:0}



static void Test_BFu7ll_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu0c");
    static BFu7ll_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1c_BFu0c(Test_BFu7ll_BFu1c_BFu0c, "BFu7ll_BFu1c_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1c_BFu0i  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu1c_BFu0i) C1{ FL:7 Fc:1 Fi:0}



static void Test_BFu7ll_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu0i");
    static BFu7ll_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1c_BFu0i(Test_BFu7ll_BFu1c_BFu0i, "BFu7ll_BFu1c_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1c_BFu0ll  {
  __tsu64 v1:7;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu1c_BFu0ll) C1{ FL:7 Fc:1 FL:0}



static void Test_BFu7ll_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu0ll");
    static BFu7ll_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1c_BFu0ll(Test_BFu7ll_BFu1c_BFu0ll, "BFu7ll_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1c_BFu0s  {
  __tsu64 v1:7;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu1c_BFu0s) C1{ FL:7 Fc:1 Fs:0}



static void Test_BFu7ll_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu1c_BFu0s");
    static BFu7ll_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1c_BFu0s(Test_BFu7ll_BFu1c_BFu0s, "BFu7ll_BFu1c_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1i_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu1i_BFu0c) C1{ FL:7 Fi:1 Fc:0}



static void Test_BFu7ll_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu0c");
    static BFu7ll_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1i_BFu0c(Test_BFu7ll_BFu1i_BFu0c, "BFu7ll_BFu1i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1i_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu1i_BFu0i) C1{ FL:7 Fi:1 Fi:0}



static void Test_BFu7ll_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu0i");
    static BFu7ll_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1i_BFu0i(Test_BFu7ll_BFu1i_BFu0i, "BFu7ll_BFu1i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu1i_BFu0ll) C1{ FL:7 Fi:1 FL:0}



static void Test_BFu7ll_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu0ll");
    static BFu7ll_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1i_BFu0ll(Test_BFu7ll_BFu1i_BFu0ll, "BFu7ll_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1i_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu1i_BFu0s) C1{ FL:7 Fi:1 Fs:0}



static void Test_BFu7ll_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu1i_BFu0s");
    static BFu7ll_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1i_BFu0s(Test_BFu7ll_BFu1i_BFu0s, "BFu7ll_BFu1i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu1ll_BFu0c) C1{ FL:7 FL:1 Fc:0}



static void Test_BFu7ll_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu0c");
    static BFu7ll_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1ll_BFu0c(Test_BFu7ll_BFu1ll_BFu0c, "BFu7ll_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu1ll_BFu0i) C1{ FL:7 FL:1 Fi:0}



static void Test_BFu7ll_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu0i");
    static BFu7ll_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1ll_BFu0i(Test_BFu7ll_BFu1ll_BFu0i, "BFu7ll_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu1ll_BFu0ll) C1{ FL:7 FL:1 FL:0}



static void Test_BFu7ll_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu0ll");
    static BFu7ll_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1ll_BFu0ll(Test_BFu7ll_BFu1ll_BFu0ll, "BFu7ll_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu1ll_BFu0s) C1{ FL:7 FL:1 Fs:0}



static void Test_BFu7ll_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu1ll_BFu0s");
    static BFu7ll_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1ll_BFu0s(Test_BFu7ll_BFu1ll_BFu0s, "BFu7ll_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1s_BFu0c  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu1s_BFu0c) C1{ FL:7 Fs:1 Fc:0}



static void Test_BFu7ll_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu0c");
    static BFu7ll_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1s_BFu0c(Test_BFu7ll_BFu1s_BFu0c, "BFu7ll_BFu1s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1s_BFu0i  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu1s_BFu0i) C1{ FL:7 Fs:1 Fi:0}



static void Test_BFu7ll_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu0i");
    static BFu7ll_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1s_BFu0i(Test_BFu7ll_BFu1s_BFu0i, "BFu7ll_BFu1s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1s_BFu0ll  {
  __tsu64 v1:7;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu1s_BFu0ll) C1{ FL:7 Fs:1 FL:0}



static void Test_BFu7ll_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu0ll");
    static BFu7ll_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1s_BFu0ll(Test_BFu7ll_BFu1s_BFu0ll, "BFu7ll_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu1s_BFu0s  {
  __tsu64 v1:7;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu1s_BFu0s) C1{ FL:7 Fs:1 Fs:0}



static void Test_BFu7ll_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu1s_BFu0s");
    static BFu7ll_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7ll_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu1s_BFu0s(Test_BFu7ll_BFu1s_BFu0s, "BFu7ll_BFu1s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu31i_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu31i_BFu0c) C1{ FL:7 Fi:31 Fc:0}



static void Test_BFu7ll_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu0c");
    static BFu7ll_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu31i_BFu0c(Test_BFu7ll_BFu31i_BFu0c, "BFu7ll_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu31i_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu31i_BFu0i) C1{ FL:7 Fi:31 Fi:0}



static void Test_BFu7ll_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu0i");
    static BFu7ll_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu31i_BFu0i(Test_BFu7ll_BFu31i_BFu0i, "BFu7ll_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu31i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu31i_BFu0ll) C1{ FL:7 Fi:31 FL:0}



static void Test_BFu7ll_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu0ll");
    static BFu7ll_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu31i_BFu0ll(Test_BFu7ll_BFu31i_BFu0ll, "BFu7ll_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu31i_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu31i_BFu0s) C1{ FL:7 Fi:31 Fs:0}



static void Test_BFu7ll_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu31i_BFu0s");
    static BFu7ll_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7ll_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7ll_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu31i_BFu0s(Test_BFu7ll_BFu31i_BFu0s, "BFu7ll_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu31ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu31ll_BFu0c) C1{ FL:7 FL:31 Fc:0}



static void Test_BFu7ll_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu0c");
    static BFu7ll_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu31ll_BFu0c(Test_BFu7ll_BFu31ll_BFu0c, "BFu7ll_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu31ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu31ll_BFu0i) C1{ FL:7 FL:31 Fi:0}



static void Test_BFu7ll_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu0i");
    static BFu7ll_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu31ll_BFu0i(Test_BFu7ll_BFu31ll_BFu0i, "BFu7ll_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu31ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu31ll_BFu0ll) C1{ FL:7 FL:31 FL:0}



static void Test_BFu7ll_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu0ll");
    static BFu7ll_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu31ll_BFu0ll(Test_BFu7ll_BFu31ll_BFu0ll, "BFu7ll_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu31ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu31ll_BFu0s) C1{ FL:7 FL:31 Fs:0}



static void Test_BFu7ll_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu31ll_BFu0s");
    static BFu7ll_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7ll_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7ll_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu31ll_BFu0s(Test_BFu7ll_BFu31ll_BFu0s, "BFu7ll_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu32i_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu32i_BFu0c) C1{ FL:7 Fi:32 Fc:0}



static void Test_BFu7ll_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu0c");
    static BFu7ll_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu32i_BFu0c(Test_BFu7ll_BFu32i_BFu0c, "BFu7ll_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu32i_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu32i_BFu0i) C1{ FL:7 Fi:32 Fi:0}



static void Test_BFu7ll_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu0i");
    static BFu7ll_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu32i_BFu0i(Test_BFu7ll_BFu32i_BFu0i, "BFu7ll_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu32i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu32i_BFu0ll) C1{ FL:7 Fi:32 FL:0}



static void Test_BFu7ll_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu0ll");
    static BFu7ll_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu32i_BFu0ll(Test_BFu7ll_BFu32i_BFu0ll, "BFu7ll_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu32i_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu32i_BFu0s) C1{ FL:7 Fi:32 Fs:0}



static void Test_BFu7ll_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu32i_BFu0s");
    static BFu7ll_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7ll_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7ll_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu32i_BFu0s(Test_BFu7ll_BFu32i_BFu0s, "BFu7ll_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu32ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu32ll_BFu0c) C1{ FL:7 FL:32 Fc:0}



static void Test_BFu7ll_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu0c");
    static BFu7ll_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu32ll_BFu0c(Test_BFu7ll_BFu32ll_BFu0c, "BFu7ll_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu32ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu32ll_BFu0i) C1{ FL:7 FL:32 Fi:0}



static void Test_BFu7ll_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu0i");
    static BFu7ll_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu32ll_BFu0i(Test_BFu7ll_BFu32ll_BFu0i, "BFu7ll_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu32ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu32ll_BFu0ll) C1{ FL:7 FL:32 FL:0}



static void Test_BFu7ll_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu0ll");
    static BFu7ll_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu32ll_BFu0ll(Test_BFu7ll_BFu32ll_BFu0ll, "BFu7ll_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu32ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu32ll_BFu0s) C1{ FL:7 FL:32 Fs:0}



static void Test_BFu7ll_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu32ll_BFu0s");
    static BFu7ll_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7ll_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7ll_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu32ll_BFu0s(Test_BFu7ll_BFu32ll_BFu0s, "BFu7ll_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu33_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu33_BFu0c) C1{ FL:7 FL:33 Fc:0}



static void Test_BFu7ll_BFu33_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu0c");
    static BFu7ll_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu33_BFu0c(Test_BFu7ll_BFu33_BFu0c, "BFu7ll_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu33_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu33_BFu0i) C1{ FL:7 FL:33 Fi:0}



static void Test_BFu7ll_BFu33_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu0i");
    static BFu7ll_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu33_BFu0i(Test_BFu7ll_BFu33_BFu0i, "BFu7ll_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu33_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu33_BFu0ll) C1{ FL:7 FL:33 FL:0}



static void Test_BFu7ll_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu0ll");
    static BFu7ll_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu33_BFu0ll(Test_BFu7ll_BFu33_BFu0ll, "BFu7ll_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu33_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu33_BFu0s) C1{ FL:7 FL:33 Fs:0}



static void Test_BFu7ll_BFu33_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu33_BFu0s");
    static BFu7ll_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7ll_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7ll_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu33_BFu0s(Test_BFu7ll_BFu33_BFu0s, "BFu7ll_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7c_BFu0c  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu7c_BFu0c) C1{ FL:7 Fc:7 Fc:0}



static void Test_BFu7ll_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu0c");
    static BFu7ll_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7c_BFu0c(Test_BFu7ll_BFu7c_BFu0c, "BFu7ll_BFu7c_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7c_BFu0i  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu7c_BFu0i) C1{ FL:7 Fc:7 Fi:0}



static void Test_BFu7ll_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu0i");
    static BFu7ll_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7c_BFu0i(Test_BFu7ll_BFu7c_BFu0i, "BFu7ll_BFu7c_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7c_BFu0ll  {
  __tsu64 v1:7;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu7c_BFu0ll) C1{ FL:7 Fc:7 FL:0}



static void Test_BFu7ll_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu0ll");
    static BFu7ll_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7c_BFu0ll(Test_BFu7ll_BFu7c_BFu0ll, "BFu7ll_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7c_BFu0s  {
  __tsu64 v1:7;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu7c_BFu0s) C1{ FL:7 Fc:7 Fs:0}



static void Test_BFu7ll_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu7c_BFu0s");
    static BFu7ll_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7ll_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7c_BFu0s(Test_BFu7ll_BFu7c_BFu0s, "BFu7ll_BFu7c_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7i_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu7i_BFu0c) C1{ FL:7 Fi:7 Fc:0}



static void Test_BFu7ll_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu0c");
    static BFu7ll_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7i_BFu0c(Test_BFu7ll_BFu7i_BFu0c, "BFu7ll_BFu7i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7i_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu7i_BFu0i) C1{ FL:7 Fi:7 Fi:0}



static void Test_BFu7ll_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu0i");
    static BFu7ll_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7i_BFu0i(Test_BFu7ll_BFu7i_BFu0i, "BFu7ll_BFu7i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu7i_BFu0ll) C1{ FL:7 Fi:7 FL:0}



static void Test_BFu7ll_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu0ll");
    static BFu7ll_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7i_BFu0ll(Test_BFu7ll_BFu7i_BFu0ll, "BFu7ll_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7i_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu7i_BFu0s) C1{ FL:7 Fi:7 Fs:0}



static void Test_BFu7ll_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu7i_BFu0s");
    static BFu7ll_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7i_BFu0s(Test_BFu7ll_BFu7i_BFu0s, "BFu7ll_BFu7i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu7ll_BFu0c) C1{ FL:7 FL:7 Fc:0}



static void Test_BFu7ll_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu0c");
    static BFu7ll_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7ll_BFu0c(Test_BFu7ll_BFu7ll_BFu0c, "BFu7ll_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu7ll_BFu0i) C1{ FL:7 FL:7 Fi:0}



static void Test_BFu7ll_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu0i");
    static BFu7ll_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7ll_BFu0i(Test_BFu7ll_BFu7ll_BFu0i, "BFu7ll_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu7ll_BFu0ll) C1{ FL:7 FL:7 FL:0}



static void Test_BFu7ll_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu0ll");
    static BFu7ll_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7ll_BFu0ll(Test_BFu7ll_BFu7ll_BFu0ll, "BFu7ll_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu7ll_BFu0s) C1{ FL:7 FL:7 Fs:0}



static void Test_BFu7ll_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu7ll_BFu0s");
    static BFu7ll_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7ll_BFu0s(Test_BFu7ll_BFu7ll_BFu0s, "BFu7ll_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7s_BFu0c  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu7s_BFu0c) C1{ FL:7 Fs:7 Fc:0}



static void Test_BFu7ll_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu0c");
    static BFu7ll_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7s_BFu0c(Test_BFu7ll_BFu7s_BFu0c, "BFu7ll_BFu7s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7s_BFu0i  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu7s_BFu0i) C1{ FL:7 Fs:7 Fi:0}



static void Test_BFu7ll_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu0i");
    static BFu7ll_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7s_BFu0i(Test_BFu7ll_BFu7s_BFu0i, "BFu7ll_BFu7s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7s_BFu0ll  {
  __tsu64 v1:7;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu7s_BFu0ll) C1{ FL:7 Fs:7 FL:0}



static void Test_BFu7ll_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu0ll");
    static BFu7ll_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7s_BFu0ll(Test_BFu7ll_BFu7s_BFu0ll, "BFu7ll_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu7s_BFu0s  {
  __tsu64 v1:7;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu7s_BFu0s) C1{ FL:7 Fs:7 Fs:0}



static void Test_BFu7ll_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu7s_BFu0s");
    static BFu7ll_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7ll_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7ll_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu7s_BFu0s(Test_BFu7ll_BFu7s_BFu0s, "BFu7ll_BFu7s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8c_BFu0c  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu8c_BFu0c) C1{ FL:7 Fc:8 Fc:0}



static void Test_BFu7ll_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu0c");
    static BFu7ll_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8c_BFu0c(Test_BFu7ll_BFu8c_BFu0c, "BFu7ll_BFu8c_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8c_BFu0i  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu8c_BFu0i) C1{ FL:7 Fc:8 Fi:0}



static void Test_BFu7ll_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu0i");
    static BFu7ll_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8c_BFu0i(Test_BFu7ll_BFu8c_BFu0i, "BFu7ll_BFu8c_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8c_BFu0ll  {
  __tsu64 v1:7;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu8c_BFu0ll) C1{ FL:7 Fc:8 FL:0}



static void Test_BFu7ll_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu0ll");
    static BFu7ll_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8c_BFu0ll(Test_BFu7ll_BFu8c_BFu0ll, "BFu7ll_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8c_BFu0s  {
  __tsu64 v1:7;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu8c_BFu0s) C1{ FL:7 Fc:8 Fs:0}



static void Test_BFu7ll_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu8c_BFu0s");
    static BFu7ll_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7ll_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7ll_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8c_BFu0s(Test_BFu7ll_BFu8c_BFu0s, "BFu7ll_BFu8c_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8i_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu8i_BFu0c) C1{ FL:7 Fi:8 Fc:0}



static void Test_BFu7ll_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu0c");
    static BFu7ll_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8i_BFu0c(Test_BFu7ll_BFu8i_BFu0c, "BFu7ll_BFu8i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8i_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu8i_BFu0i) C1{ FL:7 Fi:8 Fi:0}



static void Test_BFu7ll_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu0i");
    static BFu7ll_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8i_BFu0i(Test_BFu7ll_BFu8i_BFu0i, "BFu7ll_BFu8i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu8i_BFu0ll) C1{ FL:7 Fi:8 FL:0}



static void Test_BFu7ll_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu0ll");
    static BFu7ll_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8i_BFu0ll(Test_BFu7ll_BFu8i_BFu0ll, "BFu7ll_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8i_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu8i_BFu0s) C1{ FL:7 Fi:8 Fs:0}



static void Test_BFu7ll_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu8i_BFu0s");
    static BFu7ll_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8i_BFu0s(Test_BFu7ll_BFu8i_BFu0s, "BFu7ll_BFu8i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu8ll_BFu0c) C1{ FL:7 FL:8 Fc:0}



static void Test_BFu7ll_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu0c");
    static BFu7ll_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8ll_BFu0c(Test_BFu7ll_BFu8ll_BFu0c, "BFu7ll_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu8ll_BFu0i) C1{ FL:7 FL:8 Fi:0}



static void Test_BFu7ll_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu0i");
    static BFu7ll_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8ll_BFu0i(Test_BFu7ll_BFu8ll_BFu0i, "BFu7ll_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu8ll_BFu0ll) C1{ FL:7 FL:8 FL:0}



static void Test_BFu7ll_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu0ll");
    static BFu7ll_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8ll_BFu0ll(Test_BFu7ll_BFu8ll_BFu0ll, "BFu7ll_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu8ll_BFu0s) C1{ FL:7 FL:8 Fs:0}



static void Test_BFu7ll_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu8ll_BFu0s");
    static BFu7ll_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8ll_BFu0s(Test_BFu7ll_BFu8ll_BFu0s, "BFu7ll_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8s_BFu0c  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu8s_BFu0c) C1{ FL:7 Fs:8 Fc:0}



static void Test_BFu7ll_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu0c");
    static BFu7ll_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8s_BFu0c(Test_BFu7ll_BFu8s_BFu0c, "BFu7ll_BFu8s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8s_BFu0i  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu8s_BFu0i) C1{ FL:7 Fs:8 Fi:0}



static void Test_BFu7ll_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu0i");
    static BFu7ll_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8s_BFu0i(Test_BFu7ll_BFu8s_BFu0i, "BFu7ll_BFu8s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8s_BFu0ll  {
  __tsu64 v1:7;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu8s_BFu0ll) C1{ FL:7 Fs:8 FL:0}



static void Test_BFu7ll_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu0ll");
    static BFu7ll_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8s_BFu0ll(Test_BFu7ll_BFu8s_BFu0ll, "BFu7ll_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu8s_BFu0s  {
  __tsu64 v1:7;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu8s_BFu0s) C1{ FL:7 Fs:8 Fs:0}



static void Test_BFu7ll_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu8s_BFu0s");
    static BFu7ll_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7ll_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7ll_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu8s_BFu0s(Test_BFu7ll_BFu8s_BFu0s, "BFu7ll_BFu8s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9i_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu9i_BFu0c) C1{ FL:7 Fi:9 Fc:0}



static void Test_BFu7ll_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu0c");
    static BFu7ll_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9i_BFu0c(Test_BFu7ll_BFu9i_BFu0c, "BFu7ll_BFu9i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9i_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu9i_BFu0i) C1{ FL:7 Fi:9 Fi:0}



static void Test_BFu7ll_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu0i");
    static BFu7ll_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9i_BFu0i(Test_BFu7ll_BFu9i_BFu0i, "BFu7ll_BFu9i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9i_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu9i_BFu0ll) C1{ FL:7 Fi:9 FL:0}



static void Test_BFu7ll_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu0ll");
    static BFu7ll_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9i_BFu0ll(Test_BFu7ll_BFu9i_BFu0ll, "BFu7ll_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9i_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu9i_BFu0s) C1{ FL:7 Fi:9 Fs:0}



static void Test_BFu7ll_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu9i_BFu0s");
    static BFu7ll_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9i_BFu0s(Test_BFu7ll_BFu9i_BFu0s, "BFu7ll_BFu9i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9ll_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu9ll_BFu0c) C1{ FL:7 FL:9 Fc:0}



static void Test_BFu7ll_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu0c");
    static BFu7ll_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9ll_BFu0c(Test_BFu7ll_BFu9ll_BFu0c, "BFu7ll_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9ll_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu9ll_BFu0i) C1{ FL:7 FL:9 Fi:0}



static void Test_BFu7ll_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu0i");
    static BFu7ll_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9ll_BFu0i(Test_BFu7ll_BFu9ll_BFu0i, "BFu7ll_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9ll_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu9ll_BFu0ll) C1{ FL:7 FL:9 FL:0}



static void Test_BFu7ll_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu0ll");
    static BFu7ll_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9ll_BFu0ll(Test_BFu7ll_BFu9ll_BFu0ll, "BFu7ll_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9ll_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu9ll_BFu0s) C1{ FL:7 FL:9 Fs:0}



static void Test_BFu7ll_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu9ll_BFu0s");
    static BFu7ll_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9ll_BFu0s(Test_BFu7ll_BFu9ll_BFu0s, "BFu7ll_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9s_BFu0c  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7ll_BFu9s_BFu0c) C1{ FL:7 Fs:9 Fc:0}



static void Test_BFu7ll_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu0c");
    static BFu7ll_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9s_BFu0c(Test_BFu7ll_BFu9s_BFu0c, "BFu7ll_BFu9s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9s_BFu0i  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7ll_BFu9s_BFu0i) C1{ FL:7 Fs:9 Fi:0}



static void Test_BFu7ll_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu0i");
    static BFu7ll_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9s_BFu0i(Test_BFu7ll_BFu9s_BFu0i, "BFu7ll_BFu9s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9s_BFu0ll  {
  __tsu64 v1:7;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7ll_BFu9s_BFu0ll) C1{ FL:7 Fs:9 FL:0}



static void Test_BFu7ll_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu0ll");
    static BFu7ll_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9s_BFu0ll(Test_BFu7ll_BFu9s_BFu0ll, "BFu7ll_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_BFu9s_BFu0s  {
  __tsu64 v1:7;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7ll_BFu9s_BFu0s) C1{ FL:7 Fs:9 Fs:0}



static void Test_BFu7ll_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu7ll_BFu9s_BFu0s");
    static BFu7ll_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7ll_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7ll_BFu9s_BFu0s(Test_BFu7ll_BFu9s_BFu0s, "BFu7ll_BFu9s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_C_BFu0c  {
  __tsu64 v1:7;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_C_BFu0c) C1{ FL:7 Fc Fc:0}



static void Test_BFu7ll_C_BFu0c()
{
  {
    init_simple_test("BFu7ll_C_BFu0c");
    static BFu7ll_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu0c");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_C_BFu0c(Test_BFu7ll_C_BFu0c, "BFu7ll_C_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_C_BFu0i  {
  __tsu64 v1:7;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_C_BFu0i) C1{ FL:7 Fc Fi:0}



static void Test_BFu7ll_C_BFu0i()
{
  {
    init_simple_test("BFu7ll_C_BFu0i");
    static BFu7ll_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu0i");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_C_BFu0i(Test_BFu7ll_C_BFu0i, "BFu7ll_C_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_C_BFu0ll  {
  __tsu64 v1:7;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_C_BFu0ll) C1{ FL:7 Fc FL:0}



static void Test_BFu7ll_C_BFu0ll()
{
  {
    init_simple_test("BFu7ll_C_BFu0ll");
    static BFu7ll_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_C_BFu0ll(Test_BFu7ll_C_BFu0ll, "BFu7ll_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_C_BFu0s  {
  __tsu64 v1:7;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_C_BFu0s) C1{ FL:7 Fc Fs:0}



static void Test_BFu7ll_C_BFu0s()
{
  {
    init_simple_test("BFu7ll_C_BFu0s");
    static BFu7ll_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_C_BFu0s");
    check_field_offset(lv, v2, 1, "BFu7ll_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_C_BFu0s(Test_BFu7ll_C_BFu0s, "BFu7ll_C_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_D_BFu0c  {
  __tsu64 v1:7;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_D_BFu0c) C1{ FL:7 FL Fc:0}



static void Test_BFu7ll_D_BFu0c()
{
  {
    init_simple_test("BFu7ll_D_BFu0c");
    static BFu7ll_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_D_BFu0c(Test_BFu7ll_D_BFu0c, "BFu7ll_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_D_BFu0i  {
  __tsu64 v1:7;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_D_BFu0i) C1{ FL:7 FL Fi:0}



static void Test_BFu7ll_D_BFu0i()
{
  {
    init_simple_test("BFu7ll_D_BFu0i");
    static BFu7ll_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_D_BFu0i(Test_BFu7ll_D_BFu0i, "BFu7ll_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_D_BFu0ll  {
  __tsu64 v1:7;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_D_BFu0ll) C1{ FL:7 FL FL:0}



static void Test_BFu7ll_D_BFu0ll()
{
  {
    init_simple_test("BFu7ll_D_BFu0ll");
    static BFu7ll_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_D_BFu0ll(Test_BFu7ll_D_BFu0ll, "BFu7ll_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_D_BFu0s  {
  __tsu64 v1:7;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_D_BFu0s) C1{ FL:7 FL Fs:0}



static void Test_BFu7ll_D_BFu0s()
{
  {
    init_simple_test("BFu7ll_D_BFu0s");
    static BFu7ll_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_D_BFu0s(Test_BFu7ll_D_BFu0s, "BFu7ll_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_F_BFu0c  {
  __tsu64 v1:7;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_F_BFu0c) C1{ FL:7 Fi Fc:0}



static void Test_BFu7ll_F_BFu0c()
{
  {
    init_simple_test("BFu7ll_F_BFu0c");
    static BFu7ll_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_F_BFu0c(Test_BFu7ll_F_BFu0c, "BFu7ll_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_F_BFu0i  {
  __tsu64 v1:7;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_F_BFu0i) C1{ FL:7 Fi Fi:0}



static void Test_BFu7ll_F_BFu0i()
{
  {
    init_simple_test("BFu7ll_F_BFu0i");
    static BFu7ll_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_F_BFu0i(Test_BFu7ll_F_BFu0i, "BFu7ll_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_F_BFu0ll  {
  __tsu64 v1:7;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_F_BFu0ll) C1{ FL:7 Fi FL:0}



static void Test_BFu7ll_F_BFu0ll()
{
  {
    init_simple_test("BFu7ll_F_BFu0ll");
    static BFu7ll_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_F_BFu0ll(Test_BFu7ll_F_BFu0ll, "BFu7ll_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_F_BFu0s  {
  __tsu64 v1:7;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_F_BFu0s) C1{ FL:7 Fi Fs:0}



static void Test_BFu7ll_F_BFu0s()
{
  {
    init_simple_test("BFu7ll_F_BFu0s");
    static BFu7ll_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7ll_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_F_BFu0s(Test_BFu7ll_F_BFu0s, "BFu7ll_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_I_BFu0c  {
  __tsu64 v1:7;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_I_BFu0c) C1{ FL:7 Fi Fc:0}



static void Test_BFu7ll_I_BFu0c()
{
  {
    init_simple_test("BFu7ll_I_BFu0c");
    static BFu7ll_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_I_BFu0c(Test_BFu7ll_I_BFu0c, "BFu7ll_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_I_BFu0i  {
  __tsu64 v1:7;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_I_BFu0i) C1{ FL:7 Fi Fi:0}



static void Test_BFu7ll_I_BFu0i()
{
  {
    init_simple_test("BFu7ll_I_BFu0i");
    static BFu7ll_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_I_BFu0i(Test_BFu7ll_I_BFu0i, "BFu7ll_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_I_BFu0ll  {
  __tsu64 v1:7;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_I_BFu0ll) C1{ FL:7 Fi FL:0}



static void Test_BFu7ll_I_BFu0ll()
{
  {
    init_simple_test("BFu7ll_I_BFu0ll");
    static BFu7ll_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_I_BFu0ll(Test_BFu7ll_I_BFu0ll, "BFu7ll_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_I_BFu0s  {
  __tsu64 v1:7;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_I_BFu0s) C1{ FL:7 Fi Fs:0}



static void Test_BFu7ll_I_BFu0s()
{
  {
    init_simple_test("BFu7ll_I_BFu0s");
    static BFu7ll_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7ll_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_I_BFu0s(Test_BFu7ll_I_BFu0s, "BFu7ll_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ip_BFu0c  {
  __tsu64 v1:7;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_Ip_BFu0c) C1{ FL:7 Fp Fc:0}



static void Test_BFu7ll_Ip_BFu0c()
{
  {
    init_simple_test("BFu7ll_Ip_BFu0c");
    static BFu7ll_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ip_BFu0c(Test_BFu7ll_Ip_BFu0c, "BFu7ll_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ip_BFu0i  {
  __tsu64 v1:7;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_Ip_BFu0i) C1{ FL:7 Fp Fi:0}



static void Test_BFu7ll_Ip_BFu0i()
{
  {
    init_simple_test("BFu7ll_Ip_BFu0i");
    static BFu7ll_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ip_BFu0i(Test_BFu7ll_Ip_BFu0i, "BFu7ll_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ip_BFu0ll  {
  __tsu64 v1:7;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_Ip_BFu0ll) C1{ FL:7 Fp FL:0}



static void Test_BFu7ll_Ip_BFu0ll()
{
  {
    init_simple_test("BFu7ll_Ip_BFu0ll");
    static BFu7ll_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ip_BFu0ll(Test_BFu7ll_Ip_BFu0ll, "BFu7ll_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ip_BFu0s  {
  __tsu64 v1:7;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_Ip_BFu0s) C1{ FL:7 Fp Fs:0}



static void Test_BFu7ll_Ip_BFu0s()
{
  {
    init_simple_test("BFu7ll_Ip_BFu0s");
    static BFu7ll_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ip_BFu0s(Test_BFu7ll_Ip_BFu0s, "BFu7ll_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_L_BFu0c  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_L_BFu0c) C1{ FL:7 FL Fc:0}



static void Test_BFu7ll_L_BFu0c()
{
  {
    init_simple_test("BFu7ll_L_BFu0c");
    static BFu7ll_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_L_BFu0c(Test_BFu7ll_L_BFu0c, "BFu7ll_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_L_BFu0i  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_L_BFu0i) C1{ FL:7 FL Fi:0}



static void Test_BFu7ll_L_BFu0i()
{
  {
    init_simple_test("BFu7ll_L_BFu0i");
    static BFu7ll_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_L_BFu0i(Test_BFu7ll_L_BFu0i, "BFu7ll_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_L_BFu0ll  {
  __tsu64 v1:7;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_L_BFu0ll) C1{ FL:7 FL FL:0}



static void Test_BFu7ll_L_BFu0ll()
{
  {
    init_simple_test("BFu7ll_L_BFu0ll");
    static BFu7ll_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_L_BFu0ll(Test_BFu7ll_L_BFu0ll, "BFu7ll_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_L_BFu0s  {
  __tsu64 v1:7;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_L_BFu0s) C1{ FL:7 FL Fs:0}



static void Test_BFu7ll_L_BFu0s()
{
  {
    init_simple_test("BFu7ll_L_BFu0s");
    static BFu7ll_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_L_BFu0s(Test_BFu7ll_L_BFu0s, "BFu7ll_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_S_BFu0c  {
  __tsu64 v1:7;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_S_BFu0c) C1{ FL:7 Fs Fc:0}



static void Test_BFu7ll_S_BFu0c()
{
  {
    init_simple_test("BFu7ll_S_BFu0c");
    static BFu7ll_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_S_BFu0c(Test_BFu7ll_S_BFu0c, "BFu7ll_S_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_S_BFu0i  {
  __tsu64 v1:7;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_S_BFu0i) C1{ FL:7 Fs Fi:0}



static void Test_BFu7ll_S_BFu0i()
{
  {
    init_simple_test("BFu7ll_S_BFu0i");
    static BFu7ll_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_S_BFu0i(Test_BFu7ll_S_BFu0i, "BFu7ll_S_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_S_BFu0ll  {
  __tsu64 v1:7;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_S_BFu0ll) C1{ FL:7 Fs FL:0}



static void Test_BFu7ll_S_BFu0ll()
{
  {
    init_simple_test("BFu7ll_S_BFu0ll");
    static BFu7ll_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_S_BFu0ll(Test_BFu7ll_S_BFu0ll, "BFu7ll_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_S_BFu0s  {
  __tsu64 v1:7;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_S_BFu0s) C1{ FL:7 Fs Fs:0}



static void Test_BFu7ll_S_BFu0s()
{
  {
    init_simple_test("BFu7ll_S_BFu0s");
    static BFu7ll_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu7ll_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_S_BFu0s(Test_BFu7ll_S_BFu0s, "BFu7ll_S_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Uc_BFu0c  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_Uc_BFu0c) C1{ FL:7 Fc Fc:0}



static void Test_BFu7ll_Uc_BFu0c()
{
  {
    init_simple_test("BFu7ll_Uc_BFu0c");
    static BFu7ll_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu0c");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Uc_BFu0c(Test_BFu7ll_Uc_BFu0c, "BFu7ll_Uc_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Uc_BFu0i  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_Uc_BFu0i) C1{ FL:7 Fc Fi:0}



static void Test_BFu7ll_Uc_BFu0i()
{
  {
    init_simple_test("BFu7ll_Uc_BFu0i");
    static BFu7ll_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu0i");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Uc_BFu0i(Test_BFu7ll_Uc_BFu0i, "BFu7ll_Uc_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Uc_BFu0ll  {
  __tsu64 v1:7;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_Uc_BFu0ll) C1{ FL:7 Fc FL:0}



static void Test_BFu7ll_Uc_BFu0ll()
{
  {
    init_simple_test("BFu7ll_Uc_BFu0ll");
    static BFu7ll_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Uc_BFu0ll(Test_BFu7ll_Uc_BFu0ll, "BFu7ll_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Uc_BFu0s  {
  __tsu64 v1:7;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_Uc_BFu0s) C1{ FL:7 Fc Fs:0}



static void Test_BFu7ll_Uc_BFu0s()
{
  {
    init_simple_test("BFu7ll_Uc_BFu0s");
    static BFu7ll_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Uc_BFu0s");
    check_field_offset(lv, v2, 1, "BFu7ll_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Uc_BFu0s(Test_BFu7ll_Uc_BFu0s, "BFu7ll_Uc_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ui_BFu0c  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_Ui_BFu0c) C1{ FL:7 Fi Fc:0}



static void Test_BFu7ll_Ui_BFu0c()
{
  {
    init_simple_test("BFu7ll_Ui_BFu0c");
    static BFu7ll_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ui_BFu0c(Test_BFu7ll_Ui_BFu0c, "BFu7ll_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ui_BFu0i  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_Ui_BFu0i) C1{ FL:7 Fi Fi:0}



static void Test_BFu7ll_Ui_BFu0i()
{
  {
    init_simple_test("BFu7ll_Ui_BFu0i");
    static BFu7ll_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ui_BFu0i(Test_BFu7ll_Ui_BFu0i, "BFu7ll_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ui_BFu0ll  {
  __tsu64 v1:7;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_Ui_BFu0ll) C1{ FL:7 Fi FL:0}



static void Test_BFu7ll_Ui_BFu0ll()
{
  {
    init_simple_test("BFu7ll_Ui_BFu0ll");
    static BFu7ll_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ui_BFu0ll(Test_BFu7ll_Ui_BFu0ll, "BFu7ll_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ui_BFu0s  {
  __tsu64 v1:7;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_Ui_BFu0s) C1{ FL:7 Fi Fs:0}



static void Test_BFu7ll_Ui_BFu0s()
{
  {
    init_simple_test("BFu7ll_Ui_BFu0s");
    static BFu7ll_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7ll_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ui_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7ll_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ui_BFu0s(Test_BFu7ll_Ui_BFu0s, "BFu7ll_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ul_BFu0c  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_Ul_BFu0c) C1{ FL:7 FL Fc:0}



static void Test_BFu7ll_Ul_BFu0c()
{
  {
    init_simple_test("BFu7ll_Ul_BFu0c");
    static BFu7ll_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ul_BFu0c(Test_BFu7ll_Ul_BFu0c, "BFu7ll_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ul_BFu0i  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_Ul_BFu0i) C1{ FL:7 FL Fi:0}



static void Test_BFu7ll_Ul_BFu0i()
{
  {
    init_simple_test("BFu7ll_Ul_BFu0i");
    static BFu7ll_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ul_BFu0i(Test_BFu7ll_Ul_BFu0i, "BFu7ll_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ul_BFu0ll  {
  __tsu64 v1:7;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_Ul_BFu0ll) C1{ FL:7 FL FL:0}



static void Test_BFu7ll_Ul_BFu0ll()
{
  {
    init_simple_test("BFu7ll_Ul_BFu0ll");
    static BFu7ll_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ul_BFu0ll(Test_BFu7ll_Ul_BFu0ll, "BFu7ll_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Ul_BFu0s  {
  __tsu64 v1:7;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_Ul_BFu0s) C1{ FL:7 FL Fs:0}



static void Test_BFu7ll_Ul_BFu0s()
{
  {
    init_simple_test("BFu7ll_Ul_BFu0s");
    static BFu7ll_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7ll_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Ul_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Ul_BFu0s(Test_BFu7ll_Ul_BFu0s, "BFu7ll_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Us_BFu0c  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_Us_BFu0c) C1{ FL:7 Fs Fc:0}



static void Test_BFu7ll_Us_BFu0c()
{
  {
    init_simple_test("BFu7ll_Us_BFu0c");
    static BFu7ll_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu0c");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Us_BFu0c(Test_BFu7ll_Us_BFu0c, "BFu7ll_Us_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Us_BFu0i  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_Us_BFu0i) C1{ FL:7 Fs Fi:0}



static void Test_BFu7ll_Us_BFu0i()
{
  {
    init_simple_test("BFu7ll_Us_BFu0i");
    static BFu7ll_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu0i");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Us_BFu0i(Test_BFu7ll_Us_BFu0i, "BFu7ll_Us_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Us_BFu0ll  {
  __tsu64 v1:7;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_Us_BFu0ll) C1{ FL:7 Fs FL:0}



static void Test_BFu7ll_Us_BFu0ll()
{
  {
    init_simple_test("BFu7ll_Us_BFu0ll");
    static BFu7ll_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Us_BFu0ll(Test_BFu7ll_Us_BFu0ll, "BFu7ll_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Us_BFu0s  {
  __tsu64 v1:7;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_Us_BFu0s) C1{ FL:7 Fs Fs:0}



static void Test_BFu7ll_Us_BFu0s()
{
  {
    init_simple_test("BFu7ll_Us_BFu0s");
    static BFu7ll_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7ll_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Us_BFu0s");
    check_field_offset(lv, v2, 2, "BFu7ll_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Us_BFu0s(Test_BFu7ll_Us_BFu0s, "BFu7ll_Us_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Vp_BFu0c  {
  __tsu64 v1:7;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu7ll_Vp_BFu0c) C1{ FL:7 Fp Fc:0}



static void Test_BFu7ll_Vp_BFu0c()
{
  {
    init_simple_test("BFu7ll_Vp_BFu0c");
    static BFu7ll_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Vp_BFu0c(Test_BFu7ll_Vp_BFu0c, "BFu7ll_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Vp_BFu0i  {
  __tsu64 v1:7;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu7ll_Vp_BFu0i) C1{ FL:7 Fp Fi:0}



static void Test_BFu7ll_Vp_BFu0i()
{
  {
    init_simple_test("BFu7ll_Vp_BFu0i");
    static BFu7ll_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Vp_BFu0i(Test_BFu7ll_Vp_BFu0i, "BFu7ll_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Vp_BFu0ll  {
  __tsu64 v1:7;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu7ll_Vp_BFu0ll) C1{ FL:7 Fp FL:0}



static void Test_BFu7ll_Vp_BFu0ll()
{
  {
    init_simple_test("BFu7ll_Vp_BFu0ll");
    static BFu7ll_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Vp_BFu0ll(Test_BFu7ll_Vp_BFu0ll, "BFu7ll_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7ll_Vp_BFu0s  {
  __tsu64 v1:7;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu7ll_Vp_BFu0s) C1{ FL:7 Fp Fs:0}



static void Test_BFu7ll_Vp_BFu0s()
{
  {
    init_simple_test("BFu7ll_Vp_BFu0s");
    static BFu7ll_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7ll_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7ll_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7ll_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7ll_Vp_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7ll_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7ll_Vp_BFu0s(Test_BFu7ll_Vp_BFu0s, "BFu7ll_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c  {
  unsigned short v1:7;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu0c) C1{ Fs:7 Fc:0}



static void Test_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu0c");
    static BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c(Test_BFu7s_BFu0c, "BFu7s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu0c  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu0c_BFu0c) C1{ Fs:7 Fc:0 Fc:0}



static void Test_BFu7s_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu0c");
    static BFu7s_BFu0c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu0c(Test_BFu7s_BFu0c_BFu0c, "BFu7s_BFu0c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu0i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu0c_BFu0i) C1{ Fs:7 Fc:0 Fi:0}



static void Test_BFu7s_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu0i");
    static BFu7s_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu0i(Test_BFu7s_BFu0c_BFu0i, "BFu7s_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu0ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu0c_BFu0ll) C1{ Fs:7 Fc:0 FL:0}



static void Test_BFu7s_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu0ll");
    static BFu7s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu0ll(Test_BFu7s_BFu0c_BFu0ll, "BFu7s_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu0s  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu0c_BFu0s) C1{ Fs:7 Fc:0 Fs:0}



static void Test_BFu7s_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu0s");
    static BFu7s_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu0s(Test_BFu7s_BFu0c_BFu0s, "BFu7s_BFu0c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu15i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7s_BFu0c_BFu15i) C1{ Fs:7 Fc:0 Fi:15}



static void Test_BFu7s_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu15i");
    static BFu7s_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu7s_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu15i(Test_BFu7s_BFu0c_BFu15i, "BFu7s_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu15ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7s_BFu0c_BFu15ll) C1{ Fs:7 Fc:0 FL:15}



static void Test_BFu7s_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu15ll");
    static BFu7s_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu7s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu15ll(Test_BFu7s_BFu0c_BFu15ll, "BFu7s_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu15s  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7s_BFu0c_BFu15s) C1{ Fs:7 Fc:0 Fs:15}



static void Test_BFu7s_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu15s");
    static BFu7s_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu15s(Test_BFu7s_BFu0c_BFu15s, "BFu7s_BFu0c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu16i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7s_BFu0c_BFu16i) C1{ Fs:7 Fc:0 Fi:16}



static void Test_BFu7s_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu16i");
    static BFu7s_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu7s_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu16i(Test_BFu7s_BFu0c_BFu16i, "BFu7s_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu16ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7s_BFu0c_BFu16ll) C1{ Fs:7 Fc:0 FL:16}



static void Test_BFu7s_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu16ll");
    static BFu7s_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu7s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu16ll(Test_BFu7s_BFu0c_BFu16ll, "BFu7s_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu16s  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7s_BFu0c_BFu16s) C1{ Fs:7 Fc:0 Fs:16}



static void Test_BFu7s_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu16s");
    static BFu7s_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu16s(Test_BFu7s_BFu0c_BFu16s, "BFu7s_BFu0c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu17i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7s_BFu0c_BFu17i) C1{ Fs:7 Fc:0 Fi:17}



static void Test_BFu7s_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu17i");
    static BFu7s_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu7s_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu17i(Test_BFu7s_BFu0c_BFu17i, "BFu7s_BFu0c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu17ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7s_BFu0c_BFu17ll) C1{ Fs:7 Fc:0 FL:17}



static void Test_BFu7s_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu17ll");
    static BFu7s_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu7s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu17ll(Test_BFu7s_BFu0c_BFu17ll, "BFu7s_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu1c  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7s_BFu0c_BFu1c) C1{ Fs:7 Fc:0 Fc:1}



static void Test_BFu7s_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu1c");
    static BFu7s_BFu0c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7s_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu1c(Test_BFu7s_BFu0c_BFu1c, "BFu7s_BFu0c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu1i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7s_BFu0c_BFu1i) C1{ Fs:7 Fc:0 Fi:1}



static void Test_BFu7s_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu1i");
    static BFu7s_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7s_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu1i(Test_BFu7s_BFu0c_BFu1i, "BFu7s_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu1ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7s_BFu0c_BFu1ll) C1{ Fs:7 Fc:0 FL:1}



static void Test_BFu7s_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu1ll");
    static BFu7s_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7s_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu1ll(Test_BFu7s_BFu0c_BFu1ll, "BFu7s_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu1s  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7s_BFu0c_BFu1s) C1{ Fs:7 Fc:0 Fs:1}



static void Test_BFu7s_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu1s");
    static BFu7s_BFu0c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu7s_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu1s(Test_BFu7s_BFu0c_BFu1s, "BFu7s_BFu0c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu31i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7s_BFu0c_BFu31i) C1{ Fs:7 Fc:0 Fi:31}



static void Test_BFu7s_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu31i");
    static BFu7s_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu31i(Test_BFu7s_BFu0c_BFu31i, "BFu7s_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu31ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7s_BFu0c_BFu31ll) C1{ Fs:7 Fc:0 FL:31}



static void Test_BFu7s_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu31ll");
    static BFu7s_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu7s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu31ll(Test_BFu7s_BFu0c_BFu31ll, "BFu7s_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu32i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7s_BFu0c_BFu32i) C1{ Fs:7 Fc:0 Fi:32}



static void Test_BFu7s_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu32i");
    static BFu7s_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu32i(Test_BFu7s_BFu0c_BFu32i, "BFu7s_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu32ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7s_BFu0c_BFu32ll) C1{ Fs:7 Fc:0 FL:32}



static void Test_BFu7s_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu32ll");
    static BFu7s_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu7s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu32ll(Test_BFu7s_BFu0c_BFu32ll, "BFu7s_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu33  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7s_BFu0c_BFu33) C1{ Fs:7 Fc:0 FL:33}



static void Test_BFu7s_BFu0c_BFu33()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu33");
    static BFu7s_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu7s_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu33(Test_BFu7s_BFu0c_BFu33, "BFu7s_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu7c  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7s_BFu0c_BFu7c) C1{ Fs:7 Fc:0 Fc:7}



static void Test_BFu7s_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu7c");
    static BFu7s_BFu0c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu7c(Test_BFu7s_BFu0c_BFu7c, "BFu7s_BFu0c_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu7i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7s_BFu0c_BFu7i) C1{ Fs:7 Fc:0 Fi:7}



static void Test_BFu7s_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu7i");
    static BFu7s_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu7i(Test_BFu7s_BFu0c_BFu7i, "BFu7s_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu7ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7s_BFu0c_BFu7ll) C1{ Fs:7 Fc:0 FL:7}



static void Test_BFu7s_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu7ll");
    static BFu7s_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu7ll(Test_BFu7s_BFu0c_BFu7ll, "BFu7s_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu7s  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7s_BFu0c_BFu7s) C1{ Fs:7 Fc:0 Fs:7}



static void Test_BFu7s_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu7s");
    static BFu7s_BFu0c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu7s(Test_BFu7s_BFu0c_BFu7s, "BFu7s_BFu0c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu8c  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7s_BFu0c_BFu8c) C1{ Fs:7 Fc:0 Fc:8}



static void Test_BFu7s_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu8c");
    static BFu7s_BFu0c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu8c(Test_BFu7s_BFu0c_BFu8c, "BFu7s_BFu0c_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu8i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7s_BFu0c_BFu8i) C1{ Fs:7 Fc:0 Fi:8}



static void Test_BFu7s_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu8i");
    static BFu7s_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu8i(Test_BFu7s_BFu0c_BFu8i, "BFu7s_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu8ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7s_BFu0c_BFu8ll) C1{ Fs:7 Fc:0 FL:8}



static void Test_BFu7s_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu8ll");
    static BFu7s_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu8ll(Test_BFu7s_BFu0c_BFu8ll, "BFu7s_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu8s  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7s_BFu0c_BFu8s) C1{ Fs:7 Fc:0 Fs:8}



static void Test_BFu7s_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu8s");
    static BFu7s_BFu0c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu8s(Test_BFu7s_BFu0c_BFu8s, "BFu7s_BFu0c_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu9i  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7s_BFu0c_BFu9i) C1{ Fs:7 Fc:0 Fi:9}



static void Test_BFu7s_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu9i");
    static BFu7s_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu7s_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu9i(Test_BFu7s_BFu0c_BFu9i, "BFu7s_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu9ll  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7s_BFu0c_BFu9ll) C1{ Fs:7 Fc:0 FL:9}



static void Test_BFu7s_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu9ll");
    static BFu7s_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu7s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu9ll(Test_BFu7s_BFu0c_BFu9ll, "BFu7s_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_BFu9s  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7s_BFu0c_BFu9s) C1{ Fs:7 Fc:0 Fs:9}



static void Test_BFu7s_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu0c_BFu9s");
    static BFu7s_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7s_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_BFu9s(Test_BFu7s_BFu0c_BFu9s, "BFu7s_BFu0c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_C  {
  unsigned short v1:7;
  unsigned char  :0;
  char v2;
};
//SIG(1 BFu7s_BFu0c_C) C1{ Fs:7 Fc:0 Fc}



static void Test_BFu7s_BFu0c_C()
{
  {
    init_simple_test("BFu7s_BFu0c_C");
    static BFu7s_BFu0c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_C");
    check_field_offset(lv, v2, 1, "BFu7s_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_C(Test_BFu7s_BFu0c_C, "BFu7s_BFu0c_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_D  {
  unsigned short v1:7;
  unsigned char  :0;
  double v2;
};
//SIG(1 BFu7s_BFu0c_D) C1{ Fs:7 Fc:0 FL}



static void Test_BFu7s_BFu0c_D()
{
  {
    init_simple_test("BFu7s_BFu0c_D");
    static BFu7s_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_D(Test_BFu7s_BFu0c_D, "BFu7s_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_F  {
  unsigned short v1:7;
  unsigned char  :0;
  float v2;
};
//SIG(1 BFu7s_BFu0c_F) C1{ Fs:7 Fc:0 Fi}



static void Test_BFu7s_BFu0c_F()
{
  {
    init_simple_test("BFu7s_BFu0c_F");
    static BFu7s_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_F");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_F(Test_BFu7s_BFu0c_F, "BFu7s_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_I  {
  unsigned short v1:7;
  unsigned char  :0;
  int v2;
};
//SIG(1 BFu7s_BFu0c_I) C1{ Fs:7 Fc:0 Fi}



static void Test_BFu7s_BFu0c_I()
{
  {
    init_simple_test("BFu7s_BFu0c_I");
    static BFu7s_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_I");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_I(Test_BFu7s_BFu0c_I, "BFu7s_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_Ip  {
  unsigned short v1:7;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu7s_BFu0c_Ip) C1{ Fs:7 Fc:0 Fp}



static void Test_BFu7s_BFu0c_Ip()
{
  {
    init_simple_test("BFu7s_BFu0c_Ip");
    static BFu7s_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_Ip(Test_BFu7s_BFu0c_Ip, "BFu7s_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_L  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 BFu7s_BFu0c_L) C1{ Fs:7 Fc:0 FL}



static void Test_BFu7s_BFu0c_L()
{
  {
    init_simple_test("BFu7s_BFu0c_L");
    static BFu7s_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_L(Test_BFu7s_BFu0c_L, "BFu7s_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_S  {
  unsigned short v1:7;
  unsigned char  :0;
  short v2;
};
//SIG(1 BFu7s_BFu0c_S) C1{ Fs:7 Fc:0 Fs}



static void Test_BFu7s_BFu0c_S()
{
  {
    init_simple_test("BFu7s_BFu0c_S");
    static BFu7s_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_S");
    check_field_offset(lv, v2, 2, "BFu7s_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_S(Test_BFu7s_BFu0c_S, "BFu7s_BFu0c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_Uc  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 BFu7s_BFu0c_Uc) C1{ Fs:7 Fc:0 Fc}



static void Test_BFu7s_BFu0c_Uc()
{
  {
    init_simple_test("BFu7s_BFu0c_Uc");
    static BFu7s_BFu0c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_Uc");
    check_field_offset(lv, v2, 1, "BFu7s_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_Uc(Test_BFu7s_BFu0c_Uc, "BFu7s_BFu0c_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_Ui  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 BFu7s_BFu0c_Ui) C1{ Fs:7 Fc:0 Fi}



static void Test_BFu7s_BFu0c_Ui()
{
  {
    init_simple_test("BFu7s_BFu0c_Ui");
    static BFu7s_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_Ui");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_Ui(Test_BFu7s_BFu0c_Ui, "BFu7s_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_Ul  {
  unsigned short v1:7;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 BFu7s_BFu0c_Ul) C1{ Fs:7 Fc:0 FL}



static void Test_BFu7s_BFu0c_Ul()
{
  {
    init_simple_test("BFu7s_BFu0c_Ul");
    static BFu7s_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_Ul(Test_BFu7s_BFu0c_Ul, "BFu7s_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_Us  {
  unsigned short v1:7;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 BFu7s_BFu0c_Us) C1{ Fs:7 Fc:0 Fs}



static void Test_BFu7s_BFu0c_Us()
{
  {
    init_simple_test("BFu7s_BFu0c_Us");
    static BFu7s_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_Us");
    check_field_offset(lv, v2, 2, "BFu7s_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_Us(Test_BFu7s_BFu0c_Us, "BFu7s_BFu0c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0c_Vp  {
  unsigned short v1:7;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu7s_BFu0c_Vp) C1{ Fs:7 Fc:0 Fp}



static void Test_BFu7s_BFu0c_Vp()
{
  {
    init_simple_test("BFu7s_BFu0c_Vp");
    static BFu7s_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0c_Vp(Test_BFu7s_BFu0c_Vp, "BFu7s_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i  {
  unsigned short v1:7;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu0i) C1{ Fs:7 Fi:0}



static void Test_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu0i");
    static BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i(Test_BFu7s_BFu0i, "BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu0c  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu0i_BFu0c) C1{ Fs:7 Fi:0 Fc:0}



static void Test_BFu7s_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu0c");
    static BFu7s_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu0c(Test_BFu7s_BFu0i_BFu0c, "BFu7s_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu0i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu0i_BFu0i) C1{ Fs:7 Fi:0 Fi:0}



static void Test_BFu7s_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu0i");
    static BFu7s_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu0i(Test_BFu7s_BFu0i_BFu0i, "BFu7s_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu0ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu0i_BFu0ll) C1{ Fs:7 Fi:0 FL:0}



static void Test_BFu7s_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu0ll");
    static BFu7s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu0ll(Test_BFu7s_BFu0i_BFu0ll, "BFu7s_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu0s  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu0i_BFu0s) C1{ Fs:7 Fi:0 Fs:0}



static void Test_BFu7s_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu0s");
    static BFu7s_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu0s(Test_BFu7s_BFu0i_BFu0s, "BFu7s_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu15i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7s_BFu0i_BFu15i) C1{ Fs:7 Fi:0 Fi:15}



static void Test_BFu7s_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu15i");
    static BFu7s_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7s_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu15i(Test_BFu7s_BFu0i_BFu15i, "BFu7s_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu15ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7s_BFu0i_BFu15ll) C1{ Fs:7 Fi:0 FL:15}



static void Test_BFu7s_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu15ll");
    static BFu7s_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu15ll(Test_BFu7s_BFu0i_BFu15ll, "BFu7s_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu15s  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7s_BFu0i_BFu15s) C1{ Fs:7 Fi:0 Fs:15}



static void Test_BFu7s_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu15s");
    static BFu7s_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu7s_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu15s(Test_BFu7s_BFu0i_BFu15s, "BFu7s_BFu0i_BFu15s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu16i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7s_BFu0i_BFu16i) C1{ Fs:7 Fi:0 Fi:16}



static void Test_BFu7s_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu16i");
    static BFu7s_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7s_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu16i(Test_BFu7s_BFu0i_BFu16i, "BFu7s_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu16ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7s_BFu0i_BFu16ll) C1{ Fs:7 Fi:0 FL:16}



static void Test_BFu7s_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu16ll");
    static BFu7s_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu16ll(Test_BFu7s_BFu0i_BFu16ll, "BFu7s_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu16s  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7s_BFu0i_BFu16s) C1{ Fs:7 Fi:0 Fs:16}



static void Test_BFu7s_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu16s");
    static BFu7s_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu7s_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu16s(Test_BFu7s_BFu0i_BFu16s, "BFu7s_BFu0i_BFu16s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu17i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7s_BFu0i_BFu17i) C1{ Fs:7 Fi:0 Fi:17}



static void Test_BFu7s_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu17i");
    static BFu7s_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7s_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu17i(Test_BFu7s_BFu0i_BFu17i, "BFu7s_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu17ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7s_BFu0i_BFu17ll) C1{ Fs:7 Fi:0 FL:17}



static void Test_BFu7s_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu17ll");
    static BFu7s_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu17ll(Test_BFu7s_BFu0i_BFu17ll, "BFu7s_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu1c  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7s_BFu0i_BFu1c) C1{ Fs:7 Fi:0 Fc:1}



static void Test_BFu7s_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu1c");
    static BFu7s_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7s_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu1c(Test_BFu7s_BFu0i_BFu1c, "BFu7s_BFu0i_BFu1c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu1i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7s_BFu0i_BFu1i) C1{ Fs:7 Fi:0 Fi:1}



static void Test_BFu7s_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu1i");
    static BFu7s_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7s_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu1i(Test_BFu7s_BFu0i_BFu1i, "BFu7s_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu1ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7s_BFu0i_BFu1ll) C1{ Fs:7 Fi:0 FL:1}



static void Test_BFu7s_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu1ll");
    static BFu7s_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7s_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu1ll(Test_BFu7s_BFu0i_BFu1ll, "BFu7s_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu1s  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7s_BFu0i_BFu1s) C1{ Fs:7 Fi:0 Fs:1}



static void Test_BFu7s_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu1s");
    static BFu7s_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu7s_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu1s(Test_BFu7s_BFu0i_BFu1s, "BFu7s_BFu0i_BFu1s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu31i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7s_BFu0i_BFu31i) C1{ Fs:7 Fi:0 Fi:31}



static void Test_BFu7s_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu31i");
    static BFu7s_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu31i(Test_BFu7s_BFu0i_BFu31i, "BFu7s_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu31ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7s_BFu0i_BFu31ll) C1{ Fs:7 Fi:0 FL:31}



static void Test_BFu7s_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu31ll");
    static BFu7s_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu31ll(Test_BFu7s_BFu0i_BFu31ll, "BFu7s_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu32i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7s_BFu0i_BFu32i) C1{ Fs:7 Fi:0 Fi:32}



static void Test_BFu7s_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu32i");
    static BFu7s_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu32i(Test_BFu7s_BFu0i_BFu32i, "BFu7s_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu32ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7s_BFu0i_BFu32ll) C1{ Fs:7 Fi:0 FL:32}



static void Test_BFu7s_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu32ll");
    static BFu7s_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu32ll(Test_BFu7s_BFu0i_BFu32ll, "BFu7s_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu33  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7s_BFu0i_BFu33) C1{ Fs:7 Fi:0 FL:33}



static void Test_BFu7s_BFu0i_BFu33()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu33");
    static BFu7s_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu7s_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7s_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu33(Test_BFu7s_BFu0i_BFu33, "BFu7s_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu7c  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7s_BFu0i_BFu7c) C1{ Fs:7 Fi:0 Fc:7}



static void Test_BFu7s_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu7c");
    static BFu7s_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7s_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu7c(Test_BFu7s_BFu0i_BFu7c, "BFu7s_BFu0i_BFu7c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu7i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7s_BFu0i_BFu7i) C1{ Fs:7 Fi:0 Fi:7}



static void Test_BFu7s_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu7i");
    static BFu7s_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7s_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu7i(Test_BFu7s_BFu0i_BFu7i, "BFu7s_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu7ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7s_BFu0i_BFu7ll) C1{ Fs:7 Fi:0 FL:7}



static void Test_BFu7s_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu7ll");
    static BFu7s_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu7ll(Test_BFu7s_BFu0i_BFu7ll, "BFu7s_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu7s  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7s_BFu0i_BFu7s) C1{ Fs:7 Fi:0 Fs:7}



static void Test_BFu7s_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu7s");
    static BFu7s_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu7s_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu7s(Test_BFu7s_BFu0i_BFu7s, "BFu7s_BFu0i_BFu7s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu8c  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7s_BFu0i_BFu8c) C1{ Fs:7 Fi:0 Fc:8}



static void Test_BFu7s_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu8c");
    static BFu7s_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7s_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu8c(Test_BFu7s_BFu0i_BFu8c, "BFu7s_BFu0i_BFu8c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu8i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7s_BFu0i_BFu8i) C1{ Fs:7 Fi:0 Fi:8}



static void Test_BFu7s_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu8i");
    static BFu7s_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7s_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu8i(Test_BFu7s_BFu0i_BFu8i, "BFu7s_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu8ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7s_BFu0i_BFu8ll) C1{ Fs:7 Fi:0 FL:8}



static void Test_BFu7s_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu8ll");
    static BFu7s_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu8ll(Test_BFu7s_BFu0i_BFu8ll, "BFu7s_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu8s  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7s_BFu0i_BFu8s) C1{ Fs:7 Fi:0 Fs:8}



static void Test_BFu7s_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu8s");
    static BFu7s_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu7s_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu8s(Test_BFu7s_BFu0i_BFu8s, "BFu7s_BFu0i_BFu8s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu9i  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7s_BFu0i_BFu9i) C1{ Fs:7 Fi:0 Fi:9}



static void Test_BFu7s_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu9i");
    static BFu7s_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7s_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu9i(Test_BFu7s_BFu0i_BFu9i, "BFu7s_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu9ll  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7s_BFu0i_BFu9ll) C1{ Fs:7 Fi:0 FL:9}



static void Test_BFu7s_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu9ll");
    static BFu7s_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu9ll(Test_BFu7s_BFu0i_BFu9ll, "BFu7s_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_BFu9s  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7s_BFu0i_BFu9s) C1{ Fs:7 Fi:0 Fs:9}



static void Test_BFu7s_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu0i_BFu9s");
    static BFu7s_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu7s_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_BFu9s(Test_BFu7s_BFu0i_BFu9s, "BFu7s_BFu0i_BFu9s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_C  {
  unsigned short v1:7;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu7s_BFu0i_C) C1{ Fs:7 Fi:0 Fc}



static void Test_BFu7s_BFu0i_C()
{
  {
    init_simple_test("BFu7s_BFu0i_C");
    static BFu7s_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_C(Test_BFu7s_BFu0i_C, "BFu7s_BFu0i_C", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_D  {
  unsigned short v1:7;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu7s_BFu0i_D) C1{ Fs:7 Fi:0 FL}



static void Test_BFu7s_BFu0i_D()
{
  {
    init_simple_test("BFu7s_BFu0i_D");
    static BFu7s_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_D(Test_BFu7s_BFu0i_D, "BFu7s_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_F  {
  unsigned short v1:7;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu7s_BFu0i_F) C1{ Fs:7 Fi:0 Fi}



static void Test_BFu7s_BFu0i_F()
{
  {
    init_simple_test("BFu7s_BFu0i_F");
    static BFu7s_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_F(Test_BFu7s_BFu0i_F, "BFu7s_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_I  {
  unsigned short v1:7;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu7s_BFu0i_I) C1{ Fs:7 Fi:0 Fi}



static void Test_BFu7s_BFu0i_I()
{
  {
    init_simple_test("BFu7s_BFu0i_I");
    static BFu7s_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_I(Test_BFu7s_BFu0i_I, "BFu7s_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_Ip  {
  unsigned short v1:7;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu7s_BFu0i_Ip) C1{ Fs:7 Fi:0 Fp}



static void Test_BFu7s_BFu0i_Ip()
{
  {
    init_simple_test("BFu7s_BFu0i_Ip");
    static BFu7s_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_Ip(Test_BFu7s_BFu0i_Ip, "BFu7s_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_L  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu7s_BFu0i_L) C1{ Fs:7 Fi:0 FL}



static void Test_BFu7s_BFu0i_L()
{
  {
    init_simple_test("BFu7s_BFu0i_L");
    static BFu7s_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_L(Test_BFu7s_BFu0i_L, "BFu7s_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_S  {
  unsigned short v1:7;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu7s_BFu0i_S) C1{ Fs:7 Fi:0 Fs}



static void Test_BFu7s_BFu0i_S()
{
  {
    init_simple_test("BFu7s_BFu0i_S");
    static BFu7s_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_S(Test_BFu7s_BFu0i_S, "BFu7s_BFu0i_S", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_Uc  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu7s_BFu0i_Uc) C1{ Fs:7 Fi:0 Fc}



static void Test_BFu7s_BFu0i_Uc()
{
  {
    init_simple_test("BFu7s_BFu0i_Uc");
    static BFu7s_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_Uc(Test_BFu7s_BFu0i_Uc, "BFu7s_BFu0i_Uc", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_Ui  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu7s_BFu0i_Ui) C1{ Fs:7 Fi:0 Fi}



static void Test_BFu7s_BFu0i_Ui()
{
  {
    init_simple_test("BFu7s_BFu0i_Ui");
    static BFu7s_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_Ui(Test_BFu7s_BFu0i_Ui, "BFu7s_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_Ul  {
  unsigned short v1:7;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu7s_BFu0i_Ul) C1{ Fs:7 Fi:0 FL}



static void Test_BFu7s_BFu0i_Ul()
{
  {
    init_simple_test("BFu7s_BFu0i_Ul");
    static BFu7s_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_Ul(Test_BFu7s_BFu0i_Ul, "BFu7s_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_Us  {
  unsigned short v1:7;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu7s_BFu0i_Us) C1{ Fs:7 Fi:0 Fs}



static void Test_BFu7s_BFu0i_Us()
{
  {
    init_simple_test("BFu7s_BFu0i_Us");
    static BFu7s_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu7s_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_Us(Test_BFu7s_BFu0i_Us, "BFu7s_BFu0i_Us", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0i_Vp  {
  unsigned short v1:7;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu7s_BFu0i_Vp) C1{ Fs:7 Fi:0 Fp}



static void Test_BFu7s_BFu0i_Vp()
{
  {
    init_simple_test("BFu7s_BFu0i_Vp");
    static BFu7s_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0i_Vp(Test_BFu7s_BFu0i_Vp, "BFu7s_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll  {
  unsigned short v1:7;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu0ll) C1{ Fs:7 FL:0}



static void Test_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu0ll");
    static BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll(Test_BFu7s_BFu0ll, "BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu0c  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu0ll_BFu0c) C1{ Fs:7 FL:0 Fc:0}



static void Test_BFu7s_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu0c");
    static BFu7s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu0c(Test_BFu7s_BFu0ll_BFu0c, "BFu7s_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu0i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu0ll_BFu0i) C1{ Fs:7 FL:0 Fi:0}



static void Test_BFu7s_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu0i");
    static BFu7s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu0i(Test_BFu7s_BFu0ll_BFu0i, "BFu7s_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu0ll_BFu0ll) C1{ Fs:7 FL:0 FL:0}



static void Test_BFu7s_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu0ll");
    static BFu7s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu0ll(Test_BFu7s_BFu0ll_BFu0ll, "BFu7s_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu0s  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu0ll_BFu0s) C1{ Fs:7 FL:0 Fs:0}



static void Test_BFu7s_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu0s");
    static BFu7s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu0s(Test_BFu7s_BFu0ll_BFu0s, "BFu7s_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu15i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7s_BFu0ll_BFu15i) C1{ Fs:7 FL:0 Fi:15}



static void Test_BFu7s_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu15i");
    static BFu7s_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu15i(Test_BFu7s_BFu0ll_BFu15i, "BFu7s_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu15ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7s_BFu0ll_BFu15ll) C1{ Fs:7 FL:0 FL:15}



static void Test_BFu7s_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu15ll");
    static BFu7s_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu15ll(Test_BFu7s_BFu0ll_BFu15ll, "BFu7s_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu15s  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7s_BFu0ll_BFu15s) C1{ Fs:7 FL:0 Fs:15}



static void Test_BFu7s_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu15s");
    static BFu7s_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu7s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu15s(Test_BFu7s_BFu0ll_BFu15s, "BFu7s_BFu0ll_BFu15s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu16i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7s_BFu0ll_BFu16i) C1{ Fs:7 FL:0 Fi:16}



static void Test_BFu7s_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu16i");
    static BFu7s_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu16i(Test_BFu7s_BFu0ll_BFu16i, "BFu7s_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu16ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7s_BFu0ll_BFu16ll) C1{ Fs:7 FL:0 FL:16}



static void Test_BFu7s_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu16ll");
    static BFu7s_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu16ll(Test_BFu7s_BFu0ll_BFu16ll, "BFu7s_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu16s  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7s_BFu0ll_BFu16s) C1{ Fs:7 FL:0 Fs:16}



static void Test_BFu7s_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu16s");
    static BFu7s_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu7s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu16s(Test_BFu7s_BFu0ll_BFu16s, "BFu7s_BFu0ll_BFu16s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu17i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7s_BFu0ll_BFu17i) C1{ Fs:7 FL:0 Fi:17}



static void Test_BFu7s_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu17i");
    static BFu7s_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu7s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu7s_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu17i(Test_BFu7s_BFu0ll_BFu17i, "BFu7s_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu17ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7s_BFu0ll_BFu17ll) C1{ Fs:7 FL:0 FL:17}



static void Test_BFu7s_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu17ll");
    static BFu7s_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu7s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu7s_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu17ll(Test_BFu7s_BFu0ll_BFu17ll, "BFu7s_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu1c  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7s_BFu0ll_BFu1c) C1{ Fs:7 FL:0 Fc:1}



static void Test_BFu7s_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu1c");
    static BFu7s_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7s_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu1c(Test_BFu7s_BFu0ll_BFu1c, "BFu7s_BFu0ll_BFu1c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu1i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7s_BFu0ll_BFu1i) C1{ Fs:7 FL:0 Fi:1}



static void Test_BFu7s_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu1i");
    static BFu7s_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7s_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu1i(Test_BFu7s_BFu0ll_BFu1i, "BFu7s_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu1ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7s_BFu0ll_BFu1ll) C1{ Fs:7 FL:0 FL:1}



static void Test_BFu7s_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu1ll");
    static BFu7s_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7s_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu1ll(Test_BFu7s_BFu0ll_BFu1ll, "BFu7s_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu1s  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7s_BFu0ll_BFu1s) C1{ Fs:7 FL:0 Fs:1}



static void Test_BFu7s_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu1s");
    static BFu7s_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu7s_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu1s(Test_BFu7s_BFu0ll_BFu1s, "BFu7s_BFu0ll_BFu1s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu31i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7s_BFu0ll_BFu31i) C1{ Fs:7 FL:0 Fi:31}



static void Test_BFu7s_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu31i");
    static BFu7s_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu7s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu7s_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu31i(Test_BFu7s_BFu0ll_BFu31i, "BFu7s_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu31ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7s_BFu0ll_BFu31ll) C1{ Fs:7 FL:0 FL:31}



static void Test_BFu7s_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu31ll");
    static BFu7s_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu7s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu7s_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu31ll(Test_BFu7s_BFu0ll_BFu31ll, "BFu7s_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu32i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7s_BFu0ll_BFu32i) C1{ Fs:7 FL:0 Fi:32}



static void Test_BFu7s_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu32i");
    static BFu7s_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu7s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu7s_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu32i(Test_BFu7s_BFu0ll_BFu32i, "BFu7s_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu32ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7s_BFu0ll_BFu32ll) C1{ Fs:7 FL:0 FL:32}



static void Test_BFu7s_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu32ll");
    static BFu7s_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu7s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu7s_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu32ll(Test_BFu7s_BFu0ll_BFu32ll, "BFu7s_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu33  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7s_BFu0ll_BFu33) C1{ Fs:7 FL:0 FL:33}



static void Test_BFu7s_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu33");
    static BFu7s_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu7s_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7s_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu33(Test_BFu7s_BFu0ll_BFu33, "BFu7s_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu7c  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7s_BFu0ll_BFu7c) C1{ Fs:7 FL:0 Fc:7}



static void Test_BFu7s_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu7c");
    static BFu7s_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu7c(Test_BFu7s_BFu0ll_BFu7c, "BFu7s_BFu0ll_BFu7c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu7i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7s_BFu0ll_BFu7i) C1{ Fs:7 FL:0 Fi:7}



static void Test_BFu7s_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu7i");
    static BFu7s_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu7i(Test_BFu7s_BFu0ll_BFu7i, "BFu7s_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu7ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7s_BFu0ll_BFu7ll) C1{ Fs:7 FL:0 FL:7}



static void Test_BFu7s_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu7ll");
    static BFu7s_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu7ll(Test_BFu7s_BFu0ll_BFu7ll, "BFu7s_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu7s  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7s_BFu0ll_BFu7s) C1{ Fs:7 FL:0 Fs:7}



static void Test_BFu7s_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu7s");
    static BFu7s_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu7s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu7s(Test_BFu7s_BFu0ll_BFu7s, "BFu7s_BFu0ll_BFu7s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu8c  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7s_BFu0ll_BFu8c) C1{ Fs:7 FL:0 Fc:8}



static void Test_BFu7s_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu8c");
    static BFu7s_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu8c(Test_BFu7s_BFu0ll_BFu8c, "BFu7s_BFu0ll_BFu8c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu8i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7s_BFu0ll_BFu8i) C1{ Fs:7 FL:0 Fi:8}



static void Test_BFu7s_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu8i");
    static BFu7s_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu8i(Test_BFu7s_BFu0ll_BFu8i, "BFu7s_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu8ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7s_BFu0ll_BFu8ll) C1{ Fs:7 FL:0 FL:8}



static void Test_BFu7s_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu8ll");
    static BFu7s_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu8ll(Test_BFu7s_BFu0ll_BFu8ll, "BFu7s_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu8s  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7s_BFu0ll_BFu8s) C1{ Fs:7 FL:0 Fs:8}



static void Test_BFu7s_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu8s");
    static BFu7s_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu7s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu8s(Test_BFu7s_BFu0ll_BFu8s, "BFu7s_BFu0ll_BFu8s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu9i  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7s_BFu0ll_BFu9i) C1{ Fs:7 FL:0 Fi:9}



static void Test_BFu7s_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu9i");
    static BFu7s_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu9i(Test_BFu7s_BFu0ll_BFu9i, "BFu7s_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu9ll  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7s_BFu0ll_BFu9ll) C1{ Fs:7 FL:0 FL:9}



static void Test_BFu7s_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu9ll");
    static BFu7s_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu9ll(Test_BFu7s_BFu0ll_BFu9ll, "BFu7s_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_BFu9s  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7s_BFu0ll_BFu9s) C1{ Fs:7 FL:0 Fs:9}



static void Test_BFu7s_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu0ll_BFu9s");
    static BFu7s_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu7s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_BFu9s(Test_BFu7s_BFu0ll_BFu9s, "BFu7s_BFu0ll_BFu9s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_C  {
  unsigned short v1:7;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu7s_BFu0ll_C) C1{ Fs:7 FL:0 Fc}



static void Test_BFu7s_BFu0ll_C()
{
  {
    init_simple_test("BFu7s_BFu0ll_C");
    static BFu7s_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_C(Test_BFu7s_BFu0ll_C, "BFu7s_BFu0ll_C", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_D  {
  unsigned short v1:7;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu7s_BFu0ll_D) C1{ Fs:7 FL:0 FL}



static void Test_BFu7s_BFu0ll_D()
{
  {
    init_simple_test("BFu7s_BFu0ll_D");
    static BFu7s_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_D(Test_BFu7s_BFu0ll_D, "BFu7s_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_F  {
  unsigned short v1:7;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu7s_BFu0ll_F) C1{ Fs:7 FL:0 Fi}



static void Test_BFu7s_BFu0ll_F()
{
  {
    init_simple_test("BFu7s_BFu0ll_F");
    static BFu7s_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_F(Test_BFu7s_BFu0ll_F, "BFu7s_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_I  {
  unsigned short v1:7;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu7s_BFu0ll_I) C1{ Fs:7 FL:0 Fi}



static void Test_BFu7s_BFu0ll_I()
{
  {
    init_simple_test("BFu7s_BFu0ll_I");
    static BFu7s_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_I(Test_BFu7s_BFu0ll_I, "BFu7s_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_Ip  {
  unsigned short v1:7;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu7s_BFu0ll_Ip) C1{ Fs:7 FL:0 Fp}



static void Test_BFu7s_BFu0ll_Ip()
{
  {
    init_simple_test("BFu7s_BFu0ll_Ip");
    static BFu7s_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_Ip(Test_BFu7s_BFu0ll_Ip, "BFu7s_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_L  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu7s_BFu0ll_L) C1{ Fs:7 FL:0 FL}



static void Test_BFu7s_BFu0ll_L()
{
  {
    init_simple_test("BFu7s_BFu0ll_L");
    static BFu7s_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_L(Test_BFu7s_BFu0ll_L, "BFu7s_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_S  {
  unsigned short v1:7;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu7s_BFu0ll_S) C1{ Fs:7 FL:0 Fs}



static void Test_BFu7s_BFu0ll_S()
{
  {
    init_simple_test("BFu7s_BFu0ll_S");
    static BFu7s_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_S(Test_BFu7s_BFu0ll_S, "BFu7s_BFu0ll_S", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_Uc  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu7s_BFu0ll_Uc) C1{ Fs:7 FL:0 Fc}



static void Test_BFu7s_BFu0ll_Uc()
{
  {
    init_simple_test("BFu7s_BFu0ll_Uc");
    static BFu7s_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_Uc(Test_BFu7s_BFu0ll_Uc, "BFu7s_BFu0ll_Uc", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_Ui  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu7s_BFu0ll_Ui) C1{ Fs:7 FL:0 Fi}



static void Test_BFu7s_BFu0ll_Ui()
{
  {
    init_simple_test("BFu7s_BFu0ll_Ui");
    static BFu7s_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu7s_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_Ui(Test_BFu7s_BFu0ll_Ui, "BFu7s_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_Ul  {
  unsigned short v1:7;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu7s_BFu0ll_Ul) C1{ Fs:7 FL:0 FL}



static void Test_BFu7s_BFu0ll_Ul()
{
  {
    init_simple_test("BFu7s_BFu0ll_Ul");
    static BFu7s_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_Ul(Test_BFu7s_BFu0ll_Ul, "BFu7s_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_Us  {
  unsigned short v1:7;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu7s_BFu0ll_Us) C1{ Fs:7 FL:0 Fs}



static void Test_BFu7s_BFu0ll_Us()
{
  {
    init_simple_test("BFu7s_BFu0ll_Us");
    static BFu7s_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu7s_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_Us(Test_BFu7s_BFu0ll_Us, "BFu7s_BFu0ll_Us", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0ll_Vp  {
  unsigned short v1:7;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu7s_BFu0ll_Vp) C1{ Fs:7 FL:0 Fp}



static void Test_BFu7s_BFu0ll_Vp()
{
  {
    init_simple_test("BFu7s_BFu0ll_Vp");
    static BFu7s_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0ll_Vp(Test_BFu7s_BFu0ll_Vp, "BFu7s_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s  {
  unsigned short v1:7;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu0s) C1{ Fs:7 Fs:0}



static void Test_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu0s");
    static BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s(Test_BFu7s_BFu0s, "BFu7s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu0c  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu0s_BFu0c) C1{ Fs:7 Fs:0 Fc:0}



static void Test_BFu7s_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu0c");
    static BFu7s_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu0c(Test_BFu7s_BFu0s_BFu0c, "BFu7s_BFu0s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu0i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu0s_BFu0i) C1{ Fs:7 Fs:0 Fi:0}



static void Test_BFu7s_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu0i");
    static BFu7s_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu0i(Test_BFu7s_BFu0s_BFu0i, "BFu7s_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu0ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu0s_BFu0ll) C1{ Fs:7 Fs:0 FL:0}



static void Test_BFu7s_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu0ll");
    static BFu7s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu0ll(Test_BFu7s_BFu0s_BFu0ll, "BFu7s_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu0s  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu0s_BFu0s) C1{ Fs:7 Fs:0 Fs:0}



static void Test_BFu7s_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu0s");
    static BFu7s_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu0s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu0s(Test_BFu7s_BFu0s_BFu0s, "BFu7s_BFu0s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu15i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu7s_BFu0s_BFu15i) C1{ Fs:7 Fs:0 Fi:15}



static void Test_BFu7s_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu15i");
    static BFu7s_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu15i(Test_BFu7s_BFu0s_BFu15i, "BFu7s_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu15ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu7s_BFu0s_BFu15ll) C1{ Fs:7 Fs:0 FL:15}



static void Test_BFu7s_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu15ll");
    static BFu7s_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu15ll(Test_BFu7s_BFu0s_BFu15ll, "BFu7s_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu15s  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu7s_BFu0s_BFu15s) C1{ Fs:7 Fs:0 Fs:15}



static void Test_BFu7s_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu15s");
    static BFu7s_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu15s(Test_BFu7s_BFu0s_BFu15s, "BFu7s_BFu0s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu16i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu7s_BFu0s_BFu16i) C1{ Fs:7 Fs:0 Fi:16}



static void Test_BFu7s_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu16i");
    static BFu7s_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu16i(Test_BFu7s_BFu0s_BFu16i, "BFu7s_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu16ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu7s_BFu0s_BFu16ll) C1{ Fs:7 Fs:0 FL:16}



static void Test_BFu7s_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu16ll");
    static BFu7s_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu16ll(Test_BFu7s_BFu0s_BFu16ll, "BFu7s_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu16s  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu7s_BFu0s_BFu16s) C1{ Fs:7 Fs:0 Fs:16}



static void Test_BFu7s_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu16s");
    static BFu7s_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu16s(Test_BFu7s_BFu0s_BFu16s, "BFu7s_BFu0s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu17i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu7s_BFu0s_BFu17i) C1{ Fs:7 Fs:0 Fi:17}



static void Test_BFu7s_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu17i");
    static BFu7s_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu7s_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu17i(Test_BFu7s_BFu0s_BFu17i, "BFu7s_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu17ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu7s_BFu0s_BFu17ll) C1{ Fs:7 Fs:0 FL:17}



static void Test_BFu7s_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu17ll");
    static BFu7s_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu7s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu7s_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu17ll(Test_BFu7s_BFu0s_BFu17ll, "BFu7s_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu1c  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu7s_BFu0s_BFu1c) C1{ Fs:7 Fs:0 Fc:1}



static void Test_BFu7s_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu1c");
    static BFu7s_BFu0s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7s_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu1c(Test_BFu7s_BFu0s_BFu1c, "BFu7s_BFu0s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu1i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu7s_BFu0s_BFu1i) C1{ Fs:7 Fs:0 Fi:1}



static void Test_BFu7s_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu1i");
    static BFu7s_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7s_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu1i(Test_BFu7s_BFu0s_BFu1i, "BFu7s_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu1ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu7s_BFu0s_BFu1ll) C1{ Fs:7 Fs:0 FL:1}



static void Test_BFu7s_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu1ll");
    static BFu7s_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7s_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu1ll(Test_BFu7s_BFu0s_BFu1ll, "BFu7s_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu1s  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu7s_BFu0s_BFu1s) C1{ Fs:7 Fs:0 Fs:1}



static void Test_BFu7s_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu1s");
    static BFu7s_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu7s_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu1s(Test_BFu7s_BFu0s_BFu1s, "BFu7s_BFu0s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu31i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu7s_BFu0s_BFu31i) C1{ Fs:7 Fs:0 Fi:31}



static void Test_BFu7s_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu31i");
    static BFu7s_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu31i(Test_BFu7s_BFu0s_BFu31i, "BFu7s_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu31ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu7s_BFu0s_BFu31ll) C1{ Fs:7 Fs:0 FL:31}



static void Test_BFu7s_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu31ll");
    static BFu7s_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu7s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu31ll(Test_BFu7s_BFu0s_BFu31ll, "BFu7s_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu32i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu7s_BFu0s_BFu32i) C1{ Fs:7 Fs:0 Fi:32}



static void Test_BFu7s_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu32i");
    static BFu7s_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu32i(Test_BFu7s_BFu0s_BFu32i, "BFu7s_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu32ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu7s_BFu0s_BFu32ll) C1{ Fs:7 Fs:0 FL:32}



static void Test_BFu7s_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu32ll");
    static BFu7s_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu7s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu32ll(Test_BFu7s_BFu0s_BFu32ll, "BFu7s_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu33  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu7s_BFu0s_BFu33) C1{ Fs:7 Fs:0 FL:33}



static void Test_BFu7s_BFu0s_BFu33()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu33");
    static BFu7s_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu7s_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu7s_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu33(Test_BFu7s_BFu0s_BFu33, "BFu7s_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu7c  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu7s_BFu0s_BFu7c) C1{ Fs:7 Fs:0 Fc:7}



static void Test_BFu7s_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu7c");
    static BFu7s_BFu0s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7s_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu7c(Test_BFu7s_BFu0s_BFu7c, "BFu7s_BFu0s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu7i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu7s_BFu0s_BFu7i) C1{ Fs:7 Fs:0 Fi:7}



static void Test_BFu7s_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu7i");
    static BFu7s_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7s_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu7i(Test_BFu7s_BFu0s_BFu7i, "BFu7s_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu7ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu7s_BFu0s_BFu7ll) C1{ Fs:7 Fs:0 FL:7}



static void Test_BFu7s_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu7ll");
    static BFu7s_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu7ll(Test_BFu7s_BFu0s_BFu7ll, "BFu7s_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu7s  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu7s_BFu0s_BFu7s) C1{ Fs:7 Fs:0 Fs:7}



static void Test_BFu7s_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu7s");
    static BFu7s_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu7s_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu7s(Test_BFu7s_BFu0s_BFu7s, "BFu7s_BFu0s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu8c  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu7s_BFu0s_BFu8c) C1{ Fs:7 Fs:0 Fc:8}



static void Test_BFu7s_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu8c");
    static BFu7s_BFu0s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7s_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu8c(Test_BFu7s_BFu0s_BFu8c, "BFu7s_BFu0s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu8i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu7s_BFu0s_BFu8i) C1{ Fs:7 Fs:0 Fi:8}



static void Test_BFu7s_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu8i");
    static BFu7s_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7s_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu8i(Test_BFu7s_BFu0s_BFu8i, "BFu7s_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu8ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu7s_BFu0s_BFu8ll) C1{ Fs:7 Fs:0 FL:8}



static void Test_BFu7s_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu8ll");
    static BFu7s_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu8ll(Test_BFu7s_BFu0s_BFu8ll, "BFu7s_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu8s  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu7s_BFu0s_BFu8s) C1{ Fs:7 Fs:0 Fs:8}



static void Test_BFu7s_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu8s");
    static BFu7s_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu7s_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu8s(Test_BFu7s_BFu0s_BFu8s, "BFu7s_BFu0s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu9i  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu7s_BFu0s_BFu9i) C1{ Fs:7 Fs:0 Fi:9}



static void Test_BFu7s_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu9i");
    static BFu7s_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7s_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu9i(Test_BFu7s_BFu0s_BFu9i, "BFu7s_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu9ll  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu7s_BFu0s_BFu9ll) C1{ Fs:7 Fs:0 FL:9}



static void Test_BFu7s_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu9ll");
    static BFu7s_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu9ll(Test_BFu7s_BFu0s_BFu9ll, "BFu7s_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_BFu9s  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu7s_BFu0s_BFu9s) C1{ Fs:7 Fs:0 Fs:9}



static void Test_BFu7s_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu7s_BFu0s_BFu9s");
    static BFu7s_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu7s_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu7s_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_BFu9s(Test_BFu7s_BFu0s_BFu9s, "BFu7s_BFu0s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_C  {
  unsigned short v1:7;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu7s_BFu0s_C) C1{ Fs:7 Fs:0 Fc}



static void Test_BFu7s_BFu0s_C()
{
  {
    init_simple_test("BFu7s_BFu0s_C");
    static BFu7s_BFu0s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu7s_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_C(Test_BFu7s_BFu0s_C, "BFu7s_BFu0s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_D  {
  unsigned short v1:7;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu7s_BFu0s_D) C1{ Fs:7 Fs:0 FL}



static void Test_BFu7s_BFu0s_D()
{
  {
    init_simple_test("BFu7s_BFu0s_D");
    static BFu7s_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_D(Test_BFu7s_BFu0s_D, "BFu7s_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_F  {
  unsigned short v1:7;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu7s_BFu0s_F) C1{ Fs:7 Fs:0 Fi}



static void Test_BFu7s_BFu0s_F()
{
  {
    init_simple_test("BFu7s_BFu0s_F");
    static BFu7s_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_F(Test_BFu7s_BFu0s_F, "BFu7s_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_I  {
  unsigned short v1:7;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu7s_BFu0s_I) C1{ Fs:7 Fs:0 Fi}



static void Test_BFu7s_BFu0s_I()
{
  {
    init_simple_test("BFu7s_BFu0s_I");
    static BFu7s_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_I(Test_BFu7s_BFu0s_I, "BFu7s_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_Ip  {
  unsigned short v1:7;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu7s_BFu0s_Ip) C1{ Fs:7 Fs:0 Fp}



static void Test_BFu7s_BFu0s_Ip()
{
  {
    init_simple_test("BFu7s_BFu0s_Ip");
    static BFu7s_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_Ip(Test_BFu7s_BFu0s_Ip, "BFu7s_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_L  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu7s_BFu0s_L) C1{ Fs:7 Fs:0 FL}



static void Test_BFu7s_BFu0s_L()
{
  {
    init_simple_test("BFu7s_BFu0s_L");
    static BFu7s_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_L(Test_BFu7s_BFu0s_L, "BFu7s_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_S  {
  unsigned short v1:7;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu7s_BFu0s_S) C1{ Fs:7 Fs:0 Fs}



static void Test_BFu7s_BFu0s_S()
{
  {
    init_simple_test("BFu7s_BFu0s_S");
    static BFu7s_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu7s_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_S(Test_BFu7s_BFu0s_S, "BFu7s_BFu0s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_Uc  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu7s_BFu0s_Uc) C1{ Fs:7 Fs:0 Fc}



static void Test_BFu7s_BFu0s_Uc()
{
  {
    init_simple_test("BFu7s_BFu0s_Uc");
    static BFu7s_BFu0s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu7s_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_Uc(Test_BFu7s_BFu0s_Uc, "BFu7s_BFu0s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_Ui  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu7s_BFu0s_Ui) C1{ Fs:7 Fs:0 Fi}



static void Test_BFu7s_BFu0s_Ui()
{
  {
    init_simple_test("BFu7s_BFu0s_Ui");
    static BFu7s_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu7s_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_Ui(Test_BFu7s_BFu0s_Ui, "BFu7s_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_Ul  {
  unsigned short v1:7;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu7s_BFu0s_Ul) C1{ Fs:7 Fs:0 FL}



static void Test_BFu7s_BFu0s_Ul()
{
  {
    init_simple_test("BFu7s_BFu0s_Ul");
    static BFu7s_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_Ul(Test_BFu7s_BFu0s_Ul, "BFu7s_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_Us  {
  unsigned short v1:7;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu7s_BFu0s_Us) C1{ Fs:7 Fs:0 Fs}



static void Test_BFu7s_BFu0s_Us()
{
  {
    init_simple_test("BFu7s_BFu0s_Us");
    static BFu7s_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu7s_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_Us(Test_BFu7s_BFu0s_Us, "BFu7s_BFu0s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu0s_Vp  {
  unsigned short v1:7;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu7s_BFu0s_Vp) C1{ Fs:7 Fs:0 Fp}



static void Test_BFu7s_BFu0s_Vp()
{
  {
    init_simple_test("BFu7s_BFu0s_Vp");
    static BFu7s_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu0s_Vp(Test_BFu7s_BFu0s_Vp, "BFu7s_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15i_BFu0c  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu15i_BFu0c) C1{ Fs:7 Fi:15 Fc:0}



static void Test_BFu7s_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu0c");
    static BFu7s_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15i_BFu0c(Test_BFu7s_BFu15i_BFu0c, "BFu7s_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15i_BFu0i  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu15i_BFu0i) C1{ Fs:7 Fi:15 Fi:0}



static void Test_BFu7s_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu0i");
    static BFu7s_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15i_BFu0i(Test_BFu7s_BFu15i_BFu0i, "BFu7s_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15i_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu15i_BFu0ll) C1{ Fs:7 Fi:15 FL:0}



static void Test_BFu7s_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu0ll");
    static BFu7s_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15i_BFu0ll(Test_BFu7s_BFu15i_BFu0ll, "BFu7s_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15i_BFu0s  {
  unsigned short v1:7;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu15i_BFu0s) C1{ Fs:7 Fi:15 Fs:0}



static void Test_BFu7s_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu15i_BFu0s");
    static BFu7s_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15i_BFu0s(Test_BFu7s_BFu15i_BFu0s, "BFu7s_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15ll_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu15ll_BFu0c) C1{ Fs:7 FL:15 Fc:0}



static void Test_BFu7s_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu0c");
    static BFu7s_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15ll_BFu0c(Test_BFu7s_BFu15ll_BFu0c, "BFu7s_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15ll_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu15ll_BFu0i) C1{ Fs:7 FL:15 Fi:0}



static void Test_BFu7s_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu0i");
    static BFu7s_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15ll_BFu0i(Test_BFu7s_BFu15ll_BFu0i, "BFu7s_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu15ll_BFu0ll) C1{ Fs:7 FL:15 FL:0}



static void Test_BFu7s_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu0ll");
    static BFu7s_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15ll_BFu0ll(Test_BFu7s_BFu15ll_BFu0ll, "BFu7s_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15ll_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu15ll_BFu0s) C1{ Fs:7 FL:15 Fs:0}



static void Test_BFu7s_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu15ll_BFu0s");
    static BFu7s_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7s_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15ll_BFu0s(Test_BFu7s_BFu15ll_BFu0s, "BFu7s_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15s_BFu0c  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu15s_BFu0c) C1{ Fs:7 Fs:15 Fc:0}



static void Test_BFu7s_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu0c");
    static BFu7s_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15s_BFu0c(Test_BFu7s_BFu15s_BFu0c, "BFu7s_BFu15s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15s_BFu0i  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu15s_BFu0i) C1{ Fs:7 Fs:15 Fi:0}



static void Test_BFu7s_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu0i");
    static BFu7s_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15s_BFu0i(Test_BFu7s_BFu15s_BFu0i, "BFu7s_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15s_BFu0ll  {
  unsigned short v1:7;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu15s_BFu0ll) C1{ Fs:7 Fs:15 FL:0}



static void Test_BFu7s_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu0ll");
    static BFu7s_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15s_BFu0ll(Test_BFu7s_BFu15s_BFu0ll, "BFu7s_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu15s_BFu0s  {
  unsigned short v1:7;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu15s_BFu0s) C1{ Fs:7 Fs:15 Fs:0}



static void Test_BFu7s_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu15s_BFu0s");
    static BFu7s_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7s_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7s_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu15s_BFu0s(Test_BFu7s_BFu15s_BFu0s, "BFu7s_BFu15s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16i_BFu0c  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu16i_BFu0c) C1{ Fs:7 Fi:16 Fc:0}



static void Test_BFu7s_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu0c");
    static BFu7s_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16i_BFu0c(Test_BFu7s_BFu16i_BFu0c, "BFu7s_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16i_BFu0i  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu16i_BFu0i) C1{ Fs:7 Fi:16 Fi:0}



static void Test_BFu7s_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu0i");
    static BFu7s_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16i_BFu0i(Test_BFu7s_BFu16i_BFu0i, "BFu7s_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16i_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu16i_BFu0ll) C1{ Fs:7 Fi:16 FL:0}



static void Test_BFu7s_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu0ll");
    static BFu7s_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16i_BFu0ll(Test_BFu7s_BFu16i_BFu0ll, "BFu7s_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16i_BFu0s  {
  unsigned short v1:7;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu16i_BFu0s) C1{ Fs:7 Fi:16 Fs:0}



static void Test_BFu7s_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu16i_BFu0s");
    static BFu7s_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16i_BFu0s(Test_BFu7s_BFu16i_BFu0s, "BFu7s_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16ll_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu16ll_BFu0c) C1{ Fs:7 FL:16 Fc:0}



static void Test_BFu7s_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu0c");
    static BFu7s_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16ll_BFu0c(Test_BFu7s_BFu16ll_BFu0c, "BFu7s_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16ll_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu16ll_BFu0i) C1{ Fs:7 FL:16 Fi:0}



static void Test_BFu7s_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu0i");
    static BFu7s_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16ll_BFu0i(Test_BFu7s_BFu16ll_BFu0i, "BFu7s_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu16ll_BFu0ll) C1{ Fs:7 FL:16 FL:0}



static void Test_BFu7s_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu0ll");
    static BFu7s_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16ll_BFu0ll(Test_BFu7s_BFu16ll_BFu0ll, "BFu7s_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16ll_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu16ll_BFu0s) C1{ Fs:7 FL:16 Fs:0}



static void Test_BFu7s_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu16ll_BFu0s");
    static BFu7s_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7s_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16ll_BFu0s(Test_BFu7s_BFu16ll_BFu0s, "BFu7s_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16s_BFu0c  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu16s_BFu0c) C1{ Fs:7 Fs:16 Fc:0}



static void Test_BFu7s_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu0c");
    static BFu7s_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16s_BFu0c(Test_BFu7s_BFu16s_BFu0c, "BFu7s_BFu16s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16s_BFu0i  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu16s_BFu0i) C1{ Fs:7 Fs:16 Fi:0}



static void Test_BFu7s_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu0i");
    static BFu7s_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16s_BFu0i(Test_BFu7s_BFu16s_BFu0i, "BFu7s_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16s_BFu0ll  {
  unsigned short v1:7;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu16s_BFu0ll) C1{ Fs:7 Fs:16 FL:0}



static void Test_BFu7s_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu0ll");
    static BFu7s_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16s_BFu0ll(Test_BFu7s_BFu16s_BFu0ll, "BFu7s_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu16s_BFu0s  {
  unsigned short v1:7;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu16s_BFu0s) C1{ Fs:7 Fs:16 Fs:0}



static void Test_BFu7s_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu16s_BFu0s");
    static BFu7s_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7s_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7s_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu16s_BFu0s(Test_BFu7s_BFu16s_BFu0s, "BFu7s_BFu16s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu17i_BFu0c  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu17i_BFu0c) C1{ Fs:7 Fi:17 Fc:0}



static void Test_BFu7s_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu0c");
    static BFu7s_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu17i_BFu0c(Test_BFu7s_BFu17i_BFu0c, "BFu7s_BFu17i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu17i_BFu0i  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu17i_BFu0i) C1{ Fs:7 Fi:17 Fi:0}



static void Test_BFu7s_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu0i");
    static BFu7s_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu17i_BFu0i(Test_BFu7s_BFu17i_BFu0i, "BFu7s_BFu17i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu17i_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu17i_BFu0ll) C1{ Fs:7 Fi:17 FL:0}



static void Test_BFu7s_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu0ll");
    static BFu7s_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu17i_BFu0ll(Test_BFu7s_BFu17i_BFu0ll, "BFu7s_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu17i_BFu0s  {
  unsigned short v1:7;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu17i_BFu0s) C1{ Fs:7 Fi:17 Fs:0}



static void Test_BFu7s_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu17i_BFu0s");
    static BFu7s_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu17i_BFu0s(Test_BFu7s_BFu17i_BFu0s, "BFu7s_BFu17i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu17ll_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu17ll_BFu0c) C1{ Fs:7 FL:17 Fc:0}



static void Test_BFu7s_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu0c");
    static BFu7s_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu17ll_BFu0c(Test_BFu7s_BFu17ll_BFu0c, "BFu7s_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu17ll_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu17ll_BFu0i) C1{ Fs:7 FL:17 Fi:0}



static void Test_BFu7s_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu0i");
    static BFu7s_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu17ll_BFu0i(Test_BFu7s_BFu17ll_BFu0i, "BFu7s_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu17ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu17ll_BFu0ll) C1{ Fs:7 FL:17 FL:0}



static void Test_BFu7s_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu0ll");
    static BFu7s_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu17ll_BFu0ll(Test_BFu7s_BFu17ll_BFu0ll, "BFu7s_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu17ll_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu17ll_BFu0s) C1{ Fs:7 FL:17 Fs:0}



static void Test_BFu7s_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu17ll_BFu0s");
    static BFu7s_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7s_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu17ll_BFu0s(Test_BFu7s_BFu17ll_BFu0s, "BFu7s_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1c_BFu0c  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu1c_BFu0c) C1{ Fs:7 Fc:1 Fc:0}



static void Test_BFu7s_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu0c");
    static BFu7s_BFu1c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1c_BFu0c(Test_BFu7s_BFu1c_BFu0c, "BFu7s_BFu1c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1c_BFu0i  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu1c_BFu0i) C1{ Fs:7 Fc:1 Fi:0}



static void Test_BFu7s_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu0i");
    static BFu7s_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1c_BFu0i(Test_BFu7s_BFu1c_BFu0i, "BFu7s_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1c_BFu0ll  {
  unsigned short v1:7;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu1c_BFu0ll) C1{ Fs:7 Fc:1 FL:0}



static void Test_BFu7s_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu0ll");
    static BFu7s_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1c_BFu0ll(Test_BFu7s_BFu1c_BFu0ll, "BFu7s_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1c_BFu0s  {
  unsigned short v1:7;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu1c_BFu0s) C1{ Fs:7 Fc:1 Fs:0}



static void Test_BFu7s_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu1c_BFu0s");
    static BFu7s_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1c_BFu0s(Test_BFu7s_BFu1c_BFu0s, "BFu7s_BFu1c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1i_BFu0c  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu1i_BFu0c) C1{ Fs:7 Fi:1 Fc:0}



static void Test_BFu7s_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu0c");
    static BFu7s_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1i_BFu0c(Test_BFu7s_BFu1i_BFu0c, "BFu7s_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1i_BFu0i  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu1i_BFu0i) C1{ Fs:7 Fi:1 Fi:0}



static void Test_BFu7s_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu0i");
    static BFu7s_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1i_BFu0i(Test_BFu7s_BFu1i_BFu0i, "BFu7s_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1i_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu1i_BFu0ll) C1{ Fs:7 Fi:1 FL:0}



static void Test_BFu7s_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu0ll");
    static BFu7s_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1i_BFu0ll(Test_BFu7s_BFu1i_BFu0ll, "BFu7s_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1i_BFu0s  {
  unsigned short v1:7;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu1i_BFu0s) C1{ Fs:7 Fi:1 Fs:0}



static void Test_BFu7s_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu1i_BFu0s");
    static BFu7s_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1i_BFu0s(Test_BFu7s_BFu1i_BFu0s, "BFu7s_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1ll_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu1ll_BFu0c) C1{ Fs:7 FL:1 Fc:0}



static void Test_BFu7s_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu0c");
    static BFu7s_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1ll_BFu0c(Test_BFu7s_BFu1ll_BFu0c, "BFu7s_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1ll_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu1ll_BFu0i) C1{ Fs:7 FL:1 Fi:0}



static void Test_BFu7s_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu0i");
    static BFu7s_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1ll_BFu0i(Test_BFu7s_BFu1ll_BFu0i, "BFu7s_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu1ll_BFu0ll) C1{ Fs:7 FL:1 FL:0}



static void Test_BFu7s_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu0ll");
    static BFu7s_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1ll_BFu0ll(Test_BFu7s_BFu1ll_BFu0ll, "BFu7s_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1ll_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu1ll_BFu0s) C1{ Fs:7 FL:1 Fs:0}



static void Test_BFu7s_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu1ll_BFu0s");
    static BFu7s_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1ll_BFu0s(Test_BFu7s_BFu1ll_BFu0s, "BFu7s_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1s_BFu0c  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu1s_BFu0c) C1{ Fs:7 Fs:1 Fc:0}



static void Test_BFu7s_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu0c");
    static BFu7s_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1s_BFu0c(Test_BFu7s_BFu1s_BFu0c, "BFu7s_BFu1s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1s_BFu0i  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu1s_BFu0i) C1{ Fs:7 Fs:1 Fi:0}



static void Test_BFu7s_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu0i");
    static BFu7s_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1s_BFu0i(Test_BFu7s_BFu1s_BFu0i, "BFu7s_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1s_BFu0ll  {
  unsigned short v1:7;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu1s_BFu0ll) C1{ Fs:7 Fs:1 FL:0}



static void Test_BFu7s_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu0ll");
    static BFu7s_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1s_BFu0ll(Test_BFu7s_BFu1s_BFu0ll, "BFu7s_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu1s_BFu0s  {
  unsigned short v1:7;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu1s_BFu0s) C1{ Fs:7 Fs:1 Fs:0}



static void Test_BFu7s_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu1s_BFu0s");
    static BFu7s_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7s_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu1s_BFu0s(Test_BFu7s_BFu1s_BFu0s, "BFu7s_BFu1s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu31i_BFu0c  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu31i_BFu0c) C1{ Fs:7 Fi:31 Fc:0}



static void Test_BFu7s_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu0c");
    static BFu7s_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu31i_BFu0c(Test_BFu7s_BFu31i_BFu0c, "BFu7s_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu31i_BFu0i  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu31i_BFu0i) C1{ Fs:7 Fi:31 Fi:0}



static void Test_BFu7s_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu0i");
    static BFu7s_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu31i_BFu0i(Test_BFu7s_BFu31i_BFu0i, "BFu7s_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu31i_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu31i_BFu0ll) C1{ Fs:7 Fi:31 FL:0}



static void Test_BFu7s_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu0ll");
    static BFu7s_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu31i_BFu0ll(Test_BFu7s_BFu31i_BFu0ll, "BFu7s_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu31i_BFu0s  {
  unsigned short v1:7;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu31i_BFu0s) C1{ Fs:7 Fi:31 Fs:0}



static void Test_BFu7s_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu31i_BFu0s");
    static BFu7s_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7s_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7s_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu31i_BFu0s(Test_BFu7s_BFu31i_BFu0s, "BFu7s_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu31ll_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu31ll_BFu0c) C1{ Fs:7 FL:31 Fc:0}



static void Test_BFu7s_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu0c");
    static BFu7s_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu31ll_BFu0c(Test_BFu7s_BFu31ll_BFu0c, "BFu7s_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu31ll_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu31ll_BFu0i) C1{ Fs:7 FL:31 Fi:0}



static void Test_BFu7s_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu0i");
    static BFu7s_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu31ll_BFu0i(Test_BFu7s_BFu31ll_BFu0i, "BFu7s_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu31ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu31ll_BFu0ll) C1{ Fs:7 FL:31 FL:0}



static void Test_BFu7s_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu0ll");
    static BFu7s_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu31ll_BFu0ll(Test_BFu7s_BFu31ll_BFu0ll, "BFu7s_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu31ll_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu31ll_BFu0s) C1{ Fs:7 FL:31 Fs:0}



static void Test_BFu7s_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu31ll_BFu0s");
    static BFu7s_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7s_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu31ll_BFu0s(Test_BFu7s_BFu31ll_BFu0s, "BFu7s_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu32i_BFu0c  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu32i_BFu0c) C1{ Fs:7 Fi:32 Fc:0}



static void Test_BFu7s_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu0c");
    static BFu7s_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu32i_BFu0c(Test_BFu7s_BFu32i_BFu0c, "BFu7s_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu32i_BFu0i  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu32i_BFu0i) C1{ Fs:7 Fi:32 Fi:0}



static void Test_BFu7s_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu0i");
    static BFu7s_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu32i_BFu0i(Test_BFu7s_BFu32i_BFu0i, "BFu7s_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu32i_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu32i_BFu0ll) C1{ Fs:7 Fi:32 FL:0}



static void Test_BFu7s_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu0ll");
    static BFu7s_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu32i_BFu0ll(Test_BFu7s_BFu32i_BFu0ll, "BFu7s_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu32i_BFu0s  {
  unsigned short v1:7;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu32i_BFu0s) C1{ Fs:7 Fi:32 Fs:0}



static void Test_BFu7s_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu32i_BFu0s");
    static BFu7s_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7s_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7s_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu32i_BFu0s(Test_BFu7s_BFu32i_BFu0s, "BFu7s_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu32ll_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu32ll_BFu0c) C1{ Fs:7 FL:32 Fc:0}



static void Test_BFu7s_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu0c");
    static BFu7s_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu32ll_BFu0c(Test_BFu7s_BFu32ll_BFu0c, "BFu7s_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu32ll_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu32ll_BFu0i) C1{ Fs:7 FL:32 Fi:0}



static void Test_BFu7s_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu0i");
    static BFu7s_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu32ll_BFu0i(Test_BFu7s_BFu32ll_BFu0i, "BFu7s_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu32ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu32ll_BFu0ll) C1{ Fs:7 FL:32 FL:0}



static void Test_BFu7s_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu0ll");
    static BFu7s_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu32ll_BFu0ll(Test_BFu7s_BFu32ll_BFu0ll, "BFu7s_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu32ll_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu32ll_BFu0s) C1{ Fs:7 FL:32 Fs:0}



static void Test_BFu7s_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu32ll_BFu0s");
    static BFu7s_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7s_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu32ll_BFu0s(Test_BFu7s_BFu32ll_BFu0s, "BFu7s_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu33_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu33_BFu0c) C1{ Fs:7 FL:33 Fc:0}



static void Test_BFu7s_BFu33_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu33_BFu0c");
    static BFu7s_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu33_BFu0c(Test_BFu7s_BFu33_BFu0c, "BFu7s_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu33_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu33_BFu0i) C1{ Fs:7 FL:33 Fi:0}



static void Test_BFu7s_BFu33_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu33_BFu0i");
    static BFu7s_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu33_BFu0i(Test_BFu7s_BFu33_BFu0i, "BFu7s_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu33_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu33_BFu0ll) C1{ Fs:7 FL:33 FL:0}



static void Test_BFu7s_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu33_BFu0ll");
    static BFu7s_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu33_BFu0ll(Test_BFu7s_BFu33_BFu0ll, "BFu7s_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu33_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu33_BFu0s) C1{ Fs:7 FL:33 Fs:0}



static void Test_BFu7s_BFu33_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu33_BFu0s");
    static BFu7s_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7s_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7s_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu33_BFu0s(Test_BFu7s_BFu33_BFu0s, "BFu7s_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7c_BFu0c  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu7c_BFu0c) C1{ Fs:7 Fc:7 Fc:0}



static void Test_BFu7s_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu0c");
    static BFu7s_BFu7c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7c_BFu0c(Test_BFu7s_BFu7c_BFu0c, "BFu7s_BFu7c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7c_BFu0i  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu7c_BFu0i) C1{ Fs:7 Fc:7 Fi:0}



static void Test_BFu7s_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu0i");
    static BFu7s_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7c_BFu0i(Test_BFu7s_BFu7c_BFu0i, "BFu7s_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7c_BFu0ll  {
  unsigned short v1:7;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu7c_BFu0ll) C1{ Fs:7 Fc:7 FL:0}



static void Test_BFu7s_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu0ll");
    static BFu7s_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7c_BFu0ll(Test_BFu7s_BFu7c_BFu0ll, "BFu7s_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7c_BFu0s  {
  unsigned short v1:7;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu7c_BFu0s) C1{ Fs:7 Fc:7 Fs:0}



static void Test_BFu7s_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu7c_BFu0s");
    static BFu7s_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7s_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7c_BFu0s(Test_BFu7s_BFu7c_BFu0s, "BFu7s_BFu7c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7i_BFu0c  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu7i_BFu0c) C1{ Fs:7 Fi:7 Fc:0}



static void Test_BFu7s_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu0c");
    static BFu7s_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7i_BFu0c(Test_BFu7s_BFu7i_BFu0c, "BFu7s_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7i_BFu0i  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu7i_BFu0i) C1{ Fs:7 Fi:7 Fi:0}



static void Test_BFu7s_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu0i");
    static BFu7s_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7i_BFu0i(Test_BFu7s_BFu7i_BFu0i, "BFu7s_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7i_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu7i_BFu0ll) C1{ Fs:7 Fi:7 FL:0}



static void Test_BFu7s_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu0ll");
    static BFu7s_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7i_BFu0ll(Test_BFu7s_BFu7i_BFu0ll, "BFu7s_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7i_BFu0s  {
  unsigned short v1:7;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu7i_BFu0s) C1{ Fs:7 Fi:7 Fs:0}



static void Test_BFu7s_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu7i_BFu0s");
    static BFu7s_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7i_BFu0s(Test_BFu7s_BFu7i_BFu0s, "BFu7s_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7ll_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu7ll_BFu0c) C1{ Fs:7 FL:7 Fc:0}



static void Test_BFu7s_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu0c");
    static BFu7s_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7ll_BFu0c(Test_BFu7s_BFu7ll_BFu0c, "BFu7s_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7ll_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu7ll_BFu0i) C1{ Fs:7 FL:7 Fi:0}



static void Test_BFu7s_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu0i");
    static BFu7s_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7ll_BFu0i(Test_BFu7s_BFu7ll_BFu0i, "BFu7s_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu7ll_BFu0ll) C1{ Fs:7 FL:7 FL:0}



static void Test_BFu7s_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu0ll");
    static BFu7s_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7ll_BFu0ll(Test_BFu7s_BFu7ll_BFu0ll, "BFu7s_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7ll_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu7ll_BFu0s) C1{ Fs:7 FL:7 Fs:0}



static void Test_BFu7s_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu7ll_BFu0s");
    static BFu7s_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7ll_BFu0s(Test_BFu7s_BFu7ll_BFu0s, "BFu7s_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7s_BFu0c  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu7s_BFu0c) C1{ Fs:7 Fs:7 Fc:0}



static void Test_BFu7s_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu0c");
    static BFu7s_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7s_BFu0c(Test_BFu7s_BFu7s_BFu0c, "BFu7s_BFu7s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7s_BFu0i  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu7s_BFu0i) C1{ Fs:7 Fs:7 Fi:0}



static void Test_BFu7s_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu0i");
    static BFu7s_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7s_BFu0i(Test_BFu7s_BFu7s_BFu0i, "BFu7s_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7s_BFu0ll  {
  unsigned short v1:7;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu7s_BFu0ll) C1{ Fs:7 Fs:7 FL:0}



static void Test_BFu7s_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu0ll");
    static BFu7s_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7s_BFu0ll(Test_BFu7s_BFu7s_BFu0ll, "BFu7s_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu7s_BFu0s  {
  unsigned short v1:7;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu7s_BFu0s) C1{ Fs:7 Fs:7 Fs:0}



static void Test_BFu7s_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu7s_BFu0s");
    static BFu7s_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7s_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7s_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu7s_BFu0s(Test_BFu7s_BFu7s_BFu0s, "BFu7s_BFu7s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8c_BFu0c  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu8c_BFu0c) C1{ Fs:7 Fc:8 Fc:0}



static void Test_BFu7s_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu0c");
    static BFu7s_BFu8c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu8c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8c_BFu0c(Test_BFu7s_BFu8c_BFu0c, "BFu7s_BFu8c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8c_BFu0i  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu8c_BFu0i) C1{ Fs:7 Fc:8 Fi:0}



static void Test_BFu7s_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu0i");
    static BFu7s_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8c_BFu0i(Test_BFu7s_BFu8c_BFu0i, "BFu7s_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8c_BFu0ll  {
  unsigned short v1:7;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu8c_BFu0ll) C1{ Fs:7 Fc:8 FL:0}



static void Test_BFu7s_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu0ll");
    static BFu7s_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8c_BFu0ll(Test_BFu7s_BFu8c_BFu0ll, "BFu7s_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8c_BFu0s  {
  unsigned short v1:7;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu8c_BFu0s) C1{ Fs:7 Fc:8 Fs:0}



static void Test_BFu7s_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu8c_BFu0s");
    static BFu7s_BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu8c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7s_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7s_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8c_BFu0s(Test_BFu7s_BFu8c_BFu0s, "BFu7s_BFu8c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8i_BFu0c  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu8i_BFu0c) C1{ Fs:7 Fi:8 Fc:0}



static void Test_BFu7s_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu0c");
    static BFu7s_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8i_BFu0c(Test_BFu7s_BFu8i_BFu0c, "BFu7s_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8i_BFu0i  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu8i_BFu0i) C1{ Fs:7 Fi:8 Fi:0}



static void Test_BFu7s_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu0i");
    static BFu7s_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8i_BFu0i(Test_BFu7s_BFu8i_BFu0i, "BFu7s_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8i_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu8i_BFu0ll) C1{ Fs:7 Fi:8 FL:0}



static void Test_BFu7s_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu0ll");
    static BFu7s_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8i_BFu0ll(Test_BFu7s_BFu8i_BFu0ll, "BFu7s_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8i_BFu0s  {
  unsigned short v1:7;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu8i_BFu0s) C1{ Fs:7 Fi:8 Fs:0}



static void Test_BFu7s_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu8i_BFu0s");
    static BFu7s_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8i_BFu0s(Test_BFu7s_BFu8i_BFu0s, "BFu7s_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8ll_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu8ll_BFu0c) C1{ Fs:7 FL:8 Fc:0}



static void Test_BFu7s_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu0c");
    static BFu7s_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8ll_BFu0c(Test_BFu7s_BFu8ll_BFu0c, "BFu7s_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8ll_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu8ll_BFu0i) C1{ Fs:7 FL:8 Fi:0}



static void Test_BFu7s_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu0i");
    static BFu7s_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8ll_BFu0i(Test_BFu7s_BFu8ll_BFu0i, "BFu7s_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu8ll_BFu0ll) C1{ Fs:7 FL:8 FL:0}



static void Test_BFu7s_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu0ll");
    static BFu7s_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8ll_BFu0ll(Test_BFu7s_BFu8ll_BFu0ll, "BFu7s_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8ll_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu8ll_BFu0s) C1{ Fs:7 FL:8 Fs:0}



static void Test_BFu7s_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu8ll_BFu0s");
    static BFu7s_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8ll_BFu0s(Test_BFu7s_BFu8ll_BFu0s, "BFu7s_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8s_BFu0c  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu8s_BFu0c) C1{ Fs:7 Fs:8 Fc:0}



static void Test_BFu7s_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu0c");
    static BFu7s_BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8s_BFu0c(Test_BFu7s_BFu8s_BFu0c, "BFu7s_BFu8s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8s_BFu0i  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu8s_BFu0i) C1{ Fs:7 Fs:8 Fi:0}



static void Test_BFu7s_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu0i");
    static BFu7s_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8s_BFu0i(Test_BFu7s_BFu8s_BFu0i, "BFu7s_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8s_BFu0ll  {
  unsigned short v1:7;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu8s_BFu0ll) C1{ Fs:7 Fs:8 FL:0}



static void Test_BFu7s_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu0ll");
    static BFu7s_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8s_BFu0ll(Test_BFu7s_BFu8s_BFu0ll, "BFu7s_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu8s_BFu0s  {
  unsigned short v1:7;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu8s_BFu0s) C1{ Fs:7 Fs:8 Fs:0}



static void Test_BFu7s_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu8s_BFu0s");
    static BFu7s_BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7s_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7s_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu8s_BFu0s(Test_BFu7s_BFu8s_BFu0s, "BFu7s_BFu8s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9i_BFu0c  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu9i_BFu0c) C1{ Fs:7 Fi:9 Fc:0}



static void Test_BFu7s_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu0c");
    static BFu7s_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9i_BFu0c(Test_BFu7s_BFu9i_BFu0c, "BFu7s_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9i_BFu0i  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu9i_BFu0i) C1{ Fs:7 Fi:9 Fi:0}



static void Test_BFu7s_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu0i");
    static BFu7s_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9i_BFu0i(Test_BFu7s_BFu9i_BFu0i, "BFu7s_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9i_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu9i_BFu0ll) C1{ Fs:7 Fi:9 FL:0}



static void Test_BFu7s_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu0ll");
    static BFu7s_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9i_BFu0ll(Test_BFu7s_BFu9i_BFu0ll, "BFu7s_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9i_BFu0s  {
  unsigned short v1:7;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu9i_BFu0s) C1{ Fs:7 Fi:9 Fs:0}



static void Test_BFu7s_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu9i_BFu0s");
    static BFu7s_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9i_BFu0s(Test_BFu7s_BFu9i_BFu0s, "BFu7s_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9ll_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu9ll_BFu0c) C1{ Fs:7 FL:9 Fc:0}



static void Test_BFu7s_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu0c");
    static BFu7s_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9ll_BFu0c(Test_BFu7s_BFu9ll_BFu0c, "BFu7s_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9ll_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu9ll_BFu0i) C1{ Fs:7 FL:9 Fi:0}



static void Test_BFu7s_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu0i");
    static BFu7s_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9ll_BFu0i(Test_BFu7s_BFu9ll_BFu0i, "BFu7s_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9ll_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu9ll_BFu0ll) C1{ Fs:7 FL:9 FL:0}



static void Test_BFu7s_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu0ll");
    static BFu7s_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9ll_BFu0ll(Test_BFu7s_BFu9ll_BFu0ll, "BFu7s_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9ll_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu9ll_BFu0s) C1{ Fs:7 FL:9 Fs:0}



static void Test_BFu7s_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu9ll_BFu0s");
    static BFu7s_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9ll_BFu0s(Test_BFu7s_BFu9ll_BFu0s, "BFu7s_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9s_BFu0c  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu7s_BFu9s_BFu0c) C1{ Fs:7 Fs:9 Fc:0}



static void Test_BFu7s_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu0c");
    static BFu7s_BFu9s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9s_BFu0c(Test_BFu7s_BFu9s_BFu0c, "BFu7s_BFu9s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9s_BFu0i  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu7s_BFu9s_BFu0i) C1{ Fs:7 Fs:9 Fi:0}



static void Test_BFu7s_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu0i");
    static BFu7s_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9s_BFu0i(Test_BFu7s_BFu9s_BFu0i, "BFu7s_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9s_BFu0ll  {
  unsigned short v1:7;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu7s_BFu9s_BFu0ll) C1{ Fs:7 Fs:9 FL:0}



static void Test_BFu7s_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu0ll");
    static BFu7s_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9s_BFu0ll(Test_BFu7s_BFu9s_BFu0ll, "BFu7s_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_BFu9s_BFu0s  {
  unsigned short v1:7;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu7s_BFu9s_BFu0s) C1{ Fs:7 Fs:9 Fs:0}



static void Test_BFu7s_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu7s_BFu9s_BFu0s");
    static BFu7s_BFu9s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7s_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7s_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu7s_BFu9s_BFu0s(Test_BFu7s_BFu9s_BFu0s, "BFu7s_BFu9s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_C_BFu0c  {
  unsigned short v1:7;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_C_BFu0c) C1{ Fs:7 Fc Fc:0}



static void Test_BFu7s_C_BFu0c()
{
  {
    init_simple_test("BFu7s_C_BFu0c");
    static BFu7s_C_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_C_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu0c");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_C_BFu0c(Test_BFu7s_C_BFu0c, "BFu7s_C_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_C_BFu0i  {
  unsigned short v1:7;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_C_BFu0i) C1{ Fs:7 Fc Fi:0}



static void Test_BFu7s_C_BFu0i()
{
  {
    init_simple_test("BFu7s_C_BFu0i");
    static BFu7s_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu0i");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_C_BFu0i(Test_BFu7s_C_BFu0i, "BFu7s_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_C_BFu0ll  {
  unsigned short v1:7;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_C_BFu0ll) C1{ Fs:7 Fc FL:0}



static void Test_BFu7s_C_BFu0ll()
{
  {
    init_simple_test("BFu7s_C_BFu0ll");
    static BFu7s_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_C_BFu0ll(Test_BFu7s_C_BFu0ll, "BFu7s_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_C_BFu0s  {
  unsigned short v1:7;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_C_BFu0s) C1{ Fs:7 Fc Fs:0}



static void Test_BFu7s_C_BFu0s()
{
  {
    init_simple_test("BFu7s_C_BFu0s");
    static BFu7s_C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_C_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_C_BFu0s");
    check_field_offset(lv, v2, 1, "BFu7s_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_C_BFu0s(Test_BFu7s_C_BFu0s, "BFu7s_C_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_D_BFu0c  {
  unsigned short v1:7;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_D_BFu0c) C1{ Fs:7 FL Fc:0}



static void Test_BFu7s_D_BFu0c()
{
  {
    init_simple_test("BFu7s_D_BFu0c");
    static BFu7s_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_D_BFu0c(Test_BFu7s_D_BFu0c, "BFu7s_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_D_BFu0i  {
  unsigned short v1:7;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_D_BFu0i) C1{ Fs:7 FL Fi:0}



static void Test_BFu7s_D_BFu0i()
{
  {
    init_simple_test("BFu7s_D_BFu0i");
    static BFu7s_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_D_BFu0i(Test_BFu7s_D_BFu0i, "BFu7s_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_D_BFu0ll  {
  unsigned short v1:7;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_D_BFu0ll) C1{ Fs:7 FL FL:0}



static void Test_BFu7s_D_BFu0ll()
{
  {
    init_simple_test("BFu7s_D_BFu0ll");
    static BFu7s_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_D_BFu0ll(Test_BFu7s_D_BFu0ll, "BFu7s_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_D_BFu0s  {
  unsigned short v1:7;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_D_BFu0s) C1{ Fs:7 FL Fs:0}



static void Test_BFu7s_D_BFu0s()
{
  {
    init_simple_test("BFu7s_D_BFu0s");
    static BFu7s_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_D_BFu0s(Test_BFu7s_D_BFu0s, "BFu7s_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_F_BFu0c  {
  unsigned short v1:7;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_F_BFu0c) C1{ Fs:7 Fi Fc:0}



static void Test_BFu7s_F_BFu0c()
{
  {
    init_simple_test("BFu7s_F_BFu0c");
    static BFu7s_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_F_BFu0c(Test_BFu7s_F_BFu0c, "BFu7s_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_F_BFu0i  {
  unsigned short v1:7;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_F_BFu0i) C1{ Fs:7 Fi Fi:0}



static void Test_BFu7s_F_BFu0i()
{
  {
    init_simple_test("BFu7s_F_BFu0i");
    static BFu7s_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_F_BFu0i(Test_BFu7s_F_BFu0i, "BFu7s_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_F_BFu0ll  {
  unsigned short v1:7;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_F_BFu0ll) C1{ Fs:7 Fi FL:0}



static void Test_BFu7s_F_BFu0ll()
{
  {
    init_simple_test("BFu7s_F_BFu0ll");
    static BFu7s_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_F_BFu0ll(Test_BFu7s_F_BFu0ll, "BFu7s_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_F_BFu0s  {
  unsigned short v1:7;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_F_BFu0s) C1{ Fs:7 Fi Fs:0}



static void Test_BFu7s_F_BFu0s()
{
  {
    init_simple_test("BFu7s_F_BFu0s");
    static BFu7s_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7s_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_F_BFu0s(Test_BFu7s_F_BFu0s, "BFu7s_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_I_BFu0c  {
  unsigned short v1:7;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_I_BFu0c) C1{ Fs:7 Fi Fc:0}



static void Test_BFu7s_I_BFu0c()
{
  {
    init_simple_test("BFu7s_I_BFu0c");
    static BFu7s_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_I_BFu0c(Test_BFu7s_I_BFu0c, "BFu7s_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_I_BFu0i  {
  unsigned short v1:7;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_I_BFu0i) C1{ Fs:7 Fi Fi:0}



static void Test_BFu7s_I_BFu0i()
{
  {
    init_simple_test("BFu7s_I_BFu0i");
    static BFu7s_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_I_BFu0i(Test_BFu7s_I_BFu0i, "BFu7s_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_I_BFu0ll  {
  unsigned short v1:7;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_I_BFu0ll) C1{ Fs:7 Fi FL:0}



static void Test_BFu7s_I_BFu0ll()
{
  {
    init_simple_test("BFu7s_I_BFu0ll");
    static BFu7s_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_I_BFu0ll(Test_BFu7s_I_BFu0ll, "BFu7s_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_I_BFu0s  {
  unsigned short v1:7;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_I_BFu0s) C1{ Fs:7 Fi Fs:0}



static void Test_BFu7s_I_BFu0s()
{
  {
    init_simple_test("BFu7s_I_BFu0s");
    static BFu7s_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7s_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_I_BFu0s(Test_BFu7s_I_BFu0s, "BFu7s_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ip_BFu0c  {
  unsigned short v1:7;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_Ip_BFu0c) C1{ Fs:7 Fp Fc:0}



static void Test_BFu7s_Ip_BFu0c()
{
  {
    init_simple_test("BFu7s_Ip_BFu0c");
    static BFu7s_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ip_BFu0c(Test_BFu7s_Ip_BFu0c, "BFu7s_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ip_BFu0i  {
  unsigned short v1:7;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_Ip_BFu0i) C1{ Fs:7 Fp Fi:0}



static void Test_BFu7s_Ip_BFu0i()
{
  {
    init_simple_test("BFu7s_Ip_BFu0i");
    static BFu7s_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ip_BFu0i(Test_BFu7s_Ip_BFu0i, "BFu7s_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ip_BFu0ll  {
  unsigned short v1:7;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_Ip_BFu0ll) C1{ Fs:7 Fp FL:0}



static void Test_BFu7s_Ip_BFu0ll()
{
  {
    init_simple_test("BFu7s_Ip_BFu0ll");
    static BFu7s_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ip_BFu0ll(Test_BFu7s_Ip_BFu0ll, "BFu7s_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ip_BFu0s  {
  unsigned short v1:7;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_Ip_BFu0s) C1{ Fs:7 Fp Fs:0}



static void Test_BFu7s_Ip_BFu0s()
{
  {
    init_simple_test("BFu7s_Ip_BFu0s");
    static BFu7s_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ip_BFu0s(Test_BFu7s_Ip_BFu0s, "BFu7s_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_L_BFu0c  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_L_BFu0c) C1{ Fs:7 FL Fc:0}



static void Test_BFu7s_L_BFu0c()
{
  {
    init_simple_test("BFu7s_L_BFu0c");
    static BFu7s_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_L_BFu0c(Test_BFu7s_L_BFu0c, "BFu7s_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_L_BFu0i  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_L_BFu0i) C1{ Fs:7 FL Fi:0}



static void Test_BFu7s_L_BFu0i()
{
  {
    init_simple_test("BFu7s_L_BFu0i");
    static BFu7s_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_L_BFu0i(Test_BFu7s_L_BFu0i, "BFu7s_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_L_BFu0ll  {
  unsigned short v1:7;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_L_BFu0ll) C1{ Fs:7 FL FL:0}



static void Test_BFu7s_L_BFu0ll()
{
  {
    init_simple_test("BFu7s_L_BFu0ll");
    static BFu7s_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_L_BFu0ll(Test_BFu7s_L_BFu0ll, "BFu7s_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_L_BFu0s  {
  unsigned short v1:7;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_L_BFu0s) C1{ Fs:7 FL Fs:0}



static void Test_BFu7s_L_BFu0s()
{
  {
    init_simple_test("BFu7s_L_BFu0s");
    static BFu7s_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_L_BFu0s(Test_BFu7s_L_BFu0s, "BFu7s_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_S_BFu0c  {
  unsigned short v1:7;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_S_BFu0c) C1{ Fs:7 Fs Fc:0}



static void Test_BFu7s_S_BFu0c()
{
  {
    init_simple_test("BFu7s_S_BFu0c");
    static BFu7s_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_S_BFu0c(Test_BFu7s_S_BFu0c, "BFu7s_S_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_S_BFu0i  {
  unsigned short v1:7;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_S_BFu0i) C1{ Fs:7 Fs Fi:0}



static void Test_BFu7s_S_BFu0i()
{
  {
    init_simple_test("BFu7s_S_BFu0i");
    static BFu7s_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_S_BFu0i(Test_BFu7s_S_BFu0i, "BFu7s_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_S_BFu0ll  {
  unsigned short v1:7;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_S_BFu0ll) C1{ Fs:7 Fs FL:0}



static void Test_BFu7s_S_BFu0ll()
{
  {
    init_simple_test("BFu7s_S_BFu0ll");
    static BFu7s_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_S_BFu0ll(Test_BFu7s_S_BFu0ll, "BFu7s_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_S_BFu0s  {
  unsigned short v1:7;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_S_BFu0s) C1{ Fs:7 Fs Fs:0}



static void Test_BFu7s_S_BFu0s()
{
  {
    init_simple_test("BFu7s_S_BFu0s");
    static BFu7s_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu7s_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_S_BFu0s(Test_BFu7s_S_BFu0s, "BFu7s_S_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Uc_BFu0c  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_Uc_BFu0c) C1{ Fs:7 Fc Fc:0}



static void Test_BFu7s_Uc_BFu0c()
{
  {
    init_simple_test("BFu7s_Uc_BFu0c");
    static BFu7s_Uc_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_Uc_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu0c");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Uc_BFu0c(Test_BFu7s_Uc_BFu0c, "BFu7s_Uc_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Uc_BFu0i  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_Uc_BFu0i) C1{ Fs:7 Fc Fi:0}



static void Test_BFu7s_Uc_BFu0i()
{
  {
    init_simple_test("BFu7s_Uc_BFu0i");
    static BFu7s_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu0i");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Uc_BFu0i(Test_BFu7s_Uc_BFu0i, "BFu7s_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Uc_BFu0ll  {
  unsigned short v1:7;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_Uc_BFu0ll) C1{ Fs:7 Fc FL:0}



static void Test_BFu7s_Uc_BFu0ll()
{
  {
    init_simple_test("BFu7s_Uc_BFu0ll");
    static BFu7s_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Uc_BFu0ll(Test_BFu7s_Uc_BFu0ll, "BFu7s_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Uc_BFu0s  {
  unsigned short v1:7;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_Uc_BFu0s) C1{ Fs:7 Fc Fs:0}



static void Test_BFu7s_Uc_BFu0s()
{
  {
    init_simple_test("BFu7s_Uc_BFu0s");
    static BFu7s_Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7s_Uc_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Uc_BFu0s");
    check_field_offset(lv, v2, 1, "BFu7s_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Uc_BFu0s(Test_BFu7s_Uc_BFu0s, "BFu7s_Uc_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ui_BFu0c  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_Ui_BFu0c) C1{ Fs:7 Fi Fc:0}



static void Test_BFu7s_Ui_BFu0c()
{
  {
    init_simple_test("BFu7s_Ui_BFu0c");
    static BFu7s_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu0c");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ui_BFu0c(Test_BFu7s_Ui_BFu0c, "BFu7s_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ui_BFu0i  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_Ui_BFu0i) C1{ Fs:7 Fi Fi:0}



static void Test_BFu7s_Ui_BFu0i()
{
  {
    init_simple_test("BFu7s_Ui_BFu0i");
    static BFu7s_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu0i");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ui_BFu0i(Test_BFu7s_Ui_BFu0i, "BFu7s_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ui_BFu0ll  {
  unsigned short v1:7;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_Ui_BFu0ll) C1{ Fs:7 Fi FL:0}



static void Test_BFu7s_Ui_BFu0ll()
{
  {
    init_simple_test("BFu7s_Ui_BFu0ll");
    static BFu7s_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu7s_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ui_BFu0ll(Test_BFu7s_Ui_BFu0ll, "BFu7s_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ui_BFu0s  {
  unsigned short v1:7;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_Ui_BFu0s) C1{ Fs:7 Fi Fs:0}



static void Test_BFu7s_Ui_BFu0s()
{
  {
    init_simple_test("BFu7s_Ui_BFu0s");
    static BFu7s_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7s_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7s_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ui_BFu0s");
    check_field_offset(lv, v2, 4, "BFu7s_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ui_BFu0s(Test_BFu7s_Ui_BFu0s, "BFu7s_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ul_BFu0c  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_Ul_BFu0c) C1{ Fs:7 FL Fc:0}



static void Test_BFu7s_Ul_BFu0c()
{
  {
    init_simple_test("BFu7s_Ul_BFu0c");
    static BFu7s_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ul_BFu0c(Test_BFu7s_Ul_BFu0c, "BFu7s_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ul_BFu0i  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_Ul_BFu0i) C1{ Fs:7 FL Fi:0}



static void Test_BFu7s_Ul_BFu0i()
{
  {
    init_simple_test("BFu7s_Ul_BFu0i");
    static BFu7s_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ul_BFu0i(Test_BFu7s_Ul_BFu0i, "BFu7s_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ul_BFu0ll  {
  unsigned short v1:7;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_Ul_BFu0ll) C1{ Fs:7 FL FL:0}



static void Test_BFu7s_Ul_BFu0ll()
{
  {
    init_simple_test("BFu7s_Ul_BFu0ll");
    static BFu7s_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ul_BFu0ll(Test_BFu7s_Ul_BFu0ll, "BFu7s_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Ul_BFu0s  {
  unsigned short v1:7;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_Ul_BFu0s) C1{ Fs:7 FL Fs:0}



static void Test_BFu7s_Ul_BFu0s()
{
  {
    init_simple_test("BFu7s_Ul_BFu0s");
    static BFu7s_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7s_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Ul_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Ul_BFu0s(Test_BFu7s_Ul_BFu0s, "BFu7s_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Us_BFu0c  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_Us_BFu0c) C1{ Fs:7 Fs Fc:0}



static void Test_BFu7s_Us_BFu0c()
{
  {
    init_simple_test("BFu7s_Us_BFu0c");
    static BFu7s_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu0c");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Us_BFu0c(Test_BFu7s_Us_BFu0c, "BFu7s_Us_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Us_BFu0i  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_Us_BFu0i) C1{ Fs:7 Fs Fi:0}



static void Test_BFu7s_Us_BFu0i()
{
  {
    init_simple_test("BFu7s_Us_BFu0i");
    static BFu7s_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu0i");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Us_BFu0i(Test_BFu7s_Us_BFu0i, "BFu7s_Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Us_BFu0ll  {
  unsigned short v1:7;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_Us_BFu0ll) C1{ Fs:7 Fs FL:0}



static void Test_BFu7s_Us_BFu0ll()
{
  {
    init_simple_test("BFu7s_Us_BFu0ll");
    static BFu7s_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7s_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu7s_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Us_BFu0ll(Test_BFu7s_Us_BFu0ll, "BFu7s_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Us_BFu0s  {
  unsigned short v1:7;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_Us_BFu0s) C1{ Fs:7 Fs Fs:0}



static void Test_BFu7s_Us_BFu0s()
{
  {
    init_simple_test("BFu7s_Us_BFu0s");
    static BFu7s_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7s_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7s_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Us_BFu0s");
    check_field_offset(lv, v2, 2, "BFu7s_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Us_BFu0s(Test_BFu7s_Us_BFu0s, "BFu7s_Us_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Vp_BFu0c  {
  unsigned short v1:7;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu7s_Vp_BFu0c) C1{ Fs:7 Fp Fc:0}



static void Test_BFu7s_Vp_BFu0c()
{
  {
    init_simple_test("BFu7s_Vp_BFu0c");
    static BFu7s_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Vp_BFu0c(Test_BFu7s_Vp_BFu0c, "BFu7s_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Vp_BFu0i  {
  unsigned short v1:7;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu7s_Vp_BFu0i) C1{ Fs:7 Fp Fi:0}



static void Test_BFu7s_Vp_BFu0i()
{
  {
    init_simple_test("BFu7s_Vp_BFu0i");
    static BFu7s_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Vp_BFu0i(Test_BFu7s_Vp_BFu0i, "BFu7s_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Vp_BFu0ll  {
  unsigned short v1:7;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu7s_Vp_BFu0ll) C1{ Fs:7 Fp FL:0}



static void Test_BFu7s_Vp_BFu0ll()
{
  {
    init_simple_test("BFu7s_Vp_BFu0ll");
    static BFu7s_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Vp_BFu0ll(Test_BFu7s_Vp_BFu0ll, "BFu7s_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu7s_Vp_BFu0s  {
  unsigned short v1:7;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu7s_Vp_BFu0s) C1{ Fs:7 Fp Fs:0}



static void Test_BFu7s_Vp_BFu0s()
{
  {
    init_simple_test("BFu7s_Vp_BFu0s");
    static BFu7s_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7s_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7s_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7s_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7s_Vp_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7s_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu7s_Vp_BFu0s(Test_BFu7s_Vp_BFu0s, "BFu7s_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c  {
  unsigned char v1:8;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu0c) C1{ Fc:8 Fc:0}



static void Test_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu0c");
    static BFu8c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu8c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c(Test_BFu8c_BFu0c, "BFu8c_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu0c  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu0c_BFu0c) C1{ Fc:8 Fc:0 Fc:0}



static void Test_BFu8c_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu0c");
    static BFu8c_BFu0c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(BFu8c_BFu0c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu0c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu0c(Test_BFu8c_BFu0c_BFu0c, "BFu8c_BFu0c_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu0i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu0c_BFu0i) C1{ Fc:8 Fc:0 Fi:0}



static void Test_BFu8c_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu0i");
    static BFu8c_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu0i(Test_BFu8c_BFu0c_BFu0i, "BFu8c_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu0ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu0c_BFu0ll) C1{ Fc:8 Fc:0 FL:0}



static void Test_BFu8c_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu0ll");
    static BFu8c_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu0ll(Test_BFu8c_BFu0c_BFu0ll, "BFu8c_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu0s  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu0c_BFu0s) C1{ Fc:8 Fc:0 Fs:0}



static void Test_BFu8c_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu0s");
    static BFu8c_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu0s(Test_BFu8c_BFu0c_BFu0s, "BFu8c_BFu0c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu15i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8c_BFu0c_BFu15i) C1{ Fc:8 Fc:0 Fi:15}



static void Test_BFu8c_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu15i");
    static BFu8c_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu15i(Test_BFu8c_BFu0c_BFu15i, "BFu8c_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu15ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8c_BFu0c_BFu15ll) C1{ Fc:8 Fc:0 FL:15}



static void Test_BFu8c_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu15ll");
    static BFu8c_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu15ll(Test_BFu8c_BFu0c_BFu15ll, "BFu8c_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu15s  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8c_BFu0c_BFu15s) C1{ Fc:8 Fc:0 Fs:15}



static void Test_BFu8c_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu15s");
    static BFu8c_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8c_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu15s(Test_BFu8c_BFu0c_BFu15s, "BFu8c_BFu0c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu16i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8c_BFu0c_BFu16i) C1{ Fc:8 Fc:0 Fi:16}



static void Test_BFu8c_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu16i");
    static BFu8c_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu16i(Test_BFu8c_BFu0c_BFu16i, "BFu8c_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu16ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8c_BFu0c_BFu16ll) C1{ Fc:8 Fc:0 FL:16}



static void Test_BFu8c_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu16ll");
    static BFu8c_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu16ll(Test_BFu8c_BFu0c_BFu16ll, "BFu8c_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu16s  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8c_BFu0c_BFu16s) C1{ Fc:8 Fc:0 Fs:16}



static void Test_BFu8c_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu16s");
    static BFu8c_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8c_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu16s(Test_BFu8c_BFu0c_BFu16s, "BFu8c_BFu0c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu17i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8c_BFu0c_BFu17i) C1{ Fc:8 Fc:0 Fi:17}



static void Test_BFu8c_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu17i");
    static BFu8c_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu17i(Test_BFu8c_BFu0c_BFu17i, "BFu8c_BFu0c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu17ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8c_BFu0c_BFu17ll) C1{ Fc:8 Fc:0 FL:17}



static void Test_BFu8c_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu17ll");
    static BFu8c_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu17ll(Test_BFu8c_BFu0c_BFu17ll, "BFu8c_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu1c  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8c_BFu0c_BFu1c) C1{ Fc:8 Fc:0 Fc:1}



static void Test_BFu8c_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu1c");
    static BFu8c_BFu0c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu1c(Test_BFu8c_BFu0c_BFu1c, "BFu8c_BFu0c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu1i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8c_BFu0c_BFu1i) C1{ Fc:8 Fc:0 Fi:1}



static void Test_BFu8c_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu1i");
    static BFu8c_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu1i(Test_BFu8c_BFu0c_BFu1i, "BFu8c_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu1ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8c_BFu0c_BFu1ll) C1{ Fc:8 Fc:0 FL:1}



static void Test_BFu8c_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu1ll");
    static BFu8c_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu1ll(Test_BFu8c_BFu0c_BFu1ll, "BFu8c_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu1s  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8c_BFu0c_BFu1s) C1{ Fc:8 Fc:0 Fs:1}



static void Test_BFu8c_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu1s");
    static BFu8c_BFu0c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu1s(Test_BFu8c_BFu0c_BFu1s, "BFu8c_BFu0c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu31i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8c_BFu0c_BFu31i) C1{ Fc:8 Fc:0 Fi:31}



static void Test_BFu8c_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu31i");
    static BFu8c_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8c_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu31i(Test_BFu8c_BFu0c_BFu31i, "BFu8c_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu31ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8c_BFu0c_BFu31ll) C1{ Fc:8 Fc:0 FL:31}



static void Test_BFu8c_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu31ll");
    static BFu8c_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8c_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu31ll(Test_BFu8c_BFu0c_BFu31ll, "BFu8c_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu32i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8c_BFu0c_BFu32i) C1{ Fc:8 Fc:0 Fi:32}



static void Test_BFu8c_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu32i");
    static BFu8c_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8c_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu32i(Test_BFu8c_BFu0c_BFu32i, "BFu8c_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu32ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8c_BFu0c_BFu32ll) C1{ Fc:8 Fc:0 FL:32}



static void Test_BFu8c_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu32ll");
    static BFu8c_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8c_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu32ll(Test_BFu8c_BFu0c_BFu32ll, "BFu8c_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu33  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8c_BFu0c_BFu33) C1{ Fc:8 Fc:0 FL:33}



static void Test_BFu8c_BFu0c_BFu33()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu33");
    static BFu8c_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8c_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8c_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu33(Test_BFu8c_BFu0c_BFu33, "BFu8c_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu7c  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8c_BFu0c_BFu7c) C1{ Fc:8 Fc:0 Fc:7}



static void Test_BFu8c_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu7c");
    static BFu8c_BFu0c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu7c(Test_BFu8c_BFu0c_BFu7c, "BFu8c_BFu0c_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu7i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8c_BFu0c_BFu7i) C1{ Fc:8 Fc:0 Fi:7}



static void Test_BFu8c_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu7i");
    static BFu8c_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu7i(Test_BFu8c_BFu0c_BFu7i, "BFu8c_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu7ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8c_BFu0c_BFu7ll) C1{ Fc:8 Fc:0 FL:7}



static void Test_BFu8c_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu7ll");
    static BFu8c_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu7ll(Test_BFu8c_BFu0c_BFu7ll, "BFu8c_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu7s  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8c_BFu0c_BFu7s) C1{ Fc:8 Fc:0 Fs:7}



static void Test_BFu8c_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu7s");
    static BFu8c_BFu0c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu7s(Test_BFu8c_BFu0c_BFu7s, "BFu8c_BFu0c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu8c  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8c_BFu0c_BFu8c) C1{ Fc:8 Fc:0 Fc:8}



static void Test_BFu8c_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu8c");
    static BFu8c_BFu0c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu8c(Test_BFu8c_BFu0c_BFu8c, "BFu8c_BFu0c_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu8i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8c_BFu0c_BFu8i) C1{ Fc:8 Fc:0 Fi:8}



static void Test_BFu8c_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu8i");
    static BFu8c_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu8i(Test_BFu8c_BFu0c_BFu8i, "BFu8c_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu8ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8c_BFu0c_BFu8ll) C1{ Fc:8 Fc:0 FL:8}



static void Test_BFu8c_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu8ll");
    static BFu8c_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu8ll(Test_BFu8c_BFu0c_BFu8ll, "BFu8c_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu8s  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8c_BFu0c_BFu8s) C1{ Fc:8 Fc:0 Fs:8}



static void Test_BFu8c_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu8s");
    static BFu8c_BFu0c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu8s(Test_BFu8c_BFu0c_BFu8s, "BFu8c_BFu0c_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu9i  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8c_BFu0c_BFu9i) C1{ Fc:8 Fc:0 Fi:9}



static void Test_BFu8c_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu9i");
    static BFu8c_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu9i(Test_BFu8c_BFu0c_BFu9i, "BFu8c_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu9ll  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8c_BFu0c_BFu9ll) C1{ Fc:8 Fc:0 FL:9}



static void Test_BFu8c_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu9ll");
    static BFu8c_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu9ll(Test_BFu8c_BFu0c_BFu9ll, "BFu8c_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_BFu9s  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8c_BFu0c_BFu9s) C1{ Fc:8 Fc:0 Fs:9}



static void Test_BFu8c_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu8c_BFu0c_BFu9s");
    static BFu8c_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8c_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_BFu9s(Test_BFu8c_BFu0c_BFu9s, "BFu8c_BFu0c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_C  {
  unsigned char v1:8;
  unsigned char  :0;
  char v2;
};
//SIG(1 BFu8c_BFu0c_C) C1{ Fc:8 Fc:0 Fc}



static void Test_BFu8c_BFu0c_C()
{
  {
    init_simple_test("BFu8c_BFu0c_C");
    static BFu8c_BFu0c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu0c_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_C");
    check_field_offset(lv, v2, 1, "BFu8c_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_C(Test_BFu8c_BFu0c_C, "BFu8c_BFu0c_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_D  {
  unsigned char v1:8;
  unsigned char  :0;
  double v2;
};
//SIG(1 BFu8c_BFu0c_D) C1{ Fc:8 Fc:0 FL}



static void Test_BFu8c_BFu0c_D()
{
  {
    init_simple_test("BFu8c_BFu0c_D");
    static BFu8c_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_D(Test_BFu8c_BFu0c_D, "BFu8c_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_F  {
  unsigned char v1:8;
  unsigned char  :0;
  float v2;
};
//SIG(1 BFu8c_BFu0c_F) C1{ Fc:8 Fc:0 Fi}



static void Test_BFu8c_BFu0c_F()
{
  {
    init_simple_test("BFu8c_BFu0c_F");
    static BFu8c_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_F");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_F(Test_BFu8c_BFu0c_F, "BFu8c_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_I  {
  unsigned char v1:8;
  unsigned char  :0;
  int v2;
};
//SIG(1 BFu8c_BFu0c_I) C1{ Fc:8 Fc:0 Fi}



static void Test_BFu8c_BFu0c_I()
{
  {
    init_simple_test("BFu8c_BFu0c_I");
    static BFu8c_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_I");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_I(Test_BFu8c_BFu0c_I, "BFu8c_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_Ip  {
  unsigned char v1:8;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu8c_BFu0c_Ip) C1{ Fc:8 Fc:0 Fp}



static void Test_BFu8c_BFu0c_Ip()
{
  {
    init_simple_test("BFu8c_BFu0c_Ip");
    static BFu8c_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_Ip(Test_BFu8c_BFu0c_Ip, "BFu8c_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_L  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 BFu8c_BFu0c_L) C1{ Fc:8 Fc:0 FL}



static void Test_BFu8c_BFu0c_L()
{
  {
    init_simple_test("BFu8c_BFu0c_L");
    static BFu8c_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_L(Test_BFu8c_BFu0c_L, "BFu8c_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_S  {
  unsigned char v1:8;
  unsigned char  :0;
  short v2;
};
//SIG(1 BFu8c_BFu0c_S) C1{ Fc:8 Fc:0 Fs}



static void Test_BFu8c_BFu0c_S()
{
  {
    init_simple_test("BFu8c_BFu0c_S");
    static BFu8c_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0c_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_S");
    check_field_offset(lv, v2, 2, "BFu8c_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_S(Test_BFu8c_BFu0c_S, "BFu8c_BFu0c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_Uc  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 BFu8c_BFu0c_Uc) C1{ Fc:8 Fc:0 Fc}



static void Test_BFu8c_BFu0c_Uc()
{
  {
    init_simple_test("BFu8c_BFu0c_Uc");
    static BFu8c_BFu0c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu0c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_Uc");
    check_field_offset(lv, v2, 1, "BFu8c_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_Uc(Test_BFu8c_BFu0c_Uc, "BFu8c_BFu0c_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_Ui  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 BFu8c_BFu0c_Ui) C1{ Fc:8 Fc:0 Fi}



static void Test_BFu8c_BFu0c_Ui()
{
  {
    init_simple_test("BFu8c_BFu0c_Ui");
    static BFu8c_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_Ui");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_Ui(Test_BFu8c_BFu0c_Ui, "BFu8c_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_Ul  {
  unsigned char v1:8;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 BFu8c_BFu0c_Ul) C1{ Fc:8 Fc:0 FL}



static void Test_BFu8c_BFu0c_Ul()
{
  {
    init_simple_test("BFu8c_BFu0c_Ul");
    static BFu8c_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_Ul(Test_BFu8c_BFu0c_Ul, "BFu8c_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_Us  {
  unsigned char v1:8;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 BFu8c_BFu0c_Us) C1{ Fc:8 Fc:0 Fs}



static void Test_BFu8c_BFu0c_Us()
{
  {
    init_simple_test("BFu8c_BFu0c_Us");
    static BFu8c_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_Us");
    check_field_offset(lv, v2, 2, "BFu8c_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_Us(Test_BFu8c_BFu0c_Us, "BFu8c_BFu0c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0c_Vp  {
  unsigned char v1:8;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu8c_BFu0c_Vp) C1{ Fc:8 Fc:0 Fp}



static void Test_BFu8c_BFu0c_Vp()
{
  {
    init_simple_test("BFu8c_BFu0c_Vp");
    static BFu8c_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0c_Vp(Test_BFu8c_BFu0c_Vp, "BFu8c_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i  {
  unsigned char v1:8;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu0i) C1{ Fc:8 Fi:0}



static void Test_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu0i");
    static BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i(Test_BFu8c_BFu0i, "BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu0c  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu0i_BFu0c) C1{ Fc:8 Fi:0 Fc:0}



static void Test_BFu8c_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu0c");
    static BFu8c_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu0c(Test_BFu8c_BFu0i_BFu0c, "BFu8c_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu0i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu0i_BFu0i) C1{ Fc:8 Fi:0 Fi:0}



static void Test_BFu8c_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu0i");
    static BFu8c_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu0i(Test_BFu8c_BFu0i_BFu0i, "BFu8c_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu0ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu0i_BFu0ll) C1{ Fc:8 Fi:0 FL:0}



static void Test_BFu8c_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu0ll");
    static BFu8c_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu0ll(Test_BFu8c_BFu0i_BFu0ll, "BFu8c_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu0s  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu0i_BFu0s) C1{ Fc:8 Fi:0 Fs:0}



static void Test_BFu8c_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu0s");
    static BFu8c_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu0s(Test_BFu8c_BFu0i_BFu0s, "BFu8c_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu15i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8c_BFu0i_BFu15i) C1{ Fc:8 Fi:0 Fi:15}



static void Test_BFu8c_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu15i");
    static BFu8c_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8c_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu15i(Test_BFu8c_BFu0i_BFu15i, "BFu8c_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu15ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8c_BFu0i_BFu15ll) C1{ Fc:8 Fi:0 FL:15}



static void Test_BFu8c_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu15ll");
    static BFu8c_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8c_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu15ll(Test_BFu8c_BFu0i_BFu15ll, "BFu8c_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu15s  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8c_BFu0i_BFu15s) C1{ Fc:8 Fi:0 Fs:15}



static void Test_BFu8c_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu15s");
    static BFu8c_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8c_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8c_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu15s(Test_BFu8c_BFu0i_BFu15s, "BFu8c_BFu0i_BFu15s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu16i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8c_BFu0i_BFu16i) C1{ Fc:8 Fi:0 Fi:16}



static void Test_BFu8c_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu16i");
    static BFu8c_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8c_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu16i(Test_BFu8c_BFu0i_BFu16i, "BFu8c_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu16ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8c_BFu0i_BFu16ll) C1{ Fc:8 Fi:0 FL:16}



static void Test_BFu8c_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu16ll");
    static BFu8c_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8c_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu16ll(Test_BFu8c_BFu0i_BFu16ll, "BFu8c_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu16s  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8c_BFu0i_BFu16s) C1{ Fc:8 Fi:0 Fs:16}



static void Test_BFu8c_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu16s");
    static BFu8c_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8c_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8c_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu16s(Test_BFu8c_BFu0i_BFu16s, "BFu8c_BFu0i_BFu16s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu17i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8c_BFu0i_BFu17i) C1{ Fc:8 Fi:0 Fi:17}



static void Test_BFu8c_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu17i");
    static BFu8c_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8c_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu17i(Test_BFu8c_BFu0i_BFu17i, "BFu8c_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu17ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8c_BFu0i_BFu17ll) C1{ Fc:8 Fi:0 FL:17}



static void Test_BFu8c_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu17ll");
    static BFu8c_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8c_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu17ll(Test_BFu8c_BFu0i_BFu17ll, "BFu8c_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu1c  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8c_BFu0i_BFu1c) C1{ Fc:8 Fi:0 Fc:1}



static void Test_BFu8c_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu1c");
    static BFu8c_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu8c_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8c_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu1c(Test_BFu8c_BFu0i_BFu1c, "BFu8c_BFu0i_BFu1c", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu1i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8c_BFu0i_BFu1i) C1{ Fc:8 Fi:0 Fi:1}



static void Test_BFu8c_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu1i");
    static BFu8c_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8c_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu1i(Test_BFu8c_BFu0i_BFu1i, "BFu8c_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu1ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8c_BFu0i_BFu1ll) C1{ Fc:8 Fi:0 FL:1}



static void Test_BFu8c_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu1ll");
    static BFu8c_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8c_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu1ll(Test_BFu8c_BFu0i_BFu1ll, "BFu8c_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu1s  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8c_BFu0i_BFu1s) C1{ Fc:8 Fi:0 Fs:1}



static void Test_BFu8c_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu1s");
    static BFu8c_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8c_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8c_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu1s(Test_BFu8c_BFu0i_BFu1s, "BFu8c_BFu0i_BFu1s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu31i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8c_BFu0i_BFu31i) C1{ Fc:8 Fi:0 Fi:31}



static void Test_BFu8c_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu31i");
    static BFu8c_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8c_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu31i(Test_BFu8c_BFu0i_BFu31i, "BFu8c_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu31ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8c_BFu0i_BFu31ll) C1{ Fc:8 Fi:0 FL:31}



static void Test_BFu8c_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu31ll");
    static BFu8c_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8c_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu31ll(Test_BFu8c_BFu0i_BFu31ll, "BFu8c_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu32i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8c_BFu0i_BFu32i) C1{ Fc:8 Fi:0 Fi:32}



static void Test_BFu8c_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu32i");
    static BFu8c_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8c_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu32i(Test_BFu8c_BFu0i_BFu32i, "BFu8c_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu32ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8c_BFu0i_BFu32ll) C1{ Fc:8 Fi:0 FL:32}



static void Test_BFu8c_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu32ll");
    static BFu8c_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8c_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu32ll(Test_BFu8c_BFu0i_BFu32ll, "BFu8c_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu33  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8c_BFu0i_BFu33) C1{ Fc:8 Fi:0 FL:33}



static void Test_BFu8c_BFu0i_BFu33()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu33");
    static BFu8c_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu8c_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu8c_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu33(Test_BFu8c_BFu0i_BFu33, "BFu8c_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu7c  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8c_BFu0i_BFu7c) C1{ Fc:8 Fi:0 Fc:7}



static void Test_BFu8c_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu7c");
    static BFu8c_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu8c_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8c_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu7c(Test_BFu8c_BFu0i_BFu7c, "BFu8c_BFu0i_BFu7c", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu7i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8c_BFu0i_BFu7i) C1{ Fc:8 Fi:0 Fi:7}



static void Test_BFu8c_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu7i");
    static BFu8c_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8c_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu7i(Test_BFu8c_BFu0i_BFu7i, "BFu8c_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu7ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8c_BFu0i_BFu7ll) C1{ Fc:8 Fi:0 FL:7}



static void Test_BFu8c_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu7ll");
    static BFu8c_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8c_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu7ll(Test_BFu8c_BFu0i_BFu7ll, "BFu8c_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu7s  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8c_BFu0i_BFu7s) C1{ Fc:8 Fi:0 Fs:7}



static void Test_BFu8c_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu7s");
    static BFu8c_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8c_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8c_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu7s(Test_BFu8c_BFu0i_BFu7s, "BFu8c_BFu0i_BFu7s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu8c  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8c_BFu0i_BFu8c) C1{ Fc:8 Fi:0 Fc:8}



static void Test_BFu8c_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu8c");
    static BFu8c_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu8c_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8c_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu8c(Test_BFu8c_BFu0i_BFu8c, "BFu8c_BFu0i_BFu8c", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu8i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8c_BFu0i_BFu8i) C1{ Fc:8 Fi:0 Fi:8}



static void Test_BFu8c_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu8i");
    static BFu8c_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8c_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu8i(Test_BFu8c_BFu0i_BFu8i, "BFu8c_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu8ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8c_BFu0i_BFu8ll) C1{ Fc:8 Fi:0 FL:8}



static void Test_BFu8c_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu8ll");
    static BFu8c_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8c_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu8ll(Test_BFu8c_BFu0i_BFu8ll, "BFu8c_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu8s  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8c_BFu0i_BFu8s) C1{ Fc:8 Fi:0 Fs:8}



static void Test_BFu8c_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu8s");
    static BFu8c_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8c_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8c_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu8s(Test_BFu8c_BFu0i_BFu8s, "BFu8c_BFu0i_BFu8s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu9i  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8c_BFu0i_BFu9i) C1{ Fc:8 Fi:0 Fi:9}



static void Test_BFu8c_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu9i");
    static BFu8c_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8c_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu9i(Test_BFu8c_BFu0i_BFu9i, "BFu8c_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu9ll  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8c_BFu0i_BFu9ll) C1{ Fc:8 Fi:0 FL:9}



static void Test_BFu8c_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu9ll");
    static BFu8c_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8c_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu9ll(Test_BFu8c_BFu0i_BFu9ll, "BFu8c_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_BFu9s  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8c_BFu0i_BFu9s) C1{ Fc:8 Fi:0 Fs:9}



static void Test_BFu8c_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu8c_BFu0i_BFu9s");
    static BFu8c_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8c_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8c_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_BFu9s(Test_BFu8c_BFu0i_BFu9s, "BFu8c_BFu0i_BFu9s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_C  {
  unsigned char v1:8;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu8c_BFu0i_C) C1{ Fc:8 Fi:0 Fc}



static void Test_BFu8c_BFu0i_C()
{
  {
    init_simple_test("BFu8c_BFu0i_C");
    static BFu8c_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu8c_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_C(Test_BFu8c_BFu0i_C, "BFu8c_BFu0i_C", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_D  {
  unsigned char v1:8;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu8c_BFu0i_D) C1{ Fc:8 Fi:0 FL}



static void Test_BFu8c_BFu0i_D()
{
  {
    init_simple_test("BFu8c_BFu0i_D");
    static BFu8c_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_D(Test_BFu8c_BFu0i_D, "BFu8c_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_F  {
  unsigned char v1:8;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu8c_BFu0i_F) C1{ Fc:8 Fi:0 Fi}



static void Test_BFu8c_BFu0i_F()
{
  {
    init_simple_test("BFu8c_BFu0i_F");
    static BFu8c_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_F(Test_BFu8c_BFu0i_F, "BFu8c_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_I  {
  unsigned char v1:8;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu8c_BFu0i_I) C1{ Fc:8 Fi:0 Fi}



static void Test_BFu8c_BFu0i_I()
{
  {
    init_simple_test("BFu8c_BFu0i_I");
    static BFu8c_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_I(Test_BFu8c_BFu0i_I, "BFu8c_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_Ip  {
  unsigned char v1:8;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu8c_BFu0i_Ip) C1{ Fc:8 Fi:0 Fp}



static void Test_BFu8c_BFu0i_Ip()
{
  {
    init_simple_test("BFu8c_BFu0i_Ip");
    static BFu8c_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_Ip(Test_BFu8c_BFu0i_Ip, "BFu8c_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_L  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu8c_BFu0i_L) C1{ Fc:8 Fi:0 FL}



static void Test_BFu8c_BFu0i_L()
{
  {
    init_simple_test("BFu8c_BFu0i_L");
    static BFu8c_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_L(Test_BFu8c_BFu0i_L, "BFu8c_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_S  {
  unsigned char v1:8;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu8c_BFu0i_S) C1{ Fc:8 Fi:0 Fs}



static void Test_BFu8c_BFu0i_S()
{
  {
    init_simple_test("BFu8c_BFu0i_S");
    static BFu8c_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8c_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_S(Test_BFu8c_BFu0i_S, "BFu8c_BFu0i_S", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_Uc  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu8c_BFu0i_Uc) C1{ Fc:8 Fi:0 Fc}



static void Test_BFu8c_BFu0i_Uc()
{
  {
    init_simple_test("BFu8c_BFu0i_Uc");
    static BFu8c_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(BFu8c_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_Uc(Test_BFu8c_BFu0i_Uc, "BFu8c_BFu0i_Uc", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_Ui  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu8c_BFu0i_Ui) C1{ Fc:8 Fi:0 Fi}



static void Test_BFu8c_BFu0i_Ui()
{
  {
    init_simple_test("BFu8c_BFu0i_Ui");
    static BFu8c_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_Ui(Test_BFu8c_BFu0i_Ui, "BFu8c_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_Ul  {
  unsigned char v1:8;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu8c_BFu0i_Ul) C1{ Fc:8 Fi:0 FL}



static void Test_BFu8c_BFu0i_Ul()
{
  {
    init_simple_test("BFu8c_BFu0i_Ul");
    static BFu8c_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_Ul(Test_BFu8c_BFu0i_Ul, "BFu8c_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_Us  {
  unsigned char v1:8;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu8c_BFu0i_Us) C1{ Fc:8 Fi:0 Fs}



static void Test_BFu8c_BFu0i_Us()
{
  {
    init_simple_test("BFu8c_BFu0i_Us");
    static BFu8c_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8c_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_Us(Test_BFu8c_BFu0i_Us, "BFu8c_BFu0i_Us", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0i_Vp  {
  unsigned char v1:8;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu8c_BFu0i_Vp) C1{ Fc:8 Fi:0 Fp}



static void Test_BFu8c_BFu0i_Vp()
{
  {
    init_simple_test("BFu8c_BFu0i_Vp");
    static BFu8c_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0i_Vp(Test_BFu8c_BFu0i_Vp, "BFu8c_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll  {
  unsigned char v1:8;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu0ll) C1{ Fc:8 FL:0}



static void Test_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu0ll");
    static BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll(Test_BFu8c_BFu0ll, "BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu0c  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu0ll_BFu0c) C1{ Fc:8 FL:0 Fc:0}



static void Test_BFu8c_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu0c");
    static BFu8c_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu0c(Test_BFu8c_BFu0ll_BFu0c, "BFu8c_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu0i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu0ll_BFu0i) C1{ Fc:8 FL:0 Fi:0}



static void Test_BFu8c_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu0i");
    static BFu8c_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu0i(Test_BFu8c_BFu0ll_BFu0i, "BFu8c_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu0ll_BFu0ll) C1{ Fc:8 FL:0 FL:0}



static void Test_BFu8c_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu0ll");
    static BFu8c_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu0ll(Test_BFu8c_BFu0ll_BFu0ll, "BFu8c_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu0s  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu0ll_BFu0s) C1{ Fc:8 FL:0 Fs:0}



static void Test_BFu8c_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu0s");
    static BFu8c_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu0s(Test_BFu8c_BFu0ll_BFu0s, "BFu8c_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu15i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8c_BFu0ll_BFu15i) C1{ Fc:8 FL:0 Fi:15}



static void Test_BFu8c_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu15i");
    static BFu8c_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8c_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu15i(Test_BFu8c_BFu0ll_BFu15i, "BFu8c_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu15ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8c_BFu0ll_BFu15ll) C1{ Fc:8 FL:0 FL:15}



static void Test_BFu8c_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu15ll");
    static BFu8c_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8c_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu15ll(Test_BFu8c_BFu0ll_BFu15ll, "BFu8c_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu15s  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8c_BFu0ll_BFu15s) C1{ Fc:8 FL:0 Fs:15}



static void Test_BFu8c_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu15s");
    static BFu8c_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8c_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8c_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu15s(Test_BFu8c_BFu0ll_BFu15s, "BFu8c_BFu0ll_BFu15s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu16i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8c_BFu0ll_BFu16i) C1{ Fc:8 FL:0 Fi:16}



static void Test_BFu8c_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu16i");
    static BFu8c_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8c_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu16i(Test_BFu8c_BFu0ll_BFu16i, "BFu8c_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu16ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8c_BFu0ll_BFu16ll) C1{ Fc:8 FL:0 FL:16}



static void Test_BFu8c_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu16ll");
    static BFu8c_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8c_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu16ll(Test_BFu8c_BFu0ll_BFu16ll, "BFu8c_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu16s  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8c_BFu0ll_BFu16s) C1{ Fc:8 FL:0 Fs:16}



static void Test_BFu8c_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu16s");
    static BFu8c_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8c_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8c_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu16s(Test_BFu8c_BFu0ll_BFu16s, "BFu8c_BFu0ll_BFu16s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu17i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8c_BFu0ll_BFu17i) C1{ Fc:8 FL:0 Fi:17}



static void Test_BFu8c_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu17i");
    static BFu8c_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu8c_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu8c_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu17i(Test_BFu8c_BFu0ll_BFu17i, "BFu8c_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu17ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8c_BFu0ll_BFu17ll) C1{ Fc:8 FL:0 FL:17}



static void Test_BFu8c_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu17ll");
    static BFu8c_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu8c_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu8c_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu17ll(Test_BFu8c_BFu0ll_BFu17ll, "BFu8c_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu1c  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8c_BFu0ll_BFu1c) C1{ Fc:8 FL:0 Fc:1}



static void Test_BFu8c_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu1c");
    static BFu8c_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu8c_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8c_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu1c(Test_BFu8c_BFu0ll_BFu1c, "BFu8c_BFu0ll_BFu1c", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu1i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8c_BFu0ll_BFu1i) C1{ Fc:8 FL:0 Fi:1}



static void Test_BFu8c_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu1i");
    static BFu8c_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8c_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu1i(Test_BFu8c_BFu0ll_BFu1i, "BFu8c_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu1ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8c_BFu0ll_BFu1ll) C1{ Fc:8 FL:0 FL:1}



static void Test_BFu8c_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu1ll");
    static BFu8c_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8c_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu1ll(Test_BFu8c_BFu0ll_BFu1ll, "BFu8c_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu1s  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8c_BFu0ll_BFu1s) C1{ Fc:8 FL:0 Fs:1}



static void Test_BFu8c_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu1s");
    static BFu8c_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8c_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8c_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu1s(Test_BFu8c_BFu0ll_BFu1s, "BFu8c_BFu0ll_BFu1s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu31i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8c_BFu0ll_BFu31i) C1{ Fc:8 FL:0 Fi:31}



static void Test_BFu8c_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu31i");
    static BFu8c_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu8c_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu8c_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu31i(Test_BFu8c_BFu0ll_BFu31i, "BFu8c_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu31ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8c_BFu0ll_BFu31ll) C1{ Fc:8 FL:0 FL:31}



static void Test_BFu8c_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu31ll");
    static BFu8c_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu8c_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu8c_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu31ll(Test_BFu8c_BFu0ll_BFu31ll, "BFu8c_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu32i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8c_BFu0ll_BFu32i) C1{ Fc:8 FL:0 Fi:32}



static void Test_BFu8c_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu32i");
    static BFu8c_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu8c_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu8c_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu32i(Test_BFu8c_BFu0ll_BFu32i, "BFu8c_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu32ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8c_BFu0ll_BFu32ll) C1{ Fc:8 FL:0 FL:32}



static void Test_BFu8c_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu32ll");
    static BFu8c_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu8c_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu8c_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu32ll(Test_BFu8c_BFu0ll_BFu32ll, "BFu8c_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu33  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8c_BFu0ll_BFu33) C1{ Fc:8 FL:0 FL:33}



static void Test_BFu8c_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu33");
    static BFu8c_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu8c_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu8c_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu33(Test_BFu8c_BFu0ll_BFu33, "BFu8c_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu7c  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8c_BFu0ll_BFu7c) C1{ Fc:8 FL:0 Fc:7}



static void Test_BFu8c_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu7c");
    static BFu8c_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu8c_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8c_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu7c(Test_BFu8c_BFu0ll_BFu7c, "BFu8c_BFu0ll_BFu7c", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu7i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8c_BFu0ll_BFu7i) C1{ Fc:8 FL:0 Fi:7}



static void Test_BFu8c_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu7i");
    static BFu8c_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8c_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu7i(Test_BFu8c_BFu0ll_BFu7i, "BFu8c_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu7ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8c_BFu0ll_BFu7ll) C1{ Fc:8 FL:0 FL:7}



static void Test_BFu8c_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu7ll");
    static BFu8c_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8c_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu7ll(Test_BFu8c_BFu0ll_BFu7ll, "BFu8c_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu7s  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8c_BFu0ll_BFu7s) C1{ Fc:8 FL:0 Fs:7}



static void Test_BFu8c_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu7s");
    static BFu8c_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8c_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8c_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu7s(Test_BFu8c_BFu0ll_BFu7s, "BFu8c_BFu0ll_BFu7s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu8c  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8c_BFu0ll_BFu8c) C1{ Fc:8 FL:0 Fc:8}



static void Test_BFu8c_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu8c");
    static BFu8c_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu8c_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8c_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu8c(Test_BFu8c_BFu0ll_BFu8c, "BFu8c_BFu0ll_BFu8c", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu8i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8c_BFu0ll_BFu8i) C1{ Fc:8 FL:0 Fi:8}



static void Test_BFu8c_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu8i");
    static BFu8c_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8c_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu8i(Test_BFu8c_BFu0ll_BFu8i, "BFu8c_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu8ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8c_BFu0ll_BFu8ll) C1{ Fc:8 FL:0 FL:8}



static void Test_BFu8c_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu8ll");
    static BFu8c_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8c_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu8ll(Test_BFu8c_BFu0ll_BFu8ll, "BFu8c_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu8s  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8c_BFu0ll_BFu8s) C1{ Fc:8 FL:0 Fs:8}



static void Test_BFu8c_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu8s");
    static BFu8c_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8c_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8c_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu8s(Test_BFu8c_BFu0ll_BFu8s, "BFu8c_BFu0ll_BFu8s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu9i  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8c_BFu0ll_BFu9i) C1{ Fc:8 FL:0 Fi:9}



static void Test_BFu8c_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu9i");
    static BFu8c_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8c_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu9i(Test_BFu8c_BFu0ll_BFu9i, "BFu8c_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu9ll  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8c_BFu0ll_BFu9ll) C1{ Fc:8 FL:0 FL:9}



static void Test_BFu8c_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu9ll");
    static BFu8c_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8c_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu9ll(Test_BFu8c_BFu0ll_BFu9ll, "BFu8c_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_BFu9s  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8c_BFu0ll_BFu9s) C1{ Fc:8 FL:0 Fs:9}



static void Test_BFu8c_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu8c_BFu0ll_BFu9s");
    static BFu8c_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8c_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8c_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_BFu9s(Test_BFu8c_BFu0ll_BFu9s, "BFu8c_BFu0ll_BFu9s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_C  {
  unsigned char v1:8;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu8c_BFu0ll_C) C1{ Fc:8 FL:0 Fc}



static void Test_BFu8c_BFu0ll_C()
{
  {
    init_simple_test("BFu8c_BFu0ll_C");
    static BFu8c_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu8c_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_C(Test_BFu8c_BFu0ll_C, "BFu8c_BFu0ll_C", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_D  {
  unsigned char v1:8;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu8c_BFu0ll_D) C1{ Fc:8 FL:0 FL}



static void Test_BFu8c_BFu0ll_D()
{
  {
    init_simple_test("BFu8c_BFu0ll_D");
    static BFu8c_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_D(Test_BFu8c_BFu0ll_D, "BFu8c_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_F  {
  unsigned char v1:8;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu8c_BFu0ll_F) C1{ Fc:8 FL:0 Fi}



static void Test_BFu8c_BFu0ll_F()
{
  {
    init_simple_test("BFu8c_BFu0ll_F");
    static BFu8c_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_F(Test_BFu8c_BFu0ll_F, "BFu8c_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_I  {
  unsigned char v1:8;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu8c_BFu0ll_I) C1{ Fc:8 FL:0 Fi}



static void Test_BFu8c_BFu0ll_I()
{
  {
    init_simple_test("BFu8c_BFu0ll_I");
    static BFu8c_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_I(Test_BFu8c_BFu0ll_I, "BFu8c_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_Ip  {
  unsigned char v1:8;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu8c_BFu0ll_Ip) C1{ Fc:8 FL:0 Fp}



static void Test_BFu8c_BFu0ll_Ip()
{
  {
    init_simple_test("BFu8c_BFu0ll_Ip");
    static BFu8c_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_Ip(Test_BFu8c_BFu0ll_Ip, "BFu8c_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_L  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu8c_BFu0ll_L) C1{ Fc:8 FL:0 FL}



static void Test_BFu8c_BFu0ll_L()
{
  {
    init_simple_test("BFu8c_BFu0ll_L");
    static BFu8c_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_L(Test_BFu8c_BFu0ll_L, "BFu8c_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_S  {
  unsigned char v1:8;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu8c_BFu0ll_S) C1{ Fc:8 FL:0 Fs}



static void Test_BFu8c_BFu0ll_S()
{
  {
    init_simple_test("BFu8c_BFu0ll_S");
    static BFu8c_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8c_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_S(Test_BFu8c_BFu0ll_S, "BFu8c_BFu0ll_S", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_Uc  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu8c_BFu0ll_Uc) C1{ Fc:8 FL:0 Fc}



static void Test_BFu8c_BFu0ll_Uc()
{
  {
    init_simple_test("BFu8c_BFu0ll_Uc");
    static BFu8c_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(BFu8c_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_Uc(Test_BFu8c_BFu0ll_Uc, "BFu8c_BFu0ll_Uc", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_Ui  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu8c_BFu0ll_Ui) C1{ Fc:8 FL:0 Fi}



static void Test_BFu8c_BFu0ll_Ui()
{
  {
    init_simple_test("BFu8c_BFu0ll_Ui");
    static BFu8c_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8c_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_Ui(Test_BFu8c_BFu0ll_Ui, "BFu8c_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_Ul  {
  unsigned char v1:8;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu8c_BFu0ll_Ul) C1{ Fc:8 FL:0 FL}



static void Test_BFu8c_BFu0ll_Ul()
{
  {
    init_simple_test("BFu8c_BFu0ll_Ul");
    static BFu8c_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_Ul(Test_BFu8c_BFu0ll_Ul, "BFu8c_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_Us  {
  unsigned char v1:8;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu8c_BFu0ll_Us) C1{ Fc:8 FL:0 Fs}



static void Test_BFu8c_BFu0ll_Us()
{
  {
    init_simple_test("BFu8c_BFu0ll_Us");
    static BFu8c_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8c_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_Us(Test_BFu8c_BFu0ll_Us, "BFu8c_BFu0ll_Us", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0ll_Vp  {
  unsigned char v1:8;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu8c_BFu0ll_Vp) C1{ Fc:8 FL:0 Fp}



static void Test_BFu8c_BFu0ll_Vp()
{
  {
    init_simple_test("BFu8c_BFu0ll_Vp");
    static BFu8c_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0ll_Vp(Test_BFu8c_BFu0ll_Vp, "BFu8c_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s  {
  unsigned char v1:8;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu0s) C1{ Fc:8 Fs:0}



static void Test_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu0s");
    static BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s(Test_BFu8c_BFu0s, "BFu8c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu0c  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu0s_BFu0c) C1{ Fc:8 Fs:0 Fc:0}



static void Test_BFu8c_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu0c");
    static BFu8c_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu0c(Test_BFu8c_BFu0s_BFu0c, "BFu8c_BFu0s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu0i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu0s_BFu0i) C1{ Fc:8 Fs:0 Fi:0}



static void Test_BFu8c_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu0i");
    static BFu8c_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu0i(Test_BFu8c_BFu0s_BFu0i, "BFu8c_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu0ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu0s_BFu0ll) C1{ Fc:8 Fs:0 FL:0}



static void Test_BFu8c_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu0ll");
    static BFu8c_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu0ll(Test_BFu8c_BFu0s_BFu0ll, "BFu8c_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu0s  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu0s_BFu0s) C1{ Fc:8 Fs:0 Fs:0}



static void Test_BFu8c_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu0s");
    static BFu8c_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu0s(Test_BFu8c_BFu0s_BFu0s, "BFu8c_BFu0s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu15i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8c_BFu0s_BFu15i) C1{ Fc:8 Fs:0 Fi:15}



static void Test_BFu8c_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu15i");
    static BFu8c_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8c_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu15i(Test_BFu8c_BFu0s_BFu15i, "BFu8c_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu15ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8c_BFu0s_BFu15ll) C1{ Fc:8 Fs:0 FL:15}



static void Test_BFu8c_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu15ll");
    static BFu8c_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8c_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu15ll(Test_BFu8c_BFu0s_BFu15ll, "BFu8c_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu15s  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8c_BFu0s_BFu15s) C1{ Fc:8 Fs:0 Fs:15}



static void Test_BFu8c_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu15s");
    static BFu8c_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8c_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu15s(Test_BFu8c_BFu0s_BFu15s, "BFu8c_BFu0s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu16i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8c_BFu0s_BFu16i) C1{ Fc:8 Fs:0 Fi:16}



static void Test_BFu8c_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu16i");
    static BFu8c_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8c_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu16i(Test_BFu8c_BFu0s_BFu16i, "BFu8c_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu16ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8c_BFu0s_BFu16ll) C1{ Fc:8 Fs:0 FL:16}



static void Test_BFu8c_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu16ll");
    static BFu8c_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8c_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu16ll(Test_BFu8c_BFu0s_BFu16ll, "BFu8c_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu16s  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8c_BFu0s_BFu16s) C1{ Fc:8 Fs:0 Fs:16}



static void Test_BFu8c_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu16s");
    static BFu8c_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8c_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu16s(Test_BFu8c_BFu0s_BFu16s, "BFu8c_BFu0s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu17i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8c_BFu0s_BFu17i) C1{ Fc:8 Fs:0 Fi:17}



static void Test_BFu8c_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu17i");
    static BFu8c_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8c_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu17i(Test_BFu8c_BFu0s_BFu17i, "BFu8c_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu17ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8c_BFu0s_BFu17ll) C1{ Fc:8 Fs:0 FL:17}



static void Test_BFu8c_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu17ll");
    static BFu8c_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu8c_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu17ll(Test_BFu8c_BFu0s_BFu17ll, "BFu8c_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu1c  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8c_BFu0s_BFu1c) C1{ Fc:8 Fs:0 Fc:1}



static void Test_BFu8c_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu1c");
    static BFu8c_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu8c_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8c_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu1c(Test_BFu8c_BFu0s_BFu1c, "BFu8c_BFu0s_BFu1c", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu1i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8c_BFu0s_BFu1i) C1{ Fc:8 Fs:0 Fi:1}



static void Test_BFu8c_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu1i");
    static BFu8c_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8c_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu1i(Test_BFu8c_BFu0s_BFu1i, "BFu8c_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu1ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8c_BFu0s_BFu1ll) C1{ Fc:8 Fs:0 FL:1}



static void Test_BFu8c_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu1ll");
    static BFu8c_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8c_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu1ll(Test_BFu8c_BFu0s_BFu1ll, "BFu8c_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu1s  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8c_BFu0s_BFu1s) C1{ Fc:8 Fs:0 Fs:1}



static void Test_BFu8c_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu1s");
    static BFu8c_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8c_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu1s(Test_BFu8c_BFu0s_BFu1s, "BFu8c_BFu0s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu31i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8c_BFu0s_BFu31i) C1{ Fc:8 Fs:0 Fi:31}



static void Test_BFu8c_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu31i");
    static BFu8c_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8c_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu31i(Test_BFu8c_BFu0s_BFu31i, "BFu8c_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu31ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8c_BFu0s_BFu31ll) C1{ Fc:8 Fs:0 FL:31}



static void Test_BFu8c_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu31ll");
    static BFu8c_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu8c_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu31ll(Test_BFu8c_BFu0s_BFu31ll, "BFu8c_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu32i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8c_BFu0s_BFu32i) C1{ Fc:8 Fs:0 Fi:32}



static void Test_BFu8c_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu32i");
    static BFu8c_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8c_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu32i(Test_BFu8c_BFu0s_BFu32i, "BFu8c_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu32ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8c_BFu0s_BFu32ll) C1{ Fc:8 Fs:0 FL:32}



static void Test_BFu8c_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu32ll");
    static BFu8c_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu8c_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu32ll(Test_BFu8c_BFu0s_BFu32ll, "BFu8c_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu33  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8c_BFu0s_BFu33) C1{ Fc:8 Fs:0 FL:33}



static void Test_BFu8c_BFu0s_BFu33()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu33");
    static BFu8c_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu8c_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu8c_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu33(Test_BFu8c_BFu0s_BFu33, "BFu8c_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu7c  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8c_BFu0s_BFu7c) C1{ Fc:8 Fs:0 Fc:7}



static void Test_BFu8c_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu7c");
    static BFu8c_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu8c_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8c_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu7c(Test_BFu8c_BFu0s_BFu7c, "BFu8c_BFu0s_BFu7c", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu7i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8c_BFu0s_BFu7i) C1{ Fc:8 Fs:0 Fi:7}



static void Test_BFu8c_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu7i");
    static BFu8c_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8c_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu7i(Test_BFu8c_BFu0s_BFu7i, "BFu8c_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu7ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8c_BFu0s_BFu7ll) C1{ Fc:8 Fs:0 FL:7}



static void Test_BFu8c_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu7ll");
    static BFu8c_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8c_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu7ll(Test_BFu8c_BFu0s_BFu7ll, "BFu8c_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu7s  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8c_BFu0s_BFu7s) C1{ Fc:8 Fs:0 Fs:7}



static void Test_BFu8c_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu7s");
    static BFu8c_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8c_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu7s(Test_BFu8c_BFu0s_BFu7s, "BFu8c_BFu0s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu8c  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8c_BFu0s_BFu8c) C1{ Fc:8 Fs:0 Fc:8}



static void Test_BFu8c_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu8c");
    static BFu8c_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu8c_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8c_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu8c(Test_BFu8c_BFu0s_BFu8c, "BFu8c_BFu0s_BFu8c", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu8i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8c_BFu0s_BFu8i) C1{ Fc:8 Fs:0 Fi:8}



static void Test_BFu8c_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu8i");
    static BFu8c_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8c_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu8i(Test_BFu8c_BFu0s_BFu8i, "BFu8c_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu8ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8c_BFu0s_BFu8ll) C1{ Fc:8 Fs:0 FL:8}



static void Test_BFu8c_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu8ll");
    static BFu8c_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8c_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu8ll(Test_BFu8c_BFu0s_BFu8ll, "BFu8c_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu8s  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8c_BFu0s_BFu8s) C1{ Fc:8 Fs:0 Fs:8}



static void Test_BFu8c_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu8s");
    static BFu8c_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8c_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu8s(Test_BFu8c_BFu0s_BFu8s, "BFu8c_BFu0s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu9i  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8c_BFu0s_BFu9i) C1{ Fc:8 Fs:0 Fi:9}



static void Test_BFu8c_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu9i");
    static BFu8c_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8c_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu9i(Test_BFu8c_BFu0s_BFu9i, "BFu8c_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu9ll  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8c_BFu0s_BFu9ll) C1{ Fc:8 Fs:0 FL:9}



static void Test_BFu8c_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu9ll");
    static BFu8c_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8c_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu9ll(Test_BFu8c_BFu0s_BFu9ll, "BFu8c_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_BFu9s  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8c_BFu0s_BFu9s) C1{ Fc:8 Fs:0 Fs:9}



static void Test_BFu8c_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu8c_BFu0s_BFu9s");
    static BFu8c_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8c_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_BFu9s(Test_BFu8c_BFu0s_BFu9s, "BFu8c_BFu0s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_C  {
  unsigned char v1:8;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu8c_BFu0s_C) C1{ Fc:8 Fs:0 Fc}



static void Test_BFu8c_BFu0s_C()
{
  {
    init_simple_test("BFu8c_BFu0s_C");
    static BFu8c_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu8c_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu8c_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_C(Test_BFu8c_BFu0s_C, "BFu8c_BFu0s_C", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_D  {
  unsigned char v1:8;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu8c_BFu0s_D) C1{ Fc:8 Fs:0 FL}



static void Test_BFu8c_BFu0s_D()
{
  {
    init_simple_test("BFu8c_BFu0s_D");
    static BFu8c_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_D(Test_BFu8c_BFu0s_D, "BFu8c_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_F  {
  unsigned char v1:8;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu8c_BFu0s_F) C1{ Fc:8 Fs:0 Fi}



static void Test_BFu8c_BFu0s_F()
{
  {
    init_simple_test("BFu8c_BFu0s_F");
    static BFu8c_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_F(Test_BFu8c_BFu0s_F, "BFu8c_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_I  {
  unsigned char v1:8;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu8c_BFu0s_I) C1{ Fc:8 Fs:0 Fi}



static void Test_BFu8c_BFu0s_I()
{
  {
    init_simple_test("BFu8c_BFu0s_I");
    static BFu8c_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_I(Test_BFu8c_BFu0s_I, "BFu8c_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_Ip  {
  unsigned char v1:8;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu8c_BFu0s_Ip) C1{ Fc:8 Fs:0 Fp}



static void Test_BFu8c_BFu0s_Ip()
{
  {
    init_simple_test("BFu8c_BFu0s_Ip");
    static BFu8c_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_Ip(Test_BFu8c_BFu0s_Ip, "BFu8c_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_L  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu8c_BFu0s_L) C1{ Fc:8 Fs:0 FL}



static void Test_BFu8c_BFu0s_L()
{
  {
    init_simple_test("BFu8c_BFu0s_L");
    static BFu8c_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_L(Test_BFu8c_BFu0s_L, "BFu8c_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_S  {
  unsigned char v1:8;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu8c_BFu0s_S) C1{ Fc:8 Fs:0 Fs}



static void Test_BFu8c_BFu0s_S()
{
  {
    init_simple_test("BFu8c_BFu0s_S");
    static BFu8c_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu8c_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_S(Test_BFu8c_BFu0s_S, "BFu8c_BFu0s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_Uc  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu8c_BFu0s_Uc) C1{ Fc:8 Fs:0 Fc}



static void Test_BFu8c_BFu0s_Uc()
{
  {
    init_simple_test("BFu8c_BFu0s_Uc");
    static BFu8c_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(BFu8c_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu8c_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_Uc(Test_BFu8c_BFu0s_Uc, "BFu8c_BFu0s_Uc", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_Ui  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu8c_BFu0s_Ui) C1{ Fc:8 Fs:0 Fi}



static void Test_BFu8c_BFu0s_Ui()
{
  {
    init_simple_test("BFu8c_BFu0s_Ui");
    static BFu8c_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu8c_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_Ui(Test_BFu8c_BFu0s_Ui, "BFu8c_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_Ul  {
  unsigned char v1:8;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu8c_BFu0s_Ul) C1{ Fc:8 Fs:0 FL}



static void Test_BFu8c_BFu0s_Ul()
{
  {
    init_simple_test("BFu8c_BFu0s_Ul");
    static BFu8c_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_Ul(Test_BFu8c_BFu0s_Ul, "BFu8c_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_Us  {
  unsigned char v1:8;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu8c_BFu0s_Us) C1{ Fc:8 Fs:0 Fs}



static void Test_BFu8c_BFu0s_Us()
{
  {
    init_simple_test("BFu8c_BFu0s_Us");
    static BFu8c_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu8c_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_Us(Test_BFu8c_BFu0s_Us, "BFu8c_BFu0s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu0s_Vp  {
  unsigned char v1:8;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu8c_BFu0s_Vp) C1{ Fc:8 Fs:0 Fp}



static void Test_BFu8c_BFu0s_Vp()
{
  {
    init_simple_test("BFu8c_BFu0s_Vp");
    static BFu8c_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu0s_Vp(Test_BFu8c_BFu0s_Vp, "BFu8c_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15i_BFu0c  {
  unsigned char v1:8;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu15i_BFu0c) C1{ Fc:8 Fi:15 Fc:0}



static void Test_BFu8c_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu15i_BFu0c");
    static BFu8c_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15i_BFu0c(Test_BFu8c_BFu15i_BFu0c, "BFu8c_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15i_BFu0i  {
  unsigned char v1:8;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu15i_BFu0i) C1{ Fc:8 Fi:15 Fi:0}



static void Test_BFu8c_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu15i_BFu0i");
    static BFu8c_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15i_BFu0i(Test_BFu8c_BFu15i_BFu0i, "BFu8c_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15i_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu15i_BFu0ll) C1{ Fc:8 Fi:15 FL:0}



static void Test_BFu8c_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu15i_BFu0ll");
    static BFu8c_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15i_BFu0ll(Test_BFu8c_BFu15i_BFu0ll, "BFu8c_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15i_BFu0s  {
  unsigned char v1:8;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu15i_BFu0s) C1{ Fc:8 Fi:15 Fs:0}



static void Test_BFu8c_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu15i_BFu0s");
    static BFu8c_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15i_BFu0s(Test_BFu8c_BFu15i_BFu0s, "BFu8c_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15ll_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu15ll_BFu0c) C1{ Fc:8 FL:15 Fc:0}



static void Test_BFu8c_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu15ll_BFu0c");
    static BFu8c_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15ll_BFu0c(Test_BFu8c_BFu15ll_BFu0c, "BFu8c_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15ll_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu15ll_BFu0i) C1{ Fc:8 FL:15 Fi:0}



static void Test_BFu8c_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu15ll_BFu0i");
    static BFu8c_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15ll_BFu0i(Test_BFu8c_BFu15ll_BFu0i, "BFu8c_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu15ll_BFu0ll) C1{ Fc:8 FL:15 FL:0}



static void Test_BFu8c_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu15ll_BFu0ll");
    static BFu8c_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15ll_BFu0ll(Test_BFu8c_BFu15ll_BFu0ll, "BFu8c_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15ll_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu15ll_BFu0s) C1{ Fc:8 FL:15 Fs:0}



static void Test_BFu8c_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu15ll_BFu0s");
    static BFu8c_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8c_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15ll_BFu0s(Test_BFu8c_BFu15ll_BFu0s, "BFu8c_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15s_BFu0c  {
  unsigned char v1:8;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu15s_BFu0c) C1{ Fc:8 Fs:15 Fc:0}



static void Test_BFu8c_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu15s_BFu0c");
    static BFu8c_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8c_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15s_BFu0c(Test_BFu8c_BFu15s_BFu0c, "BFu8c_BFu15s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15s_BFu0i  {
  unsigned char v1:8;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu15s_BFu0i) C1{ Fc:8 Fs:15 Fi:0}



static void Test_BFu8c_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu15s_BFu0i");
    static BFu8c_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8c_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15s_BFu0i(Test_BFu8c_BFu15s_BFu0i, "BFu8c_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15s_BFu0ll  {
  unsigned char v1:8;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu15s_BFu0ll) C1{ Fc:8 Fs:15 FL:0}



static void Test_BFu8c_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu15s_BFu0ll");
    static BFu8c_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8c_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15s_BFu0ll(Test_BFu8c_BFu15s_BFu0ll, "BFu8c_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu15s_BFu0s  {
  unsigned char v1:8;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu15s_BFu0s) C1{ Fc:8 Fs:15 Fs:0}



static void Test_BFu8c_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu15s_BFu0s");
    static BFu8c_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8c_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8c_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu15s_BFu0s(Test_BFu8c_BFu15s_BFu0s, "BFu8c_BFu15s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16i_BFu0c  {
  unsigned char v1:8;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu16i_BFu0c) C1{ Fc:8 Fi:16 Fc:0}



static void Test_BFu8c_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu16i_BFu0c");
    static BFu8c_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16i_BFu0c(Test_BFu8c_BFu16i_BFu0c, "BFu8c_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16i_BFu0i  {
  unsigned char v1:8;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu16i_BFu0i) C1{ Fc:8 Fi:16 Fi:0}



static void Test_BFu8c_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu16i_BFu0i");
    static BFu8c_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16i_BFu0i(Test_BFu8c_BFu16i_BFu0i, "BFu8c_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16i_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu16i_BFu0ll) C1{ Fc:8 Fi:16 FL:0}



static void Test_BFu8c_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu16i_BFu0ll");
    static BFu8c_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16i_BFu0ll(Test_BFu8c_BFu16i_BFu0ll, "BFu8c_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16i_BFu0s  {
  unsigned char v1:8;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu16i_BFu0s) C1{ Fc:8 Fi:16 Fs:0}



static void Test_BFu8c_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu16i_BFu0s");
    static BFu8c_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16i_BFu0s(Test_BFu8c_BFu16i_BFu0s, "BFu8c_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16ll_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu16ll_BFu0c) C1{ Fc:8 FL:16 Fc:0}



static void Test_BFu8c_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu16ll_BFu0c");
    static BFu8c_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16ll_BFu0c(Test_BFu8c_BFu16ll_BFu0c, "BFu8c_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16ll_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu16ll_BFu0i) C1{ Fc:8 FL:16 Fi:0}



static void Test_BFu8c_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu16ll_BFu0i");
    static BFu8c_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16ll_BFu0i(Test_BFu8c_BFu16ll_BFu0i, "BFu8c_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu16ll_BFu0ll) C1{ Fc:8 FL:16 FL:0}



static void Test_BFu8c_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu16ll_BFu0ll");
    static BFu8c_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16ll_BFu0ll(Test_BFu8c_BFu16ll_BFu0ll, "BFu8c_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16ll_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu16ll_BFu0s) C1{ Fc:8 FL:16 Fs:0}



static void Test_BFu8c_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu16ll_BFu0s");
    static BFu8c_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8c_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16ll_BFu0s(Test_BFu8c_BFu16ll_BFu0s, "BFu8c_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16s_BFu0c  {
  unsigned char v1:8;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu16s_BFu0c) C1{ Fc:8 Fs:16 Fc:0}



static void Test_BFu8c_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu16s_BFu0c");
    static BFu8c_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8c_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16s_BFu0c(Test_BFu8c_BFu16s_BFu0c, "BFu8c_BFu16s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16s_BFu0i  {
  unsigned char v1:8;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu16s_BFu0i) C1{ Fc:8 Fs:16 Fi:0}



static void Test_BFu8c_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu16s_BFu0i");
    static BFu8c_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8c_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16s_BFu0i(Test_BFu8c_BFu16s_BFu0i, "BFu8c_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16s_BFu0ll  {
  unsigned char v1:8;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu16s_BFu0ll) C1{ Fc:8 Fs:16 FL:0}



static void Test_BFu8c_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu16s_BFu0ll");
    static BFu8c_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8c_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16s_BFu0ll(Test_BFu8c_BFu16s_BFu0ll, "BFu8c_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu16s_BFu0s  {
  unsigned char v1:8;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu16s_BFu0s) C1{ Fc:8 Fs:16 Fs:0}



static void Test_BFu8c_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu16s_BFu0s");
    static BFu8c_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8c_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8c_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu16s_BFu0s(Test_BFu8c_BFu16s_BFu0s, "BFu8c_BFu16s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu17i_BFu0c  {
  unsigned char v1:8;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu17i_BFu0c) C1{ Fc:8 Fi:17 Fc:0}



static void Test_BFu8c_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu17i_BFu0c");
    static BFu8c_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu17i_BFu0c(Test_BFu8c_BFu17i_BFu0c, "BFu8c_BFu17i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu17i_BFu0i  {
  unsigned char v1:8;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu17i_BFu0i) C1{ Fc:8 Fi:17 Fi:0}



static void Test_BFu8c_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu17i_BFu0i");
    static BFu8c_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu17i_BFu0i(Test_BFu8c_BFu17i_BFu0i, "BFu8c_BFu17i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu17i_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu17i_BFu0ll) C1{ Fc:8 Fi:17 FL:0}



static void Test_BFu8c_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu17i_BFu0ll");
    static BFu8c_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu17i_BFu0ll(Test_BFu8c_BFu17i_BFu0ll, "BFu8c_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu17i_BFu0s  {
  unsigned char v1:8;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu17i_BFu0s) C1{ Fc:8 Fi:17 Fs:0}



static void Test_BFu8c_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu17i_BFu0s");
    static BFu8c_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu17i_BFu0s(Test_BFu8c_BFu17i_BFu0s, "BFu8c_BFu17i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu17ll_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu17ll_BFu0c) C1{ Fc:8 FL:17 Fc:0}



static void Test_BFu8c_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu17ll_BFu0c");
    static BFu8c_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu17ll_BFu0c(Test_BFu8c_BFu17ll_BFu0c, "BFu8c_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu17ll_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu17ll_BFu0i) C1{ Fc:8 FL:17 Fi:0}



static void Test_BFu8c_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu17ll_BFu0i");
    static BFu8c_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu17ll_BFu0i(Test_BFu8c_BFu17ll_BFu0i, "BFu8c_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu17ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu17ll_BFu0ll) C1{ Fc:8 FL:17 FL:0}



static void Test_BFu8c_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu17ll_BFu0ll");
    static BFu8c_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu17ll_BFu0ll(Test_BFu8c_BFu17ll_BFu0ll, "BFu8c_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu17ll_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu17ll_BFu0s) C1{ Fc:8 FL:17 Fs:0}



static void Test_BFu8c_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu17ll_BFu0s");
    static BFu8c_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8c_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8c_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu17ll_BFu0s(Test_BFu8c_BFu17ll_BFu0s, "BFu8c_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1c_BFu0c  {
  unsigned char v1:8;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu1c_BFu0c) C1{ Fc:8 Fc:1 Fc:0}



static void Test_BFu8c_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu1c_BFu0c");
    static BFu8c_BFu1c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu1c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1c_BFu0c(Test_BFu8c_BFu1c_BFu0c, "BFu8c_BFu1c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1c_BFu0i  {
  unsigned char v1:8;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu1c_BFu0i) C1{ Fc:8 Fc:1 Fi:0}



static void Test_BFu8c_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu1c_BFu0i");
    static BFu8c_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1c_BFu0i(Test_BFu8c_BFu1c_BFu0i, "BFu8c_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1c_BFu0ll  {
  unsigned char v1:8;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu1c_BFu0ll) C1{ Fc:8 Fc:1 FL:0}



static void Test_BFu8c_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu1c_BFu0ll");
    static BFu8c_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1c_BFu0ll(Test_BFu8c_BFu1c_BFu0ll, "BFu8c_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1c_BFu0s  {
  unsigned char v1:8;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu1c_BFu0s) C1{ Fc:8 Fc:1 Fs:0}



static void Test_BFu8c_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu1c_BFu0s");
    static BFu8c_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1c_BFu0s(Test_BFu8c_BFu1c_BFu0s, "BFu8c_BFu1c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1i_BFu0c  {
  unsigned char v1:8;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu1i_BFu0c) C1{ Fc:8 Fi:1 Fc:0}



static void Test_BFu8c_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu1i_BFu0c");
    static BFu8c_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1i_BFu0c(Test_BFu8c_BFu1i_BFu0c, "BFu8c_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1i_BFu0i  {
  unsigned char v1:8;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu1i_BFu0i) C1{ Fc:8 Fi:1 Fi:0}



static void Test_BFu8c_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu1i_BFu0i");
    static BFu8c_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1i_BFu0i(Test_BFu8c_BFu1i_BFu0i, "BFu8c_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1i_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu1i_BFu0ll) C1{ Fc:8 Fi:1 FL:0}



static void Test_BFu8c_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu1i_BFu0ll");
    static BFu8c_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1i_BFu0ll(Test_BFu8c_BFu1i_BFu0ll, "BFu8c_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1i_BFu0s  {
  unsigned char v1:8;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu1i_BFu0s) C1{ Fc:8 Fi:1 Fs:0}



static void Test_BFu8c_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu1i_BFu0s");
    static BFu8c_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1i_BFu0s(Test_BFu8c_BFu1i_BFu0s, "BFu8c_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1ll_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu1ll_BFu0c) C1{ Fc:8 FL:1 Fc:0}



static void Test_BFu8c_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu1ll_BFu0c");
    static BFu8c_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1ll_BFu0c(Test_BFu8c_BFu1ll_BFu0c, "BFu8c_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1ll_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu1ll_BFu0i) C1{ Fc:8 FL:1 Fi:0}



static void Test_BFu8c_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu1ll_BFu0i");
    static BFu8c_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1ll_BFu0i(Test_BFu8c_BFu1ll_BFu0i, "BFu8c_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu1ll_BFu0ll) C1{ Fc:8 FL:1 FL:0}



static void Test_BFu8c_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu1ll_BFu0ll");
    static BFu8c_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1ll_BFu0ll(Test_BFu8c_BFu1ll_BFu0ll, "BFu8c_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1ll_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu1ll_BFu0s) C1{ Fc:8 FL:1 Fs:0}



static void Test_BFu8c_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu1ll_BFu0s");
    static BFu8c_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1ll_BFu0s(Test_BFu8c_BFu1ll_BFu0s, "BFu8c_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1s_BFu0c  {
  unsigned char v1:8;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu1s_BFu0c) C1{ Fc:8 Fs:1 Fc:0}



static void Test_BFu8c_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu1s_BFu0c");
    static BFu8c_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1s_BFu0c(Test_BFu8c_BFu1s_BFu0c, "BFu8c_BFu1s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1s_BFu0i  {
  unsigned char v1:8;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu1s_BFu0i) C1{ Fc:8 Fs:1 Fi:0}



static void Test_BFu8c_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu1s_BFu0i");
    static BFu8c_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1s_BFu0i(Test_BFu8c_BFu1s_BFu0i, "BFu8c_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1s_BFu0ll  {
  unsigned char v1:8;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu1s_BFu0ll) C1{ Fc:8 Fs:1 FL:0}



static void Test_BFu8c_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu1s_BFu0ll");
    static BFu8c_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1s_BFu0ll(Test_BFu8c_BFu1s_BFu0ll, "BFu8c_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu1s_BFu0s  {
  unsigned char v1:8;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu1s_BFu0s) C1{ Fc:8 Fs:1 Fs:0}



static void Test_BFu8c_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu1s_BFu0s");
    static BFu8c_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8c_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu1s_BFu0s(Test_BFu8c_BFu1s_BFu0s, "BFu8c_BFu1s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu31i_BFu0c  {
  unsigned char v1:8;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu31i_BFu0c) C1{ Fc:8 Fi:31 Fc:0}



static void Test_BFu8c_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu31i_BFu0c");
    static BFu8c_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8c_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu31i_BFu0c(Test_BFu8c_BFu31i_BFu0c, "BFu8c_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu31i_BFu0i  {
  unsigned char v1:8;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu31i_BFu0i) C1{ Fc:8 Fi:31 Fi:0}



static void Test_BFu8c_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu31i_BFu0i");
    static BFu8c_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8c_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu31i_BFu0i(Test_BFu8c_BFu31i_BFu0i, "BFu8c_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu31i_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu31i_BFu0ll) C1{ Fc:8 Fi:31 FL:0}



static void Test_BFu8c_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu31i_BFu0ll");
    static BFu8c_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8c_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu31i_BFu0ll(Test_BFu8c_BFu31i_BFu0ll, "BFu8c_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu31i_BFu0s  {
  unsigned char v1:8;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu31i_BFu0s) C1{ Fc:8 Fi:31 Fs:0}



static void Test_BFu8c_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu31i_BFu0s");
    static BFu8c_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8c_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu31i_BFu0s(Test_BFu8c_BFu31i_BFu0s, "BFu8c_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu31ll_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu31ll_BFu0c) C1{ Fc:8 FL:31 Fc:0}



static void Test_BFu8c_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu31ll_BFu0c");
    static BFu8c_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8c_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu31ll_BFu0c(Test_BFu8c_BFu31ll_BFu0c, "BFu8c_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu31ll_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu31ll_BFu0i) C1{ Fc:8 FL:31 Fi:0}



static void Test_BFu8c_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu31ll_BFu0i");
    static BFu8c_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8c_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu31ll_BFu0i(Test_BFu8c_BFu31ll_BFu0i, "BFu8c_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu31ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu31ll_BFu0ll) C1{ Fc:8 FL:31 FL:0}



static void Test_BFu8c_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu31ll_BFu0ll");
    static BFu8c_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8c_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu31ll_BFu0ll(Test_BFu8c_BFu31ll_BFu0ll, "BFu8c_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu31ll_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu31ll_BFu0s) C1{ Fc:8 FL:31 Fs:0}



static void Test_BFu8c_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu31ll_BFu0s");
    static BFu8c_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8c_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8c_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu31ll_BFu0s(Test_BFu8c_BFu31ll_BFu0s, "BFu8c_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu32i_BFu0c  {
  unsigned char v1:8;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu32i_BFu0c) C1{ Fc:8 Fi:32 Fc:0}



static void Test_BFu8c_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu32i_BFu0c");
    static BFu8c_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8c_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu32i_BFu0c(Test_BFu8c_BFu32i_BFu0c, "BFu8c_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu32i_BFu0i  {
  unsigned char v1:8;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu32i_BFu0i) C1{ Fc:8 Fi:32 Fi:0}



static void Test_BFu8c_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu32i_BFu0i");
    static BFu8c_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8c_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu32i_BFu0i(Test_BFu8c_BFu32i_BFu0i, "BFu8c_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu32i_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu32i_BFu0ll) C1{ Fc:8 Fi:32 FL:0}



static void Test_BFu8c_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu32i_BFu0ll");
    static BFu8c_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8c_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu32i_BFu0ll(Test_BFu8c_BFu32i_BFu0ll, "BFu8c_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu32i_BFu0s  {
  unsigned char v1:8;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu32i_BFu0s) C1{ Fc:8 Fi:32 Fs:0}



static void Test_BFu8c_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu32i_BFu0s");
    static BFu8c_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8c_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu32i_BFu0s(Test_BFu8c_BFu32i_BFu0s, "BFu8c_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu32ll_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu32ll_BFu0c) C1{ Fc:8 FL:32 Fc:0}



static void Test_BFu8c_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu32ll_BFu0c");
    static BFu8c_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8c_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu32ll_BFu0c(Test_BFu8c_BFu32ll_BFu0c, "BFu8c_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu32ll_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu32ll_BFu0i) C1{ Fc:8 FL:32 Fi:0}



static void Test_BFu8c_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu32ll_BFu0i");
    static BFu8c_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8c_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu32ll_BFu0i(Test_BFu8c_BFu32ll_BFu0i, "BFu8c_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu32ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu32ll_BFu0ll) C1{ Fc:8 FL:32 FL:0}



static void Test_BFu8c_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu32ll_BFu0ll");
    static BFu8c_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8c_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu32ll_BFu0ll(Test_BFu8c_BFu32ll_BFu0ll, "BFu8c_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu32ll_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu32ll_BFu0s) C1{ Fc:8 FL:32 Fs:0}



static void Test_BFu8c_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu32ll_BFu0s");
    static BFu8c_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8c_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8c_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu32ll_BFu0s(Test_BFu8c_BFu32ll_BFu0s, "BFu8c_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu33_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu33_BFu0c) C1{ Fc:8 FL:33 Fc:0}



static void Test_BFu8c_BFu33_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu33_BFu0c");
    static BFu8c_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8c_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8c_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu33_BFu0c(Test_BFu8c_BFu33_BFu0c, "BFu8c_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu33_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu33_BFu0i) C1{ Fc:8 FL:33 Fi:0}



static void Test_BFu8c_BFu33_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu33_BFu0i");
    static BFu8c_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8c_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8c_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu33_BFu0i(Test_BFu8c_BFu33_BFu0i, "BFu8c_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu33_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu33_BFu0ll) C1{ Fc:8 FL:33 FL:0}



static void Test_BFu8c_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu33_BFu0ll");
    static BFu8c_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8c_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8c_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu33_BFu0ll(Test_BFu8c_BFu33_BFu0ll, "BFu8c_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu33_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu33_BFu0s) C1{ Fc:8 FL:33 Fs:0}



static void Test_BFu8c_BFu33_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu33_BFu0s");
    static BFu8c_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8c_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8c_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu33_BFu0s(Test_BFu8c_BFu33_BFu0s, "BFu8c_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7c_BFu0c  {
  unsigned char v1:8;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu7c_BFu0c) C1{ Fc:8 Fc:7 Fc:0}



static void Test_BFu8c_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu7c_BFu0c");
    static BFu8c_BFu7c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu7c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7c_BFu0c(Test_BFu8c_BFu7c_BFu0c, "BFu8c_BFu7c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7c_BFu0i  {
  unsigned char v1:8;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu7c_BFu0i) C1{ Fc:8 Fc:7 Fi:0}



static void Test_BFu8c_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu7c_BFu0i");
    static BFu8c_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7c_BFu0i(Test_BFu8c_BFu7c_BFu0i, "BFu8c_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7c_BFu0ll  {
  unsigned char v1:8;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu7c_BFu0ll) C1{ Fc:8 Fc:7 FL:0}



static void Test_BFu8c_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu7c_BFu0ll");
    static BFu8c_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7c_BFu0ll(Test_BFu8c_BFu7c_BFu0ll, "BFu8c_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7c_BFu0s  {
  unsigned char v1:8;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu7c_BFu0s) C1{ Fc:8 Fc:7 Fs:0}



static void Test_BFu8c_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu7c_BFu0s");
    static BFu8c_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7c_BFu0s(Test_BFu8c_BFu7c_BFu0s, "BFu8c_BFu7c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7i_BFu0c  {
  unsigned char v1:8;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu7i_BFu0c) C1{ Fc:8 Fi:7 Fc:0}



static void Test_BFu8c_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu7i_BFu0c");
    static BFu8c_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7i_BFu0c(Test_BFu8c_BFu7i_BFu0c, "BFu8c_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7i_BFu0i  {
  unsigned char v1:8;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu7i_BFu0i) C1{ Fc:8 Fi:7 Fi:0}



static void Test_BFu8c_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu7i_BFu0i");
    static BFu8c_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7i_BFu0i(Test_BFu8c_BFu7i_BFu0i, "BFu8c_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7i_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu7i_BFu0ll) C1{ Fc:8 Fi:7 FL:0}



static void Test_BFu8c_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu7i_BFu0ll");
    static BFu8c_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7i_BFu0ll(Test_BFu8c_BFu7i_BFu0ll, "BFu8c_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7i_BFu0s  {
  unsigned char v1:8;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu7i_BFu0s) C1{ Fc:8 Fi:7 Fs:0}



static void Test_BFu8c_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu7i_BFu0s");
    static BFu8c_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7i_BFu0s(Test_BFu8c_BFu7i_BFu0s, "BFu8c_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7ll_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu7ll_BFu0c) C1{ Fc:8 FL:7 Fc:0}



static void Test_BFu8c_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu7ll_BFu0c");
    static BFu8c_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7ll_BFu0c(Test_BFu8c_BFu7ll_BFu0c, "BFu8c_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7ll_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu7ll_BFu0i) C1{ Fc:8 FL:7 Fi:0}



static void Test_BFu8c_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu7ll_BFu0i");
    static BFu8c_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7ll_BFu0i(Test_BFu8c_BFu7ll_BFu0i, "BFu8c_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu7ll_BFu0ll) C1{ Fc:8 FL:7 FL:0}



static void Test_BFu8c_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu7ll_BFu0ll");
    static BFu8c_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7ll_BFu0ll(Test_BFu8c_BFu7ll_BFu0ll, "BFu8c_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7ll_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu7ll_BFu0s) C1{ Fc:8 FL:7 Fs:0}



static void Test_BFu8c_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu7ll_BFu0s");
    static BFu8c_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7ll_BFu0s(Test_BFu8c_BFu7ll_BFu0s, "BFu8c_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7s_BFu0c  {
  unsigned char v1:8;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu7s_BFu0c) C1{ Fc:8 Fs:7 Fc:0}



static void Test_BFu8c_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu7s_BFu0c");
    static BFu8c_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7s_BFu0c(Test_BFu8c_BFu7s_BFu0c, "BFu8c_BFu7s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7s_BFu0i  {
  unsigned char v1:8;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu7s_BFu0i) C1{ Fc:8 Fs:7 Fi:0}



static void Test_BFu8c_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu7s_BFu0i");
    static BFu8c_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7s_BFu0i(Test_BFu8c_BFu7s_BFu0i, "BFu8c_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7s_BFu0ll  {
  unsigned char v1:8;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu7s_BFu0ll) C1{ Fc:8 Fs:7 FL:0}



static void Test_BFu8c_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu7s_BFu0ll");
    static BFu8c_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7s_BFu0ll(Test_BFu8c_BFu7s_BFu0ll, "BFu8c_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu7s_BFu0s  {
  unsigned char v1:8;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu7s_BFu0s) C1{ Fc:8 Fs:7 Fs:0}



static void Test_BFu8c_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu7s_BFu0s");
    static BFu8c_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8c_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8c_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu7s_BFu0s(Test_BFu8c_BFu7s_BFu0s, "BFu8c_BFu7s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8c_BFu0c  {
  unsigned char v1:8;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu8c_BFu0c) C1{ Fc:8 Fc:8 Fc:0}



static void Test_BFu8c_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu8c_BFu0c");
    static BFu8c_BFu8c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu8c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8c_BFu0c(Test_BFu8c_BFu8c_BFu0c, "BFu8c_BFu8c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8c_BFu0i  {
  unsigned char v1:8;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu8c_BFu0i) C1{ Fc:8 Fc:8 Fi:0}



static void Test_BFu8c_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu8c_BFu0i");
    static BFu8c_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8c_BFu0i(Test_BFu8c_BFu8c_BFu0i, "BFu8c_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8c_BFu0ll  {
  unsigned char v1:8;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu8c_BFu0ll) C1{ Fc:8 Fc:8 FL:0}



static void Test_BFu8c_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu8c_BFu0ll");
    static BFu8c_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8c_BFu0ll(Test_BFu8c_BFu8c_BFu0ll, "BFu8c_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8c_BFu0s  {
  unsigned char v1:8;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu8c_BFu0s) C1{ Fc:8 Fc:8 Fs:0}



static void Test_BFu8c_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu8c_BFu0s");
    static BFu8c_BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8c_BFu0s(Test_BFu8c_BFu8c_BFu0s, "BFu8c_BFu8c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8i_BFu0c  {
  unsigned char v1:8;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu8i_BFu0c) C1{ Fc:8 Fi:8 Fc:0}



static void Test_BFu8c_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu8i_BFu0c");
    static BFu8c_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8i_BFu0c(Test_BFu8c_BFu8i_BFu0c, "BFu8c_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8i_BFu0i  {
  unsigned char v1:8;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu8i_BFu0i) C1{ Fc:8 Fi:8 Fi:0}



static void Test_BFu8c_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu8i_BFu0i");
    static BFu8c_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8i_BFu0i(Test_BFu8c_BFu8i_BFu0i, "BFu8c_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8i_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu8i_BFu0ll) C1{ Fc:8 Fi:8 FL:0}



static void Test_BFu8c_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu8i_BFu0ll");
    static BFu8c_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8i_BFu0ll(Test_BFu8c_BFu8i_BFu0ll, "BFu8c_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8i_BFu0s  {
  unsigned char v1:8;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu8i_BFu0s) C1{ Fc:8 Fi:8 Fs:0}



static void Test_BFu8c_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu8i_BFu0s");
    static BFu8c_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8i_BFu0s(Test_BFu8c_BFu8i_BFu0s, "BFu8c_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8ll_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu8ll_BFu0c) C1{ Fc:8 FL:8 Fc:0}



static void Test_BFu8c_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu8ll_BFu0c");
    static BFu8c_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8ll_BFu0c(Test_BFu8c_BFu8ll_BFu0c, "BFu8c_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8ll_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu8ll_BFu0i) C1{ Fc:8 FL:8 Fi:0}



static void Test_BFu8c_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu8ll_BFu0i");
    static BFu8c_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8ll_BFu0i(Test_BFu8c_BFu8ll_BFu0i, "BFu8c_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu8ll_BFu0ll) C1{ Fc:8 FL:8 FL:0}



static void Test_BFu8c_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu8ll_BFu0ll");
    static BFu8c_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8ll_BFu0ll(Test_BFu8c_BFu8ll_BFu0ll, "BFu8c_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8ll_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu8ll_BFu0s) C1{ Fc:8 FL:8 Fs:0}



static void Test_BFu8c_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu8ll_BFu0s");
    static BFu8c_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8ll_BFu0s(Test_BFu8c_BFu8ll_BFu0s, "BFu8c_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8s_BFu0c  {
  unsigned char v1:8;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu8s_BFu0c) C1{ Fc:8 Fs:8 Fc:0}



static void Test_BFu8c_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu8s_BFu0c");
    static BFu8c_BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8s_BFu0c(Test_BFu8c_BFu8s_BFu0c, "BFu8c_BFu8s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8s_BFu0i  {
  unsigned char v1:8;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu8s_BFu0i) C1{ Fc:8 Fs:8 Fi:0}



static void Test_BFu8c_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu8s_BFu0i");
    static BFu8c_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8s_BFu0i(Test_BFu8c_BFu8s_BFu0i, "BFu8c_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8s_BFu0ll  {
  unsigned char v1:8;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu8s_BFu0ll) C1{ Fc:8 Fs:8 FL:0}



static void Test_BFu8c_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu8s_BFu0ll");
    static BFu8c_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8s_BFu0ll(Test_BFu8c_BFu8s_BFu0ll, "BFu8c_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu8s_BFu0s  {
  unsigned char v1:8;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu8s_BFu0s) C1{ Fc:8 Fs:8 Fs:0}



static void Test_BFu8c_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu8s_BFu0s");
    static BFu8c_BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8c_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu8s_BFu0s(Test_BFu8c_BFu8s_BFu0s, "BFu8c_BFu8s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9i_BFu0c  {
  unsigned char v1:8;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu9i_BFu0c) C1{ Fc:8 Fi:9 Fc:0}



static void Test_BFu8c_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu9i_BFu0c");
    static BFu8c_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9i_BFu0c(Test_BFu8c_BFu9i_BFu0c, "BFu8c_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9i_BFu0i  {
  unsigned char v1:8;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu9i_BFu0i) C1{ Fc:8 Fi:9 Fi:0}



static void Test_BFu8c_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu9i_BFu0i");
    static BFu8c_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9i_BFu0i(Test_BFu8c_BFu9i_BFu0i, "BFu8c_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9i_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu9i_BFu0ll) C1{ Fc:8 Fi:9 FL:0}



static void Test_BFu8c_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu9i_BFu0ll");
    static BFu8c_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9i_BFu0ll(Test_BFu8c_BFu9i_BFu0ll, "BFu8c_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9i_BFu0s  {
  unsigned char v1:8;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu9i_BFu0s) C1{ Fc:8 Fi:9 Fs:0}



static void Test_BFu8c_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu9i_BFu0s");
    static BFu8c_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9i_BFu0s(Test_BFu8c_BFu9i_BFu0s, "BFu8c_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9ll_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu9ll_BFu0c) C1{ Fc:8 FL:9 Fc:0}



static void Test_BFu8c_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu9ll_BFu0c");
    static BFu8c_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9ll_BFu0c(Test_BFu8c_BFu9ll_BFu0c, "BFu8c_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9ll_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu9ll_BFu0i) C1{ Fc:8 FL:9 Fi:0}



static void Test_BFu8c_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu9ll_BFu0i");
    static BFu8c_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9ll_BFu0i(Test_BFu8c_BFu9ll_BFu0i, "BFu8c_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9ll_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu9ll_BFu0ll) C1{ Fc:8 FL:9 FL:0}



static void Test_BFu8c_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu9ll_BFu0ll");
    static BFu8c_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9ll_BFu0ll(Test_BFu8c_BFu9ll_BFu0ll, "BFu8c_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9ll_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu9ll_BFu0s) C1{ Fc:8 FL:9 Fs:0}



static void Test_BFu8c_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu9ll_BFu0s");
    static BFu8c_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8c_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9ll_BFu0s(Test_BFu8c_BFu9ll_BFu0s, "BFu8c_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9s_BFu0c  {
  unsigned char v1:8;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8c_BFu9s_BFu0c) C1{ Fc:8 Fs:9 Fc:0}



static void Test_BFu8c_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu8c_BFu9s_BFu0c");
    static BFu8c_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8c_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9s_BFu0c(Test_BFu8c_BFu9s_BFu0c, "BFu8c_BFu9s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9s_BFu0i  {
  unsigned char v1:8;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8c_BFu9s_BFu0i) C1{ Fc:8 Fs:9 Fi:0}



static void Test_BFu8c_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu8c_BFu9s_BFu0i");
    static BFu8c_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8c_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9s_BFu0i(Test_BFu8c_BFu9s_BFu0i, "BFu8c_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9s_BFu0ll  {
  unsigned char v1:8;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8c_BFu9s_BFu0ll) C1{ Fc:8 Fs:9 FL:0}



static void Test_BFu8c_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu8c_BFu9s_BFu0ll");
    static BFu8c_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8c_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9s_BFu0ll(Test_BFu8c_BFu9s_BFu0ll, "BFu8c_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_BFu9s_BFu0s  {
  unsigned char v1:8;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8c_BFu9s_BFu0s) C1{ Fc:8 Fs:9 Fs:0}



static void Test_BFu8c_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu8c_BFu9s_BFu0s");
    static BFu8c_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8c_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8c_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8c_BFu9s_BFu0s(Test_BFu8c_BFu9s_BFu0s, "BFu8c_BFu9s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_C_BFu0c  {
  unsigned char v1:8;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_C_BFu0c) C1{ Fc:8 Fc Fc:0}



static void Test_BFu8c_C_BFu0c()
{
  {
    init_simple_test("BFu8c_C_BFu0c");
    static BFu8c_C_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_C_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_C_BFu0c");
    check_field_offset(lv, v2, 1, "BFu8c_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_C_BFu0c(Test_BFu8c_C_BFu0c, "BFu8c_C_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_C_BFu0i  {
  unsigned char v1:8;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_C_BFu0i) C1{ Fc:8 Fc Fi:0}



static void Test_BFu8c_C_BFu0i()
{
  {
    init_simple_test("BFu8c_C_BFu0i");
    static BFu8c_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_C_BFu0i");
    check_field_offset(lv, v2, 1, "BFu8c_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_C_BFu0i(Test_BFu8c_C_BFu0i, "BFu8c_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_C_BFu0ll  {
  unsigned char v1:8;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_C_BFu0ll) C1{ Fc:8 Fc FL:0}



static void Test_BFu8c_C_BFu0ll()
{
  {
    init_simple_test("BFu8c_C_BFu0ll");
    static BFu8c_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_C_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu8c_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_C_BFu0ll(Test_BFu8c_C_BFu0ll, "BFu8c_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_C_BFu0s  {
  unsigned char v1:8;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_C_BFu0s) C1{ Fc:8 Fc Fs:0}



static void Test_BFu8c_C_BFu0s()
{
  {
    init_simple_test("BFu8c_C_BFu0s");
    static BFu8c_C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_C_BFu0s");
    check_field_offset(lv, v2, 1, "BFu8c_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_C_BFu0s(Test_BFu8c_C_BFu0s, "BFu8c_C_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_D_BFu0c  {
  unsigned char v1:8;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_D_BFu0c) C1{ Fc:8 FL Fc:0}



static void Test_BFu8c_D_BFu0c()
{
  {
    init_simple_test("BFu8c_D_BFu0c");
    static BFu8c_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_D_BFu0c(Test_BFu8c_D_BFu0c, "BFu8c_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_D_BFu0i  {
  unsigned char v1:8;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_D_BFu0i) C1{ Fc:8 FL Fi:0}



static void Test_BFu8c_D_BFu0i()
{
  {
    init_simple_test("BFu8c_D_BFu0i");
    static BFu8c_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_D_BFu0i(Test_BFu8c_D_BFu0i, "BFu8c_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_D_BFu0ll  {
  unsigned char v1:8;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_D_BFu0ll) C1{ Fc:8 FL FL:0}



static void Test_BFu8c_D_BFu0ll()
{
  {
    init_simple_test("BFu8c_D_BFu0ll");
    static BFu8c_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_D_BFu0ll(Test_BFu8c_D_BFu0ll, "BFu8c_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_D_BFu0s  {
  unsigned char v1:8;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_D_BFu0s) C1{ Fc:8 FL Fs:0}



static void Test_BFu8c_D_BFu0s()
{
  {
    init_simple_test("BFu8c_D_BFu0s");
    static BFu8c_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_D_BFu0s(Test_BFu8c_D_BFu0s, "BFu8c_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_F_BFu0c  {
  unsigned char v1:8;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_F_BFu0c) C1{ Fc:8 Fi Fc:0}



static void Test_BFu8c_F_BFu0c()
{
  {
    init_simple_test("BFu8c_F_BFu0c");
    static BFu8c_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8c_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_F_BFu0c(Test_BFu8c_F_BFu0c, "BFu8c_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_F_BFu0i  {
  unsigned char v1:8;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_F_BFu0i) C1{ Fc:8 Fi Fi:0}



static void Test_BFu8c_F_BFu0i()
{
  {
    init_simple_test("BFu8c_F_BFu0i");
    static BFu8c_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8c_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_F_BFu0i(Test_BFu8c_F_BFu0i, "BFu8c_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_F_BFu0ll  {
  unsigned char v1:8;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_F_BFu0ll) C1{ Fc:8 Fi FL:0}



static void Test_BFu8c_F_BFu0ll()
{
  {
    init_simple_test("BFu8c_F_BFu0ll");
    static BFu8c_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8c_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_F_BFu0ll(Test_BFu8c_F_BFu0ll, "BFu8c_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_F_BFu0s  {
  unsigned char v1:8;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_F_BFu0s) C1{ Fc:8 Fi Fs:0}



static void Test_BFu8c_F_BFu0s()
{
  {
    init_simple_test("BFu8c_F_BFu0s");
    static BFu8c_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8c_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_F_BFu0s(Test_BFu8c_F_BFu0s, "BFu8c_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_I_BFu0c  {
  unsigned char v1:8;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_I_BFu0c) C1{ Fc:8 Fi Fc:0}



static void Test_BFu8c_I_BFu0c()
{
  {
    init_simple_test("BFu8c_I_BFu0c");
    static BFu8c_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8c_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_I_BFu0c(Test_BFu8c_I_BFu0c, "BFu8c_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_I_BFu0i  {
  unsigned char v1:8;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_I_BFu0i) C1{ Fc:8 Fi Fi:0}



static void Test_BFu8c_I_BFu0i()
{
  {
    init_simple_test("BFu8c_I_BFu0i");
    static BFu8c_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8c_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_I_BFu0i(Test_BFu8c_I_BFu0i, "BFu8c_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_I_BFu0ll  {
  unsigned char v1:8;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_I_BFu0ll) C1{ Fc:8 Fi FL:0}



static void Test_BFu8c_I_BFu0ll()
{
  {
    init_simple_test("BFu8c_I_BFu0ll");
    static BFu8c_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8c_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_I_BFu0ll(Test_BFu8c_I_BFu0ll, "BFu8c_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_I_BFu0s  {
  unsigned char v1:8;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_I_BFu0s) C1{ Fc:8 Fi Fs:0}



static void Test_BFu8c_I_BFu0s()
{
  {
    init_simple_test("BFu8c_I_BFu0s");
    static BFu8c_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8c_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_I_BFu0s(Test_BFu8c_I_BFu0s, "BFu8c_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ip_BFu0c  {
  unsigned char v1:8;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_Ip_BFu0c) C1{ Fc:8 Fp Fc:0}



static void Test_BFu8c_Ip_BFu0c()
{
  {
    init_simple_test("BFu8c_Ip_BFu0c");
    static BFu8c_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ip_BFu0c(Test_BFu8c_Ip_BFu0c, "BFu8c_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ip_BFu0i  {
  unsigned char v1:8;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_Ip_BFu0i) C1{ Fc:8 Fp Fi:0}



static void Test_BFu8c_Ip_BFu0i()
{
  {
    init_simple_test("BFu8c_Ip_BFu0i");
    static BFu8c_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ip_BFu0i(Test_BFu8c_Ip_BFu0i, "BFu8c_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ip_BFu0ll  {
  unsigned char v1:8;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_Ip_BFu0ll) C1{ Fc:8 Fp FL:0}



static void Test_BFu8c_Ip_BFu0ll()
{
  {
    init_simple_test("BFu8c_Ip_BFu0ll");
    static BFu8c_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ip_BFu0ll(Test_BFu8c_Ip_BFu0ll, "BFu8c_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ip_BFu0s  {
  unsigned char v1:8;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_Ip_BFu0s) C1{ Fc:8 Fp Fs:0}



static void Test_BFu8c_Ip_BFu0s()
{
  {
    init_simple_test("BFu8c_Ip_BFu0s");
    static BFu8c_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ip_BFu0s(Test_BFu8c_Ip_BFu0s, "BFu8c_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_L_BFu0c  {
  unsigned char v1:8;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_L_BFu0c) C1{ Fc:8 FL Fc:0}



static void Test_BFu8c_L_BFu0c()
{
  {
    init_simple_test("BFu8c_L_BFu0c");
    static BFu8c_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_L_BFu0c(Test_BFu8c_L_BFu0c, "BFu8c_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_L_BFu0i  {
  unsigned char v1:8;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_L_BFu0i) C1{ Fc:8 FL Fi:0}



static void Test_BFu8c_L_BFu0i()
{
  {
    init_simple_test("BFu8c_L_BFu0i");
    static BFu8c_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_L_BFu0i(Test_BFu8c_L_BFu0i, "BFu8c_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_L_BFu0ll  {
  unsigned char v1:8;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_L_BFu0ll) C1{ Fc:8 FL FL:0}



static void Test_BFu8c_L_BFu0ll()
{
  {
    init_simple_test("BFu8c_L_BFu0ll");
    static BFu8c_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_L_BFu0ll(Test_BFu8c_L_BFu0ll, "BFu8c_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_L_BFu0s  {
  unsigned char v1:8;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_L_BFu0s) C1{ Fc:8 FL Fs:0}



static void Test_BFu8c_L_BFu0s()
{
  {
    init_simple_test("BFu8c_L_BFu0s");
    static BFu8c_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_L_BFu0s(Test_BFu8c_L_BFu0s, "BFu8c_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_S_BFu0c  {
  unsigned char v1:8;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_S_BFu0c) C1{ Fc:8 Fs Fc:0}



static void Test_BFu8c_S_BFu0c()
{
  {
    init_simple_test("BFu8c_S_BFu0c");
    static BFu8c_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu8c_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_S_BFu0c(Test_BFu8c_S_BFu0c, "BFu8c_S_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_S_BFu0i  {
  unsigned char v1:8;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_S_BFu0i) C1{ Fc:8 Fs Fi:0}



static void Test_BFu8c_S_BFu0i()
{
  {
    init_simple_test("BFu8c_S_BFu0i");
    static BFu8c_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu8c_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_S_BFu0i(Test_BFu8c_S_BFu0i, "BFu8c_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_S_BFu0ll  {
  unsigned char v1:8;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_S_BFu0ll) C1{ Fc:8 Fs FL:0}



static void Test_BFu8c_S_BFu0ll()
{
  {
    init_simple_test("BFu8c_S_BFu0ll");
    static BFu8c_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu8c_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_S_BFu0ll(Test_BFu8c_S_BFu0ll, "BFu8c_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_S_BFu0s  {
  unsigned char v1:8;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_S_BFu0s) C1{ Fc:8 Fs Fs:0}



static void Test_BFu8c_S_BFu0s()
{
  {
    init_simple_test("BFu8c_S_BFu0s");
    static BFu8c_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu8c_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_S_BFu0s(Test_BFu8c_S_BFu0s, "BFu8c_S_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Uc_BFu0c  {
  unsigned char v1:8;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_Uc_BFu0c) C1{ Fc:8 Fc Fc:0}



static void Test_BFu8c_Uc_BFu0c()
{
  {
    init_simple_test("BFu8c_Uc_BFu0c");
    static BFu8c_Uc_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_Uc_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu8c_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Uc_BFu0c");
    check_field_offset(lv, v2, 1, "BFu8c_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Uc_BFu0c(Test_BFu8c_Uc_BFu0c, "BFu8c_Uc_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Uc_BFu0i  {
  unsigned char v1:8;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_Uc_BFu0i) C1{ Fc:8 Fc Fi:0}



static void Test_BFu8c_Uc_BFu0i()
{
  {
    init_simple_test("BFu8c_Uc_BFu0i");
    static BFu8c_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Uc_BFu0i");
    check_field_offset(lv, v2, 1, "BFu8c_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Uc_BFu0i(Test_BFu8c_Uc_BFu0i, "BFu8c_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Uc_BFu0ll  {
  unsigned char v1:8;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_Uc_BFu0ll) C1{ Fc:8 Fc FL:0}



static void Test_BFu8c_Uc_BFu0ll()
{
  {
    init_simple_test("BFu8c_Uc_BFu0ll");
    static BFu8c_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Uc_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu8c_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Uc_BFu0ll(Test_BFu8c_Uc_BFu0ll, "BFu8c_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Uc_BFu0s  {
  unsigned char v1:8;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_Uc_BFu0s) C1{ Fc:8 Fc Fs:0}



static void Test_BFu8c_Uc_BFu0s()
{
  {
    init_simple_test("BFu8c_Uc_BFu0s");
    static BFu8c_Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8c_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(BFu8c_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Uc_BFu0s");
    check_field_offset(lv, v2, 1, "BFu8c_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Uc_BFu0s(Test_BFu8c_Uc_BFu0s, "BFu8c_Uc_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ui_BFu0c  {
  unsigned char v1:8;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_Ui_BFu0c) C1{ Fc:8 Fi Fc:0}



static void Test_BFu8c_Ui_BFu0c()
{
  {
    init_simple_test("BFu8c_Ui_BFu0c");
    static BFu8c_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ui_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8c_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ui_BFu0c(Test_BFu8c_Ui_BFu0c, "BFu8c_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ui_BFu0i  {
  unsigned char v1:8;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_Ui_BFu0i) C1{ Fc:8 Fi Fi:0}



static void Test_BFu8c_Ui_BFu0i()
{
  {
    init_simple_test("BFu8c_Ui_BFu0i");
    static BFu8c_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ui_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8c_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ui_BFu0i(Test_BFu8c_Ui_BFu0i, "BFu8c_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ui_BFu0ll  {
  unsigned char v1:8;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_Ui_BFu0ll) C1{ Fc:8 Fi FL:0}



static void Test_BFu8c_Ui_BFu0ll()
{
  {
    init_simple_test("BFu8c_Ui_BFu0ll");
    static BFu8c_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8c_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ui_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8c_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ui_BFu0ll(Test_BFu8c_Ui_BFu0ll, "BFu8c_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ui_BFu0s  {
  unsigned char v1:8;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_Ui_BFu0s) C1{ Fc:8 Fi Fs:0}



static void Test_BFu8c_Ui_BFu0s()
{
  {
    init_simple_test("BFu8c_Ui_BFu0s");
    static BFu8c_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8c_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8c_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ui_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8c_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ui_BFu0s(Test_BFu8c_Ui_BFu0s, "BFu8c_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ul_BFu0c  {
  unsigned char v1:8;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_Ul_BFu0c) C1{ Fc:8 FL Fc:0}



static void Test_BFu8c_Ul_BFu0c()
{
  {
    init_simple_test("BFu8c_Ul_BFu0c");
    static BFu8c_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ul_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ul_BFu0c(Test_BFu8c_Ul_BFu0c, "BFu8c_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ul_BFu0i  {
  unsigned char v1:8;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_Ul_BFu0i) C1{ Fc:8 FL Fi:0}



static void Test_BFu8c_Ul_BFu0i()
{
  {
    init_simple_test("BFu8c_Ul_BFu0i");
    static BFu8c_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ul_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ul_BFu0i(Test_BFu8c_Ul_BFu0i, "BFu8c_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ul_BFu0ll  {
  unsigned char v1:8;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_Ul_BFu0ll) C1{ Fc:8 FL FL:0}



static void Test_BFu8c_Ul_BFu0ll()
{
  {
    init_simple_test("BFu8c_Ul_BFu0ll");
    static BFu8c_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ul_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ul_BFu0ll(Test_BFu8c_Ul_BFu0ll, "BFu8c_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Ul_BFu0s  {
  unsigned char v1:8;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_Ul_BFu0s) C1{ Fc:8 FL Fs:0}



static void Test_BFu8c_Ul_BFu0s()
{
  {
    init_simple_test("BFu8c_Ul_BFu0s");
    static BFu8c_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8c_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Ul_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Ul_BFu0s(Test_BFu8c_Ul_BFu0s, "BFu8c_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Us_BFu0c  {
  unsigned char v1:8;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_Us_BFu0c) C1{ Fc:8 Fs Fc:0}



static void Test_BFu8c_Us_BFu0c()
{
  {
    init_simple_test("BFu8c_Us_BFu0c");
    static BFu8c_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Us_BFu0c");
    check_field_offset(lv, v2, 2, "BFu8c_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Us_BFu0c(Test_BFu8c_Us_BFu0c, "BFu8c_Us_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Us_BFu0i  {
  unsigned char v1:8;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_Us_BFu0i) C1{ Fc:8 Fs Fi:0}



static void Test_BFu8c_Us_BFu0i()
{
  {
    init_simple_test("BFu8c_Us_BFu0i");
    static BFu8c_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Us_BFu0i");
    check_field_offset(lv, v2, 2, "BFu8c_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Us_BFu0i(Test_BFu8c_Us_BFu0i, "BFu8c_Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Us_BFu0ll  {
  unsigned char v1:8;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_Us_BFu0ll) C1{ Fc:8 Fs FL:0}



static void Test_BFu8c_Us_BFu0ll()
{
  {
    init_simple_test("BFu8c_Us_BFu0ll");
    static BFu8c_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8c_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8c_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Us_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu8c_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Us_BFu0ll(Test_BFu8c_Us_BFu0ll, "BFu8c_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Us_BFu0s  {
  unsigned char v1:8;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_Us_BFu0s) C1{ Fc:8 Fs Fs:0}



static void Test_BFu8c_Us_BFu0s()
{
  {
    init_simple_test("BFu8c_Us_BFu0s");
    static BFu8c_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8c_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8c_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Us_BFu0s");
    check_field_offset(lv, v2, 2, "BFu8c_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Us_BFu0s(Test_BFu8c_Us_BFu0s, "BFu8c_Us_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Vp_BFu0c  {
  unsigned char v1:8;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu8c_Vp_BFu0c) C1{ Fc:8 Fp Fc:0}



static void Test_BFu8c_Vp_BFu0c()
{
  {
    init_simple_test("BFu8c_Vp_BFu0c");
    static BFu8c_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Vp_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Vp_BFu0c(Test_BFu8c_Vp_BFu0c, "BFu8c_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Vp_BFu0i  {
  unsigned char v1:8;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu8c_Vp_BFu0i) C1{ Fc:8 Fp Fi:0}



static void Test_BFu8c_Vp_BFu0i()
{
  {
    init_simple_test("BFu8c_Vp_BFu0i");
    static BFu8c_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Vp_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Vp_BFu0i(Test_BFu8c_Vp_BFu0i, "BFu8c_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Vp_BFu0ll  {
  unsigned char v1:8;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu8c_Vp_BFu0ll) C1{ Fc:8 Fp FL:0}



static void Test_BFu8c_Vp_BFu0ll()
{
  {
    init_simple_test("BFu8c_Vp_BFu0ll");
    static BFu8c_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Vp_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Vp_BFu0ll(Test_BFu8c_Vp_BFu0ll, "BFu8c_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8c_Vp_BFu0s  {
  unsigned char v1:8;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu8c_Vp_BFu0s) C1{ Fc:8 Fp Fs:0}



static void Test_BFu8c_Vp_BFu0s()
{
  {
    init_simple_test("BFu8c_Vp_BFu0s");
    static BFu8c_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8c_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8c_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8c_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8c_Vp_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8c_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8c_Vp_BFu0s(Test_BFu8c_Vp_BFu0s, "BFu8c_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c  {
  unsigned int v1:8;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu0c) C1{ Fi:8 Fc:0}



static void Test_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu0c");
    static BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c(Test_BFu8i_BFu0c, "BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu0c  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu0c_BFu0c) C1{ Fi:8 Fc:0 Fc:0}



static void Test_BFu8i_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu0c");
    static BFu8i_BFu0c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu0c(Test_BFu8i_BFu0c_BFu0c, "BFu8i_BFu0c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu0i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu0c_BFu0i) C1{ Fi:8 Fc:0 Fi:0}



static void Test_BFu8i_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu0i");
    static BFu8i_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu0i(Test_BFu8i_BFu0c_BFu0i, "BFu8i_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu0ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu0c_BFu0ll) C1{ Fi:8 Fc:0 FL:0}



static void Test_BFu8i_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu0ll");
    static BFu8i_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu0ll(Test_BFu8i_BFu0c_BFu0ll, "BFu8i_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu0s  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu0c_BFu0s) C1{ Fi:8 Fc:0 Fs:0}



static void Test_BFu8i_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu0s");
    static BFu8i_BFu0c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu0s(Test_BFu8i_BFu0c_BFu0s, "BFu8i_BFu0c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu15i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8i_BFu0c_BFu15i) C1{ Fi:8 Fc:0 Fi:15}



static void Test_BFu8i_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu15i");
    static BFu8i_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu15i(Test_BFu8i_BFu0c_BFu15i, "BFu8i_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu15ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8i_BFu0c_BFu15ll) C1{ Fi:8 Fc:0 FL:15}



static void Test_BFu8i_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu15ll");
    static BFu8i_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu15ll(Test_BFu8i_BFu0c_BFu15ll, "BFu8i_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu15s  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8i_BFu0c_BFu15s) C1{ Fi:8 Fc:0 Fs:15}



static void Test_BFu8i_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu15s");
    static BFu8i_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8i_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu15s(Test_BFu8i_BFu0c_BFu15s, "BFu8i_BFu0c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu16i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8i_BFu0c_BFu16i) C1{ Fi:8 Fc:0 Fi:16}



static void Test_BFu8i_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu16i");
    static BFu8i_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu16i(Test_BFu8i_BFu0c_BFu16i, "BFu8i_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu16ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8i_BFu0c_BFu16ll) C1{ Fi:8 Fc:0 FL:16}



static void Test_BFu8i_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu16ll");
    static BFu8i_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu16ll(Test_BFu8i_BFu0c_BFu16ll, "BFu8i_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu16s  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8i_BFu0c_BFu16s) C1{ Fi:8 Fc:0 Fs:16}



static void Test_BFu8i_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu16s");
    static BFu8i_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8i_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu16s(Test_BFu8i_BFu0c_BFu16s, "BFu8i_BFu0c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu17i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8i_BFu0c_BFu17i) C1{ Fi:8 Fc:0 Fi:17}



static void Test_BFu8i_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu17i");
    static BFu8i_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu17i(Test_BFu8i_BFu0c_BFu17i, "BFu8i_BFu0c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu17ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8i_BFu0c_BFu17ll) C1{ Fi:8 Fc:0 FL:17}



static void Test_BFu8i_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu17ll");
    static BFu8i_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu17ll(Test_BFu8i_BFu0c_BFu17ll, "BFu8i_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu1c  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8i_BFu0c_BFu1c) C1{ Fi:8 Fc:0 Fc:1}



static void Test_BFu8i_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu1c");
    static BFu8i_BFu0c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu1c(Test_BFu8i_BFu0c_BFu1c, "BFu8i_BFu0c_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu1i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8i_BFu0c_BFu1i) C1{ Fi:8 Fc:0 Fi:1}



static void Test_BFu8i_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu1i");
    static BFu8i_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu1i(Test_BFu8i_BFu0c_BFu1i, "BFu8i_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu1ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8i_BFu0c_BFu1ll) C1{ Fi:8 Fc:0 FL:1}



static void Test_BFu8i_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu1ll");
    static BFu8i_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu1ll(Test_BFu8i_BFu0c_BFu1ll, "BFu8i_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu1s  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8i_BFu0c_BFu1s) C1{ Fi:8 Fc:0 Fs:1}



static void Test_BFu8i_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu1s");
    static BFu8i_BFu0c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu1s(Test_BFu8i_BFu0c_BFu1s, "BFu8i_BFu0c_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu31i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8i_BFu0c_BFu31i) C1{ Fi:8 Fc:0 Fi:31}



static void Test_BFu8i_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu31i");
    static BFu8i_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8i_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu31i(Test_BFu8i_BFu0c_BFu31i, "BFu8i_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu31ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8i_BFu0c_BFu31ll) C1{ Fi:8 Fc:0 FL:31}



static void Test_BFu8i_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu31ll");
    static BFu8i_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8i_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu31ll(Test_BFu8i_BFu0c_BFu31ll, "BFu8i_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu32i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8i_BFu0c_BFu32i) C1{ Fi:8 Fc:0 Fi:32}



static void Test_BFu8i_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu32i");
    static BFu8i_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8i_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu32i(Test_BFu8i_BFu0c_BFu32i, "BFu8i_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu32ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8i_BFu0c_BFu32ll) C1{ Fi:8 Fc:0 FL:32}



static void Test_BFu8i_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu32ll");
    static BFu8i_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8i_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu32ll(Test_BFu8i_BFu0c_BFu32ll, "BFu8i_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu33  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8i_BFu0c_BFu33) C1{ Fi:8 Fc:0 FL:33}



static void Test_BFu8i_BFu0c_BFu33()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu33");
    static BFu8i_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8i_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8i_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu33(Test_BFu8i_BFu0c_BFu33, "BFu8i_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu7c  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8i_BFu0c_BFu7c) C1{ Fi:8 Fc:0 Fc:7}



static void Test_BFu8i_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu7c");
    static BFu8i_BFu0c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu7c(Test_BFu8i_BFu0c_BFu7c, "BFu8i_BFu0c_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu7i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8i_BFu0c_BFu7i) C1{ Fi:8 Fc:0 Fi:7}



static void Test_BFu8i_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu7i");
    static BFu8i_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu7i(Test_BFu8i_BFu0c_BFu7i, "BFu8i_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu7ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8i_BFu0c_BFu7ll) C1{ Fi:8 Fc:0 FL:7}



static void Test_BFu8i_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu7ll");
    static BFu8i_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu7ll(Test_BFu8i_BFu0c_BFu7ll, "BFu8i_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu7s  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8i_BFu0c_BFu7s) C1{ Fi:8 Fc:0 Fs:7}



static void Test_BFu8i_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu7s");
    static BFu8i_BFu0c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu7s(Test_BFu8i_BFu0c_BFu7s, "BFu8i_BFu0c_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu8c  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8i_BFu0c_BFu8c) C1{ Fi:8 Fc:0 Fc:8}



static void Test_BFu8i_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu8c");
    static BFu8i_BFu0c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu8c(Test_BFu8i_BFu0c_BFu8c, "BFu8i_BFu0c_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu8i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8i_BFu0c_BFu8i) C1{ Fi:8 Fc:0 Fi:8}



static void Test_BFu8i_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu8i");
    static BFu8i_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu8i(Test_BFu8i_BFu0c_BFu8i, "BFu8i_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu8ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8i_BFu0c_BFu8ll) C1{ Fi:8 Fc:0 FL:8}



static void Test_BFu8i_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu8ll");
    static BFu8i_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu8ll(Test_BFu8i_BFu0c_BFu8ll, "BFu8i_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu8s  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8i_BFu0c_BFu8s) C1{ Fi:8 Fc:0 Fs:8}



static void Test_BFu8i_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu8s");
    static BFu8i_BFu0c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu8s(Test_BFu8i_BFu0c_BFu8s, "BFu8i_BFu0c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu9i  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8i_BFu0c_BFu9i) C1{ Fi:8 Fc:0 Fi:9}



static void Test_BFu8i_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu9i");
    static BFu8i_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu9i(Test_BFu8i_BFu0c_BFu9i, "BFu8i_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu9ll  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8i_BFu0c_BFu9ll) C1{ Fi:8 Fc:0 FL:9}



static void Test_BFu8i_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu9ll");
    static BFu8i_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu9ll(Test_BFu8i_BFu0c_BFu9ll, "BFu8i_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_BFu9s  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8i_BFu0c_BFu9s) C1{ Fi:8 Fc:0 Fs:9}



static void Test_BFu8i_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu8i_BFu0c_BFu9s");
    static BFu8i_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8i_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_BFu9s(Test_BFu8i_BFu0c_BFu9s, "BFu8i_BFu0c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_C  {
  unsigned int v1:8;
  unsigned char  :0;
  char v2;
};
//SIG(1 BFu8i_BFu0c_C) C1{ Fi:8 Fc:0 Fc}



static void Test_BFu8i_BFu0c_C()
{
  {
    init_simple_test("BFu8i_BFu0c_C");
    static BFu8i_BFu0c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_C");
    check_field_offset(lv, v2, 1, "BFu8i_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_C(Test_BFu8i_BFu0c_C, "BFu8i_BFu0c_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_D  {
  unsigned int v1:8;
  unsigned char  :0;
  double v2;
};
//SIG(1 BFu8i_BFu0c_D) C1{ Fi:8 Fc:0 FL}



static void Test_BFu8i_BFu0c_D()
{
  {
    init_simple_test("BFu8i_BFu0c_D");
    static BFu8i_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_D(Test_BFu8i_BFu0c_D, "BFu8i_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_F  {
  unsigned int v1:8;
  unsigned char  :0;
  float v2;
};
//SIG(1 BFu8i_BFu0c_F) C1{ Fi:8 Fc:0 Fi}



static void Test_BFu8i_BFu0c_F()
{
  {
    init_simple_test("BFu8i_BFu0c_F");
    static BFu8i_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_F");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_F(Test_BFu8i_BFu0c_F, "BFu8i_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_I  {
  unsigned int v1:8;
  unsigned char  :0;
  int v2;
};
//SIG(1 BFu8i_BFu0c_I) C1{ Fi:8 Fc:0 Fi}



static void Test_BFu8i_BFu0c_I()
{
  {
    init_simple_test("BFu8i_BFu0c_I");
    static BFu8i_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_I");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_I(Test_BFu8i_BFu0c_I, "BFu8i_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_Ip  {
  unsigned int v1:8;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu8i_BFu0c_Ip) C1{ Fi:8 Fc:0 Fp}



static void Test_BFu8i_BFu0c_Ip()
{
  {
    init_simple_test("BFu8i_BFu0c_Ip");
    static BFu8i_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_Ip(Test_BFu8i_BFu0c_Ip, "BFu8i_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_L  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 BFu8i_BFu0c_L) C1{ Fi:8 Fc:0 FL}



static void Test_BFu8i_BFu0c_L()
{
  {
    init_simple_test("BFu8i_BFu0c_L");
    static BFu8i_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_L(Test_BFu8i_BFu0c_L, "BFu8i_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_S  {
  unsigned int v1:8;
  unsigned char  :0;
  short v2;
};
//SIG(1 BFu8i_BFu0c_S) C1{ Fi:8 Fc:0 Fs}



static void Test_BFu8i_BFu0c_S()
{
  {
    init_simple_test("BFu8i_BFu0c_S");
    static BFu8i_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_S");
    check_field_offset(lv, v2, 2, "BFu8i_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_S(Test_BFu8i_BFu0c_S, "BFu8i_BFu0c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_Uc  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 BFu8i_BFu0c_Uc) C1{ Fi:8 Fc:0 Fc}



static void Test_BFu8i_BFu0c_Uc()
{
  {
    init_simple_test("BFu8i_BFu0c_Uc");
    static BFu8i_BFu0c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_Uc");
    check_field_offset(lv, v2, 1, "BFu8i_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_Uc(Test_BFu8i_BFu0c_Uc, "BFu8i_BFu0c_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_Ui  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 BFu8i_BFu0c_Ui) C1{ Fi:8 Fc:0 Fi}



static void Test_BFu8i_BFu0c_Ui()
{
  {
    init_simple_test("BFu8i_BFu0c_Ui");
    static BFu8i_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_Ui");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_Ui(Test_BFu8i_BFu0c_Ui, "BFu8i_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_Ul  {
  unsigned int v1:8;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 BFu8i_BFu0c_Ul) C1{ Fi:8 Fc:0 FL}



static void Test_BFu8i_BFu0c_Ul()
{
  {
    init_simple_test("BFu8i_BFu0c_Ul");
    static BFu8i_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_Ul(Test_BFu8i_BFu0c_Ul, "BFu8i_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_Us  {
  unsigned int v1:8;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 BFu8i_BFu0c_Us) C1{ Fi:8 Fc:0 Fs}



static void Test_BFu8i_BFu0c_Us()
{
  {
    init_simple_test("BFu8i_BFu0c_Us");
    static BFu8i_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_Us");
    check_field_offset(lv, v2, 2, "BFu8i_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_Us(Test_BFu8i_BFu0c_Us, "BFu8i_BFu0c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0c_Vp  {
  unsigned int v1:8;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu8i_BFu0c_Vp) C1{ Fi:8 Fc:0 Fp}



static void Test_BFu8i_BFu0c_Vp()
{
  {
    init_simple_test("BFu8i_BFu0c_Vp");
    static BFu8i_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0c_Vp(Test_BFu8i_BFu0c_Vp, "BFu8i_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i  {
  unsigned int v1:8;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu0i) C1{ Fi:8 Fi:0}



static void Test_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu0i");
    static BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i(Test_BFu8i_BFu0i, "BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu0c  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu0i_BFu0c) C1{ Fi:8 Fi:0 Fc:0}



static void Test_BFu8i_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu0c");
    static BFu8i_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu0c(Test_BFu8i_BFu0i_BFu0c, "BFu8i_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu0i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu0i_BFu0i) C1{ Fi:8 Fi:0 Fi:0}



static void Test_BFu8i_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu0i");
    static BFu8i_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu0i(Test_BFu8i_BFu0i_BFu0i, "BFu8i_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu0ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu0i_BFu0ll) C1{ Fi:8 Fi:0 FL:0}



static void Test_BFu8i_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu0ll");
    static BFu8i_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu0ll(Test_BFu8i_BFu0i_BFu0ll, "BFu8i_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu0s  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu0i_BFu0s) C1{ Fi:8 Fi:0 Fs:0}



static void Test_BFu8i_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu0s");
    static BFu8i_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu0s(Test_BFu8i_BFu0i_BFu0s, "BFu8i_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu15i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8i_BFu0i_BFu15i) C1{ Fi:8 Fi:0 Fi:15}



static void Test_BFu8i_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu15i");
    static BFu8i_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8i_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu15i(Test_BFu8i_BFu0i_BFu15i, "BFu8i_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu15ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8i_BFu0i_BFu15ll) C1{ Fi:8 Fi:0 FL:15}



static void Test_BFu8i_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu15ll");
    static BFu8i_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8i_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu15ll(Test_BFu8i_BFu0i_BFu15ll, "BFu8i_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu15s  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8i_BFu0i_BFu15s) C1{ Fi:8 Fi:0 Fs:15}



static void Test_BFu8i_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu15s");
    static BFu8i_BFu0i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8i_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu15s(Test_BFu8i_BFu0i_BFu15s, "BFu8i_BFu0i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu16i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8i_BFu0i_BFu16i) C1{ Fi:8 Fi:0 Fi:16}



static void Test_BFu8i_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu16i");
    static BFu8i_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8i_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu16i(Test_BFu8i_BFu0i_BFu16i, "BFu8i_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu16ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8i_BFu0i_BFu16ll) C1{ Fi:8 Fi:0 FL:16}



static void Test_BFu8i_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu16ll");
    static BFu8i_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8i_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu16ll(Test_BFu8i_BFu0i_BFu16ll, "BFu8i_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu16s  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8i_BFu0i_BFu16s) C1{ Fi:8 Fi:0 Fs:16}



static void Test_BFu8i_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu16s");
    static BFu8i_BFu0i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8i_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu16s(Test_BFu8i_BFu0i_BFu16s, "BFu8i_BFu0i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu17i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8i_BFu0i_BFu17i) C1{ Fi:8 Fi:0 Fi:17}



static void Test_BFu8i_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu17i");
    static BFu8i_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8i_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu17i(Test_BFu8i_BFu0i_BFu17i, "BFu8i_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu17ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8i_BFu0i_BFu17ll) C1{ Fi:8 Fi:0 FL:17}



static void Test_BFu8i_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu17ll");
    static BFu8i_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8i_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu17ll(Test_BFu8i_BFu0i_BFu17ll, "BFu8i_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu1c  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8i_BFu0i_BFu1c) C1{ Fi:8 Fi:0 Fc:1}



static void Test_BFu8i_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu1c");
    static BFu8i_BFu0i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8i_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu1c(Test_BFu8i_BFu0i_BFu1c, "BFu8i_BFu0i_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu1i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8i_BFu0i_BFu1i) C1{ Fi:8 Fi:0 Fi:1}



static void Test_BFu8i_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu1i");
    static BFu8i_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8i_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu1i(Test_BFu8i_BFu0i_BFu1i, "BFu8i_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu1ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8i_BFu0i_BFu1ll) C1{ Fi:8 Fi:0 FL:1}



static void Test_BFu8i_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu1ll");
    static BFu8i_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8i_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu1ll(Test_BFu8i_BFu0i_BFu1ll, "BFu8i_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu1s  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8i_BFu0i_BFu1s) C1{ Fi:8 Fi:0 Fs:1}



static void Test_BFu8i_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu1s");
    static BFu8i_BFu0i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8i_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu1s(Test_BFu8i_BFu0i_BFu1s, "BFu8i_BFu0i_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu31i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8i_BFu0i_BFu31i) C1{ Fi:8 Fi:0 Fi:31}



static void Test_BFu8i_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu31i");
    static BFu8i_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8i_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu31i(Test_BFu8i_BFu0i_BFu31i, "BFu8i_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu31ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8i_BFu0i_BFu31ll) C1{ Fi:8 Fi:0 FL:31}



static void Test_BFu8i_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu31ll");
    static BFu8i_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8i_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu31ll(Test_BFu8i_BFu0i_BFu31ll, "BFu8i_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu32i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8i_BFu0i_BFu32i) C1{ Fi:8 Fi:0 Fi:32}



static void Test_BFu8i_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu32i");
    static BFu8i_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8i_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu32i(Test_BFu8i_BFu0i_BFu32i, "BFu8i_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu32ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8i_BFu0i_BFu32ll) C1{ Fi:8 Fi:0 FL:32}



static void Test_BFu8i_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu32ll");
    static BFu8i_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8i_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu32ll(Test_BFu8i_BFu0i_BFu32ll, "BFu8i_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu33  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8i_BFu0i_BFu33) C1{ Fi:8 Fi:0 FL:33}



static void Test_BFu8i_BFu0i_BFu33()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu33");
    static BFu8i_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu8i_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu8i_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu33(Test_BFu8i_BFu0i_BFu33, "BFu8i_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu7c  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8i_BFu0i_BFu7c) C1{ Fi:8 Fi:0 Fc:7}



static void Test_BFu8i_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu7c");
    static BFu8i_BFu0i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8i_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu7c(Test_BFu8i_BFu0i_BFu7c, "BFu8i_BFu0i_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu7i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8i_BFu0i_BFu7i) C1{ Fi:8 Fi:0 Fi:7}



static void Test_BFu8i_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu7i");
    static BFu8i_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8i_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu7i(Test_BFu8i_BFu0i_BFu7i, "BFu8i_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu7ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8i_BFu0i_BFu7ll) C1{ Fi:8 Fi:0 FL:7}



static void Test_BFu8i_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu7ll");
    static BFu8i_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8i_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu7ll(Test_BFu8i_BFu0i_BFu7ll, "BFu8i_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu7s  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8i_BFu0i_BFu7s) C1{ Fi:8 Fi:0 Fs:7}



static void Test_BFu8i_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu7s");
    static BFu8i_BFu0i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8i_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu7s(Test_BFu8i_BFu0i_BFu7s, "BFu8i_BFu0i_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu8c  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8i_BFu0i_BFu8c) C1{ Fi:8 Fi:0 Fc:8}



static void Test_BFu8i_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu8c");
    static BFu8i_BFu0i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8i_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu8c(Test_BFu8i_BFu0i_BFu8c, "BFu8i_BFu0i_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu8i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8i_BFu0i_BFu8i) C1{ Fi:8 Fi:0 Fi:8}



static void Test_BFu8i_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu8i");
    static BFu8i_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8i_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu8i(Test_BFu8i_BFu0i_BFu8i, "BFu8i_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu8ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8i_BFu0i_BFu8ll) C1{ Fi:8 Fi:0 FL:8}



static void Test_BFu8i_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu8ll");
    static BFu8i_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8i_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu8ll(Test_BFu8i_BFu0i_BFu8ll, "BFu8i_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu8s  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8i_BFu0i_BFu8s) C1{ Fi:8 Fi:0 Fs:8}



static void Test_BFu8i_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu8s");
    static BFu8i_BFu0i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8i_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu8s(Test_BFu8i_BFu0i_BFu8s, "BFu8i_BFu0i_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu9i  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8i_BFu0i_BFu9i) C1{ Fi:8 Fi:0 Fi:9}



static void Test_BFu8i_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu9i");
    static BFu8i_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8i_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu9i(Test_BFu8i_BFu0i_BFu9i, "BFu8i_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu9ll  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8i_BFu0i_BFu9ll) C1{ Fi:8 Fi:0 FL:9}



static void Test_BFu8i_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu9ll");
    static BFu8i_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8i_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu9ll(Test_BFu8i_BFu0i_BFu9ll, "BFu8i_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_BFu9s  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8i_BFu0i_BFu9s) C1{ Fi:8 Fi:0 Fs:9}



static void Test_BFu8i_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu8i_BFu0i_BFu9s");
    static BFu8i_BFu0i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8i_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_BFu9s(Test_BFu8i_BFu0i_BFu9s, "BFu8i_BFu0i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_C  {
  unsigned int v1:8;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu8i_BFu0i_C) C1{ Fi:8 Fi:0 Fc}



static void Test_BFu8i_BFu0i_C()
{
  {
    init_simple_test("BFu8i_BFu0i_C");
    static BFu8i_BFu0i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_C(Test_BFu8i_BFu0i_C, "BFu8i_BFu0i_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_D  {
  unsigned int v1:8;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu8i_BFu0i_D) C1{ Fi:8 Fi:0 FL}



static void Test_BFu8i_BFu0i_D()
{
  {
    init_simple_test("BFu8i_BFu0i_D");
    static BFu8i_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_D(Test_BFu8i_BFu0i_D, "BFu8i_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_F  {
  unsigned int v1:8;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu8i_BFu0i_F) C1{ Fi:8 Fi:0 Fi}



static void Test_BFu8i_BFu0i_F()
{
  {
    init_simple_test("BFu8i_BFu0i_F");
    static BFu8i_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_F(Test_BFu8i_BFu0i_F, "BFu8i_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_I  {
  unsigned int v1:8;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu8i_BFu0i_I) C1{ Fi:8 Fi:0 Fi}



static void Test_BFu8i_BFu0i_I()
{
  {
    init_simple_test("BFu8i_BFu0i_I");
    static BFu8i_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_I(Test_BFu8i_BFu0i_I, "BFu8i_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_Ip  {
  unsigned int v1:8;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu8i_BFu0i_Ip) C1{ Fi:8 Fi:0 Fp}



static void Test_BFu8i_BFu0i_Ip()
{
  {
    init_simple_test("BFu8i_BFu0i_Ip");
    static BFu8i_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_Ip(Test_BFu8i_BFu0i_Ip, "BFu8i_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_L  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu8i_BFu0i_L) C1{ Fi:8 Fi:0 FL}



static void Test_BFu8i_BFu0i_L()
{
  {
    init_simple_test("BFu8i_BFu0i_L");
    static BFu8i_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_L(Test_BFu8i_BFu0i_L, "BFu8i_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_S  {
  unsigned int v1:8;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu8i_BFu0i_S) C1{ Fi:8 Fi:0 Fs}



static void Test_BFu8i_BFu0i_S()
{
  {
    init_simple_test("BFu8i_BFu0i_S");
    static BFu8i_BFu0i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_S(Test_BFu8i_BFu0i_S, "BFu8i_BFu0i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_Uc  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu8i_BFu0i_Uc) C1{ Fi:8 Fi:0 Fc}



static void Test_BFu8i_BFu0i_Uc()
{
  {
    init_simple_test("BFu8i_BFu0i_Uc");
    static BFu8i_BFu0i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_Uc(Test_BFu8i_BFu0i_Uc, "BFu8i_BFu0i_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_Ui  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu8i_BFu0i_Ui) C1{ Fi:8 Fi:0 Fi}



static void Test_BFu8i_BFu0i_Ui()
{
  {
    init_simple_test("BFu8i_BFu0i_Ui");
    static BFu8i_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_Ui(Test_BFu8i_BFu0i_Ui, "BFu8i_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_Ul  {
  unsigned int v1:8;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu8i_BFu0i_Ul) C1{ Fi:8 Fi:0 FL}



static void Test_BFu8i_BFu0i_Ul()
{
  {
    init_simple_test("BFu8i_BFu0i_Ul");
    static BFu8i_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_Ul(Test_BFu8i_BFu0i_Ul, "BFu8i_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_Us  {
  unsigned int v1:8;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu8i_BFu0i_Us) C1{ Fi:8 Fi:0 Fs}



static void Test_BFu8i_BFu0i_Us()
{
  {
    init_simple_test("BFu8i_BFu0i_Us");
    static BFu8i_BFu0i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_Us(Test_BFu8i_BFu0i_Us, "BFu8i_BFu0i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0i_Vp  {
  unsigned int v1:8;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu8i_BFu0i_Vp) C1{ Fi:8 Fi:0 Fp}



static void Test_BFu8i_BFu0i_Vp()
{
  {
    init_simple_test("BFu8i_BFu0i_Vp");
    static BFu8i_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0i_Vp(Test_BFu8i_BFu0i_Vp, "BFu8i_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll  {
  unsigned int v1:8;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu0ll) C1{ Fi:8 FL:0}



static void Test_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu0ll");
    static BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll(Test_BFu8i_BFu0ll, "BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu0c  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu0ll_BFu0c) C1{ Fi:8 FL:0 Fc:0}



static void Test_BFu8i_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu0c");
    static BFu8i_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu0c(Test_BFu8i_BFu0ll_BFu0c, "BFu8i_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu0i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu0ll_BFu0i) C1{ Fi:8 FL:0 Fi:0}



static void Test_BFu8i_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu0i");
    static BFu8i_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu0i(Test_BFu8i_BFu0ll_BFu0i, "BFu8i_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu0ll_BFu0ll) C1{ Fi:8 FL:0 FL:0}



static void Test_BFu8i_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu0ll");
    static BFu8i_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu0ll(Test_BFu8i_BFu0ll_BFu0ll, "BFu8i_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu0s  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu0ll_BFu0s) C1{ Fi:8 FL:0 Fs:0}



static void Test_BFu8i_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu0s");
    static BFu8i_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu0s(Test_BFu8i_BFu0ll_BFu0s, "BFu8i_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu15i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8i_BFu0ll_BFu15i) C1{ Fi:8 FL:0 Fi:15}



static void Test_BFu8i_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu15i");
    static BFu8i_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8i_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu15i(Test_BFu8i_BFu0ll_BFu15i, "BFu8i_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu15ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8i_BFu0ll_BFu15ll) C1{ Fi:8 FL:0 FL:15}



static void Test_BFu8i_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu15ll");
    static BFu8i_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8i_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu15ll(Test_BFu8i_BFu0ll_BFu15ll, "BFu8i_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu15s  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8i_BFu0ll_BFu15s) C1{ Fi:8 FL:0 Fs:15}



static void Test_BFu8i_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu15s");
    static BFu8i_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8i_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu15s(Test_BFu8i_BFu0ll_BFu15s, "BFu8i_BFu0ll_BFu15s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu16i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8i_BFu0ll_BFu16i) C1{ Fi:8 FL:0 Fi:16}



static void Test_BFu8i_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu16i");
    static BFu8i_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8i_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu16i(Test_BFu8i_BFu0ll_BFu16i, "BFu8i_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu16ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8i_BFu0ll_BFu16ll) C1{ Fi:8 FL:0 FL:16}



static void Test_BFu8i_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu16ll");
    static BFu8i_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8i_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu16ll(Test_BFu8i_BFu0ll_BFu16ll, "BFu8i_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu16s  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8i_BFu0ll_BFu16s) C1{ Fi:8 FL:0 Fs:16}



static void Test_BFu8i_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu16s");
    static BFu8i_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8i_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu16s(Test_BFu8i_BFu0ll_BFu16s, "BFu8i_BFu0ll_BFu16s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu17i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8i_BFu0ll_BFu17i) C1{ Fi:8 FL:0 Fi:17}



static void Test_BFu8i_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu17i");
    static BFu8i_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu8i_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu8i_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu17i(Test_BFu8i_BFu0ll_BFu17i, "BFu8i_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu17ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8i_BFu0ll_BFu17ll) C1{ Fi:8 FL:0 FL:17}



static void Test_BFu8i_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu17ll");
    static BFu8i_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu8i_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu8i_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu17ll(Test_BFu8i_BFu0ll_BFu17ll, "BFu8i_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu1c  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8i_BFu0ll_BFu1c) C1{ Fi:8 FL:0 Fc:1}



static void Test_BFu8i_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu1c");
    static BFu8i_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8i_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu1c(Test_BFu8i_BFu0ll_BFu1c, "BFu8i_BFu0ll_BFu1c", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu1i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8i_BFu0ll_BFu1i) C1{ Fi:8 FL:0 Fi:1}



static void Test_BFu8i_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu1i");
    static BFu8i_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8i_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu1i(Test_BFu8i_BFu0ll_BFu1i, "BFu8i_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu1ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8i_BFu0ll_BFu1ll) C1{ Fi:8 FL:0 FL:1}



static void Test_BFu8i_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu1ll");
    static BFu8i_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8i_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu1ll(Test_BFu8i_BFu0ll_BFu1ll, "BFu8i_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu1s  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8i_BFu0ll_BFu1s) C1{ Fi:8 FL:0 Fs:1}



static void Test_BFu8i_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu1s");
    static BFu8i_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8i_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu1s(Test_BFu8i_BFu0ll_BFu1s, "BFu8i_BFu0ll_BFu1s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu31i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8i_BFu0ll_BFu31i) C1{ Fi:8 FL:0 Fi:31}



static void Test_BFu8i_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu31i");
    static BFu8i_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu8i_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu8i_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu31i(Test_BFu8i_BFu0ll_BFu31i, "BFu8i_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu31ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8i_BFu0ll_BFu31ll) C1{ Fi:8 FL:0 FL:31}



static void Test_BFu8i_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu31ll");
    static BFu8i_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu8i_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu8i_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu31ll(Test_BFu8i_BFu0ll_BFu31ll, "BFu8i_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu32i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8i_BFu0ll_BFu32i) C1{ Fi:8 FL:0 Fi:32}



static void Test_BFu8i_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu32i");
    static BFu8i_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu8i_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu8i_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu32i(Test_BFu8i_BFu0ll_BFu32i, "BFu8i_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu32ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8i_BFu0ll_BFu32ll) C1{ Fi:8 FL:0 FL:32}



static void Test_BFu8i_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu32ll");
    static BFu8i_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu8i_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu8i_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu32ll(Test_BFu8i_BFu0ll_BFu32ll, "BFu8i_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu33  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8i_BFu0ll_BFu33) C1{ Fi:8 FL:0 FL:33}



static void Test_BFu8i_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu33");
    static BFu8i_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu8i_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu8i_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu33(Test_BFu8i_BFu0ll_BFu33, "BFu8i_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu7c  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8i_BFu0ll_BFu7c) C1{ Fi:8 FL:0 Fc:7}



static void Test_BFu8i_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu7c");
    static BFu8i_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8i_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu7c(Test_BFu8i_BFu0ll_BFu7c, "BFu8i_BFu0ll_BFu7c", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu7i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8i_BFu0ll_BFu7i) C1{ Fi:8 FL:0 Fi:7}



static void Test_BFu8i_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu7i");
    static BFu8i_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8i_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu7i(Test_BFu8i_BFu0ll_BFu7i, "BFu8i_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu7ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8i_BFu0ll_BFu7ll) C1{ Fi:8 FL:0 FL:7}



static void Test_BFu8i_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu7ll");
    static BFu8i_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8i_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu7ll(Test_BFu8i_BFu0ll_BFu7ll, "BFu8i_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu7s  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8i_BFu0ll_BFu7s) C1{ Fi:8 FL:0 Fs:7}



static void Test_BFu8i_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu7s");
    static BFu8i_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8i_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu7s(Test_BFu8i_BFu0ll_BFu7s, "BFu8i_BFu0ll_BFu7s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu8c  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8i_BFu0ll_BFu8c) C1{ Fi:8 FL:0 Fc:8}



static void Test_BFu8i_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu8c");
    static BFu8i_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8i_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu8c(Test_BFu8i_BFu0ll_BFu8c, "BFu8i_BFu0ll_BFu8c", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu8i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8i_BFu0ll_BFu8i) C1{ Fi:8 FL:0 Fi:8}



static void Test_BFu8i_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu8i");
    static BFu8i_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8i_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu8i(Test_BFu8i_BFu0ll_BFu8i, "BFu8i_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu8ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8i_BFu0ll_BFu8ll) C1{ Fi:8 FL:0 FL:8}



static void Test_BFu8i_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu8ll");
    static BFu8i_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8i_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu8ll(Test_BFu8i_BFu0ll_BFu8ll, "BFu8i_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu8s  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8i_BFu0ll_BFu8s) C1{ Fi:8 FL:0 Fs:8}



static void Test_BFu8i_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu8s");
    static BFu8i_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8i_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu8s(Test_BFu8i_BFu0ll_BFu8s, "BFu8i_BFu0ll_BFu8s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu9i  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8i_BFu0ll_BFu9i) C1{ Fi:8 FL:0 Fi:9}



static void Test_BFu8i_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu9i");
    static BFu8i_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8i_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu9i(Test_BFu8i_BFu0ll_BFu9i, "BFu8i_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu9ll  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8i_BFu0ll_BFu9ll) C1{ Fi:8 FL:0 FL:9}



static void Test_BFu8i_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu9ll");
    static BFu8i_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8i_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu9ll(Test_BFu8i_BFu0ll_BFu9ll, "BFu8i_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_BFu9s  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8i_BFu0ll_BFu9s) C1{ Fi:8 FL:0 Fs:9}



static void Test_BFu8i_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu8i_BFu0ll_BFu9s");
    static BFu8i_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8i_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_BFu9s(Test_BFu8i_BFu0ll_BFu9s, "BFu8i_BFu0ll_BFu9s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_C  {
  unsigned int v1:8;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu8i_BFu0ll_C) C1{ Fi:8 FL:0 Fc}



static void Test_BFu8i_BFu0ll_C()
{
  {
    init_simple_test("BFu8i_BFu0ll_C");
    static BFu8i_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_C(Test_BFu8i_BFu0ll_C, "BFu8i_BFu0ll_C", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_D  {
  unsigned int v1:8;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu8i_BFu0ll_D) C1{ Fi:8 FL:0 FL}



static void Test_BFu8i_BFu0ll_D()
{
  {
    init_simple_test("BFu8i_BFu0ll_D");
    static BFu8i_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_D(Test_BFu8i_BFu0ll_D, "BFu8i_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_F  {
  unsigned int v1:8;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu8i_BFu0ll_F) C1{ Fi:8 FL:0 Fi}



static void Test_BFu8i_BFu0ll_F()
{
  {
    init_simple_test("BFu8i_BFu0ll_F");
    static BFu8i_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_F(Test_BFu8i_BFu0ll_F, "BFu8i_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_I  {
  unsigned int v1:8;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu8i_BFu0ll_I) C1{ Fi:8 FL:0 Fi}



static void Test_BFu8i_BFu0ll_I()
{
  {
    init_simple_test("BFu8i_BFu0ll_I");
    static BFu8i_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_I(Test_BFu8i_BFu0ll_I, "BFu8i_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_Ip  {
  unsigned int v1:8;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu8i_BFu0ll_Ip) C1{ Fi:8 FL:0 Fp}



static void Test_BFu8i_BFu0ll_Ip()
{
  {
    init_simple_test("BFu8i_BFu0ll_Ip");
    static BFu8i_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_Ip(Test_BFu8i_BFu0ll_Ip, "BFu8i_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_L  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu8i_BFu0ll_L) C1{ Fi:8 FL:0 FL}



static void Test_BFu8i_BFu0ll_L()
{
  {
    init_simple_test("BFu8i_BFu0ll_L");
    static BFu8i_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_L(Test_BFu8i_BFu0ll_L, "BFu8i_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_S  {
  unsigned int v1:8;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu8i_BFu0ll_S) C1{ Fi:8 FL:0 Fs}



static void Test_BFu8i_BFu0ll_S()
{
  {
    init_simple_test("BFu8i_BFu0ll_S");
    static BFu8i_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_S(Test_BFu8i_BFu0ll_S, "BFu8i_BFu0ll_S", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_Uc  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu8i_BFu0ll_Uc) C1{ Fi:8 FL:0 Fc}



static void Test_BFu8i_BFu0ll_Uc()
{
  {
    init_simple_test("BFu8i_BFu0ll_Uc");
    static BFu8i_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_Uc(Test_BFu8i_BFu0ll_Uc, "BFu8i_BFu0ll_Uc", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_Ui  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu8i_BFu0ll_Ui) C1{ Fi:8 FL:0 Fi}



static void Test_BFu8i_BFu0ll_Ui()
{
  {
    init_simple_test("BFu8i_BFu0ll_Ui");
    static BFu8i_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_Ui(Test_BFu8i_BFu0ll_Ui, "BFu8i_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_Ul  {
  unsigned int v1:8;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu8i_BFu0ll_Ul) C1{ Fi:8 FL:0 FL}



static void Test_BFu8i_BFu0ll_Ul()
{
  {
    init_simple_test("BFu8i_BFu0ll_Ul");
    static BFu8i_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_Ul(Test_BFu8i_BFu0ll_Ul, "BFu8i_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_Us  {
  unsigned int v1:8;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu8i_BFu0ll_Us) C1{ Fi:8 FL:0 Fs}



static void Test_BFu8i_BFu0ll_Us()
{
  {
    init_simple_test("BFu8i_BFu0ll_Us");
    static BFu8i_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8i_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_Us(Test_BFu8i_BFu0ll_Us, "BFu8i_BFu0ll_Us", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0ll_Vp  {
  unsigned int v1:8;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu8i_BFu0ll_Vp) C1{ Fi:8 FL:0 Fp}



static void Test_BFu8i_BFu0ll_Vp()
{
  {
    init_simple_test("BFu8i_BFu0ll_Vp");
    static BFu8i_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0ll_Vp(Test_BFu8i_BFu0ll_Vp, "BFu8i_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s  {
  unsigned int v1:8;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu0s) C1{ Fi:8 Fs:0}



static void Test_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu0s");
    static BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s(Test_BFu8i_BFu0s, "BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu0c  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu0s_BFu0c) C1{ Fi:8 Fs:0 Fc:0}



static void Test_BFu8i_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu0c");
    static BFu8i_BFu0s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu0c(Test_BFu8i_BFu0s_BFu0c, "BFu8i_BFu0s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu0i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu0s_BFu0i) C1{ Fi:8 Fs:0 Fi:0}



static void Test_BFu8i_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu0i");
    static BFu8i_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu0i(Test_BFu8i_BFu0s_BFu0i, "BFu8i_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu0ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu0s_BFu0ll) C1{ Fi:8 Fs:0 FL:0}



static void Test_BFu8i_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu0ll");
    static BFu8i_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu0ll(Test_BFu8i_BFu0s_BFu0ll, "BFu8i_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu0s  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu0s_BFu0s) C1{ Fi:8 Fs:0 Fs:0}



static void Test_BFu8i_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu0s");
    static BFu8i_BFu0s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu0s(Test_BFu8i_BFu0s_BFu0s, "BFu8i_BFu0s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu15i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8i_BFu0s_BFu15i) C1{ Fi:8 Fs:0 Fi:15}



static void Test_BFu8i_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu15i");
    static BFu8i_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8i_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu15i(Test_BFu8i_BFu0s_BFu15i, "BFu8i_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu15ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8i_BFu0s_BFu15ll) C1{ Fi:8 Fs:0 FL:15}



static void Test_BFu8i_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu15ll");
    static BFu8i_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8i_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu15ll(Test_BFu8i_BFu0s_BFu15ll, "BFu8i_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu15s  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8i_BFu0s_BFu15s) C1{ Fi:8 Fs:0 Fs:15}



static void Test_BFu8i_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu15s");
    static BFu8i_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8i_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu15s(Test_BFu8i_BFu0s_BFu15s, "BFu8i_BFu0s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu16i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8i_BFu0s_BFu16i) C1{ Fi:8 Fs:0 Fi:16}



static void Test_BFu8i_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu16i");
    static BFu8i_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8i_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu16i(Test_BFu8i_BFu0s_BFu16i, "BFu8i_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu16ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8i_BFu0s_BFu16ll) C1{ Fi:8 Fs:0 FL:16}



static void Test_BFu8i_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu16ll");
    static BFu8i_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8i_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu16ll(Test_BFu8i_BFu0s_BFu16ll, "BFu8i_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu16s  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8i_BFu0s_BFu16s) C1{ Fi:8 Fs:0 Fs:16}



static void Test_BFu8i_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu16s");
    static BFu8i_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8i_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu16s(Test_BFu8i_BFu0s_BFu16s, "BFu8i_BFu0s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu17i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8i_BFu0s_BFu17i) C1{ Fi:8 Fs:0 Fi:17}



static void Test_BFu8i_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu17i");
    static BFu8i_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8i_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu17i(Test_BFu8i_BFu0s_BFu17i, "BFu8i_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu17ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8i_BFu0s_BFu17ll) C1{ Fi:8 Fs:0 FL:17}



static void Test_BFu8i_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu17ll");
    static BFu8i_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu8i_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu17ll(Test_BFu8i_BFu0s_BFu17ll, "BFu8i_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu1c  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8i_BFu0s_BFu1c) C1{ Fi:8 Fs:0 Fc:1}



static void Test_BFu8i_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu1c");
    static BFu8i_BFu0s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8i_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu1c(Test_BFu8i_BFu0s_BFu1c, "BFu8i_BFu0s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu1i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8i_BFu0s_BFu1i) C1{ Fi:8 Fs:0 Fi:1}



static void Test_BFu8i_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu1i");
    static BFu8i_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8i_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu1i(Test_BFu8i_BFu0s_BFu1i, "BFu8i_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu1ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8i_BFu0s_BFu1ll) C1{ Fi:8 Fs:0 FL:1}



static void Test_BFu8i_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu1ll");
    static BFu8i_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8i_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu1ll(Test_BFu8i_BFu0s_BFu1ll, "BFu8i_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu1s  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8i_BFu0s_BFu1s) C1{ Fi:8 Fs:0 Fs:1}



static void Test_BFu8i_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu1s");
    static BFu8i_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8i_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu1s(Test_BFu8i_BFu0s_BFu1s, "BFu8i_BFu0s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu31i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8i_BFu0s_BFu31i) C1{ Fi:8 Fs:0 Fi:31}



static void Test_BFu8i_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu31i");
    static BFu8i_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8i_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu31i(Test_BFu8i_BFu0s_BFu31i, "BFu8i_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu31ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8i_BFu0s_BFu31ll) C1{ Fi:8 Fs:0 FL:31}



static void Test_BFu8i_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu31ll");
    static BFu8i_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu8i_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu31ll(Test_BFu8i_BFu0s_BFu31ll, "BFu8i_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu32i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8i_BFu0s_BFu32i) C1{ Fi:8 Fs:0 Fi:32}



static void Test_BFu8i_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu32i");
    static BFu8i_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8i_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu32i(Test_BFu8i_BFu0s_BFu32i, "BFu8i_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu32ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8i_BFu0s_BFu32ll) C1{ Fi:8 Fs:0 FL:32}



static void Test_BFu8i_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu32ll");
    static BFu8i_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu8i_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu32ll(Test_BFu8i_BFu0s_BFu32ll, "BFu8i_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu33  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8i_BFu0s_BFu33) C1{ Fi:8 Fs:0 FL:33}



static void Test_BFu8i_BFu0s_BFu33()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu33");
    static BFu8i_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu8i_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu8i_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu33(Test_BFu8i_BFu0s_BFu33, "BFu8i_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu7c  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8i_BFu0s_BFu7c) C1{ Fi:8 Fs:0 Fc:7}



static void Test_BFu8i_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu7c");
    static BFu8i_BFu0s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8i_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu7c(Test_BFu8i_BFu0s_BFu7c, "BFu8i_BFu0s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu7i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8i_BFu0s_BFu7i) C1{ Fi:8 Fs:0 Fi:7}



static void Test_BFu8i_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu7i");
    static BFu8i_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8i_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu7i(Test_BFu8i_BFu0s_BFu7i, "BFu8i_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu7ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8i_BFu0s_BFu7ll) C1{ Fi:8 Fs:0 FL:7}



static void Test_BFu8i_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu7ll");
    static BFu8i_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8i_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu7ll(Test_BFu8i_BFu0s_BFu7ll, "BFu8i_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu7s  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8i_BFu0s_BFu7s) C1{ Fi:8 Fs:0 Fs:7}



static void Test_BFu8i_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu7s");
    static BFu8i_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8i_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu7s(Test_BFu8i_BFu0s_BFu7s, "BFu8i_BFu0s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu8c  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8i_BFu0s_BFu8c) C1{ Fi:8 Fs:0 Fc:8}



static void Test_BFu8i_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu8c");
    static BFu8i_BFu0s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8i_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu8c(Test_BFu8i_BFu0s_BFu8c, "BFu8i_BFu0s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu8i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8i_BFu0s_BFu8i) C1{ Fi:8 Fs:0 Fi:8}



static void Test_BFu8i_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu8i");
    static BFu8i_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8i_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu8i(Test_BFu8i_BFu0s_BFu8i, "BFu8i_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu8ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8i_BFu0s_BFu8ll) C1{ Fi:8 Fs:0 FL:8}



static void Test_BFu8i_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu8ll");
    static BFu8i_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8i_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu8ll(Test_BFu8i_BFu0s_BFu8ll, "BFu8i_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu8s  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8i_BFu0s_BFu8s) C1{ Fi:8 Fs:0 Fs:8}



static void Test_BFu8i_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu8s");
    static BFu8i_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8i_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu8s(Test_BFu8i_BFu0s_BFu8s, "BFu8i_BFu0s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu9i  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8i_BFu0s_BFu9i) C1{ Fi:8 Fs:0 Fi:9}



static void Test_BFu8i_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu9i");
    static BFu8i_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8i_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu9i(Test_BFu8i_BFu0s_BFu9i, "BFu8i_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu9ll  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8i_BFu0s_BFu9ll) C1{ Fi:8 Fs:0 FL:9}



static void Test_BFu8i_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu9ll");
    static BFu8i_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8i_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu9ll(Test_BFu8i_BFu0s_BFu9ll, "BFu8i_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_BFu9s  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8i_BFu0s_BFu9s) C1{ Fi:8 Fs:0 Fs:9}



static void Test_BFu8i_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu8i_BFu0s_BFu9s");
    static BFu8i_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8i_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_BFu9s(Test_BFu8i_BFu0s_BFu9s, "BFu8i_BFu0s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_C  {
  unsigned int v1:8;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu8i_BFu0s_C) C1{ Fi:8 Fs:0 Fc}



static void Test_BFu8i_BFu0s_C()
{
  {
    init_simple_test("BFu8i_BFu0s_C");
    static BFu8i_BFu0s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu8i_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_C(Test_BFu8i_BFu0s_C, "BFu8i_BFu0s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_D  {
  unsigned int v1:8;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu8i_BFu0s_D) C1{ Fi:8 Fs:0 FL}



static void Test_BFu8i_BFu0s_D()
{
  {
    init_simple_test("BFu8i_BFu0s_D");
    static BFu8i_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_D(Test_BFu8i_BFu0s_D, "BFu8i_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_F  {
  unsigned int v1:8;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu8i_BFu0s_F) C1{ Fi:8 Fs:0 Fi}



static void Test_BFu8i_BFu0s_F()
{
  {
    init_simple_test("BFu8i_BFu0s_F");
    static BFu8i_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_F(Test_BFu8i_BFu0s_F, "BFu8i_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_I  {
  unsigned int v1:8;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu8i_BFu0s_I) C1{ Fi:8 Fs:0 Fi}



static void Test_BFu8i_BFu0s_I()
{
  {
    init_simple_test("BFu8i_BFu0s_I");
    static BFu8i_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_I(Test_BFu8i_BFu0s_I, "BFu8i_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_Ip  {
  unsigned int v1:8;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu8i_BFu0s_Ip) C1{ Fi:8 Fs:0 Fp}



static void Test_BFu8i_BFu0s_Ip()
{
  {
    init_simple_test("BFu8i_BFu0s_Ip");
    static BFu8i_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_Ip(Test_BFu8i_BFu0s_Ip, "BFu8i_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_L  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu8i_BFu0s_L) C1{ Fi:8 Fs:0 FL}



static void Test_BFu8i_BFu0s_L()
{
  {
    init_simple_test("BFu8i_BFu0s_L");
    static BFu8i_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_L(Test_BFu8i_BFu0s_L, "BFu8i_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_S  {
  unsigned int v1:8;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu8i_BFu0s_S) C1{ Fi:8 Fs:0 Fs}



static void Test_BFu8i_BFu0s_S()
{
  {
    init_simple_test("BFu8i_BFu0s_S");
    static BFu8i_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu8i_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_S(Test_BFu8i_BFu0s_S, "BFu8i_BFu0s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_Uc  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu8i_BFu0s_Uc) C1{ Fi:8 Fs:0 Fc}



static void Test_BFu8i_BFu0s_Uc()
{
  {
    init_simple_test("BFu8i_BFu0s_Uc");
    static BFu8i_BFu0s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu8i_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_Uc(Test_BFu8i_BFu0s_Uc, "BFu8i_BFu0s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_Ui  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu8i_BFu0s_Ui) C1{ Fi:8 Fs:0 Fi}



static void Test_BFu8i_BFu0s_Ui()
{
  {
    init_simple_test("BFu8i_BFu0s_Ui");
    static BFu8i_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu8i_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_Ui(Test_BFu8i_BFu0s_Ui, "BFu8i_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_Ul  {
  unsigned int v1:8;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu8i_BFu0s_Ul) C1{ Fi:8 Fs:0 FL}



static void Test_BFu8i_BFu0s_Ul()
{
  {
    init_simple_test("BFu8i_BFu0s_Ul");
    static BFu8i_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_Ul(Test_BFu8i_BFu0s_Ul, "BFu8i_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_Us  {
  unsigned int v1:8;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu8i_BFu0s_Us) C1{ Fi:8 Fs:0 Fs}



static void Test_BFu8i_BFu0s_Us()
{
  {
    init_simple_test("BFu8i_BFu0s_Us");
    static BFu8i_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu0s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu8i_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_Us(Test_BFu8i_BFu0s_Us, "BFu8i_BFu0s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu0s_Vp  {
  unsigned int v1:8;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu8i_BFu0s_Vp) C1{ Fi:8 Fs:0 Fp}



static void Test_BFu8i_BFu0s_Vp()
{
  {
    init_simple_test("BFu8i_BFu0s_Vp");
    static BFu8i_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu0s_Vp(Test_BFu8i_BFu0s_Vp, "BFu8i_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15i_BFu0c  {
  unsigned int v1:8;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu15i_BFu0c) C1{ Fi:8 Fi:15 Fc:0}



static void Test_BFu8i_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu15i_BFu0c");
    static BFu8i_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15i_BFu0c(Test_BFu8i_BFu15i_BFu0c, "BFu8i_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15i_BFu0i  {
  unsigned int v1:8;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu15i_BFu0i) C1{ Fi:8 Fi:15 Fi:0}



static void Test_BFu8i_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu15i_BFu0i");
    static BFu8i_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15i_BFu0i(Test_BFu8i_BFu15i_BFu0i, "BFu8i_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15i_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu15i_BFu0ll) C1{ Fi:8 Fi:15 FL:0}



static void Test_BFu8i_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu15i_BFu0ll");
    static BFu8i_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15i_BFu0ll(Test_BFu8i_BFu15i_BFu0ll, "BFu8i_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15i_BFu0s  {
  unsigned int v1:8;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu15i_BFu0s) C1{ Fi:8 Fi:15 Fs:0}



static void Test_BFu8i_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu15i_BFu0s");
    static BFu8i_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15i_BFu0s(Test_BFu8i_BFu15i_BFu0s, "BFu8i_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15ll_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu15ll_BFu0c) C1{ Fi:8 FL:15 Fc:0}



static void Test_BFu8i_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu15ll_BFu0c");
    static BFu8i_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15ll_BFu0c(Test_BFu8i_BFu15ll_BFu0c, "BFu8i_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15ll_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu15ll_BFu0i) C1{ Fi:8 FL:15 Fi:0}



static void Test_BFu8i_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu15ll_BFu0i");
    static BFu8i_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15ll_BFu0i(Test_BFu8i_BFu15ll_BFu0i, "BFu8i_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu15ll_BFu0ll) C1{ Fi:8 FL:15 FL:0}



static void Test_BFu8i_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu15ll_BFu0ll");
    static BFu8i_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15ll_BFu0ll(Test_BFu8i_BFu15ll_BFu0ll, "BFu8i_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15ll_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu15ll_BFu0s) C1{ Fi:8 FL:15 Fs:0}



static void Test_BFu8i_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu15ll_BFu0s");
    static BFu8i_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8i_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15ll_BFu0s(Test_BFu8i_BFu15ll_BFu0s, "BFu8i_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15s_BFu0c  {
  unsigned int v1:8;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu15s_BFu0c) C1{ Fi:8 Fs:15 Fc:0}



static void Test_BFu8i_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu15s_BFu0c");
    static BFu8i_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu15s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8i_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15s_BFu0c(Test_BFu8i_BFu15s_BFu0c, "BFu8i_BFu15s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15s_BFu0i  {
  unsigned int v1:8;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu15s_BFu0i) C1{ Fi:8 Fs:15 Fi:0}



static void Test_BFu8i_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu15s_BFu0i");
    static BFu8i_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu15s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8i_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15s_BFu0i(Test_BFu8i_BFu15s_BFu0i, "BFu8i_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15s_BFu0ll  {
  unsigned int v1:8;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu15s_BFu0ll) C1{ Fi:8 Fs:15 FL:0}



static void Test_BFu8i_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu15s_BFu0ll");
    static BFu8i_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8i_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15s_BFu0ll(Test_BFu8i_BFu15s_BFu0ll, "BFu8i_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu15s_BFu0s  {
  unsigned int v1:8;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu15s_BFu0s) C1{ Fi:8 Fs:15 Fs:0}



static void Test_BFu8i_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu15s_BFu0s");
    static BFu8i_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu15s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8i_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8i_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu15s_BFu0s(Test_BFu8i_BFu15s_BFu0s, "BFu8i_BFu15s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16i_BFu0c  {
  unsigned int v1:8;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu16i_BFu0c) C1{ Fi:8 Fi:16 Fc:0}



static void Test_BFu8i_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu16i_BFu0c");
    static BFu8i_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16i_BFu0c(Test_BFu8i_BFu16i_BFu0c, "BFu8i_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16i_BFu0i  {
  unsigned int v1:8;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu16i_BFu0i) C1{ Fi:8 Fi:16 Fi:0}



static void Test_BFu8i_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu16i_BFu0i");
    static BFu8i_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16i_BFu0i(Test_BFu8i_BFu16i_BFu0i, "BFu8i_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16i_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu16i_BFu0ll) C1{ Fi:8 Fi:16 FL:0}



static void Test_BFu8i_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu16i_BFu0ll");
    static BFu8i_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16i_BFu0ll(Test_BFu8i_BFu16i_BFu0ll, "BFu8i_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16i_BFu0s  {
  unsigned int v1:8;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu16i_BFu0s) C1{ Fi:8 Fi:16 Fs:0}



static void Test_BFu8i_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu16i_BFu0s");
    static BFu8i_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16i_BFu0s(Test_BFu8i_BFu16i_BFu0s, "BFu8i_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16ll_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu16ll_BFu0c) C1{ Fi:8 FL:16 Fc:0}



static void Test_BFu8i_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu16ll_BFu0c");
    static BFu8i_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16ll_BFu0c(Test_BFu8i_BFu16ll_BFu0c, "BFu8i_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16ll_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu16ll_BFu0i) C1{ Fi:8 FL:16 Fi:0}



static void Test_BFu8i_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu16ll_BFu0i");
    static BFu8i_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16ll_BFu0i(Test_BFu8i_BFu16ll_BFu0i, "BFu8i_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu16ll_BFu0ll) C1{ Fi:8 FL:16 FL:0}



static void Test_BFu8i_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu16ll_BFu0ll");
    static BFu8i_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16ll_BFu0ll(Test_BFu8i_BFu16ll_BFu0ll, "BFu8i_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16ll_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu16ll_BFu0s) C1{ Fi:8 FL:16 Fs:0}



static void Test_BFu8i_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu16ll_BFu0s");
    static BFu8i_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8i_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16ll_BFu0s(Test_BFu8i_BFu16ll_BFu0s, "BFu8i_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16s_BFu0c  {
  unsigned int v1:8;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu16s_BFu0c) C1{ Fi:8 Fs:16 Fc:0}



static void Test_BFu8i_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu16s_BFu0c");
    static BFu8i_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu16s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8i_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16s_BFu0c(Test_BFu8i_BFu16s_BFu0c, "BFu8i_BFu16s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16s_BFu0i  {
  unsigned int v1:8;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu16s_BFu0i) C1{ Fi:8 Fs:16 Fi:0}



static void Test_BFu8i_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu16s_BFu0i");
    static BFu8i_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu16s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8i_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16s_BFu0i(Test_BFu8i_BFu16s_BFu0i, "BFu8i_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16s_BFu0ll  {
  unsigned int v1:8;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu16s_BFu0ll) C1{ Fi:8 Fs:16 FL:0}



static void Test_BFu8i_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu16s_BFu0ll");
    static BFu8i_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8i_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16s_BFu0ll(Test_BFu8i_BFu16s_BFu0ll, "BFu8i_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu16s_BFu0s  {
  unsigned int v1:8;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu16s_BFu0s) C1{ Fi:8 Fs:16 Fs:0}



static void Test_BFu8i_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu16s_BFu0s");
    static BFu8i_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu16s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8i_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8i_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu16s_BFu0s(Test_BFu8i_BFu16s_BFu0s, "BFu8i_BFu16s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu17i_BFu0c  {
  unsigned int v1:8;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu17i_BFu0c) C1{ Fi:8 Fi:17 Fc:0}



static void Test_BFu8i_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu17i_BFu0c");
    static BFu8i_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu17i_BFu0c(Test_BFu8i_BFu17i_BFu0c, "BFu8i_BFu17i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu17i_BFu0i  {
  unsigned int v1:8;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu17i_BFu0i) C1{ Fi:8 Fi:17 Fi:0}



static void Test_BFu8i_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu17i_BFu0i");
    static BFu8i_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu17i_BFu0i(Test_BFu8i_BFu17i_BFu0i, "BFu8i_BFu17i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu17i_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu17i_BFu0ll) C1{ Fi:8 Fi:17 FL:0}



static void Test_BFu8i_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu17i_BFu0ll");
    static BFu8i_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu17i_BFu0ll(Test_BFu8i_BFu17i_BFu0ll, "BFu8i_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu17i_BFu0s  {
  unsigned int v1:8;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu17i_BFu0s) C1{ Fi:8 Fi:17 Fs:0}



static void Test_BFu8i_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu17i_BFu0s");
    static BFu8i_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu17i_BFu0s(Test_BFu8i_BFu17i_BFu0s, "BFu8i_BFu17i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu17ll_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu17ll_BFu0c) C1{ Fi:8 FL:17 Fc:0}



static void Test_BFu8i_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu17ll_BFu0c");
    static BFu8i_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu17ll_BFu0c(Test_BFu8i_BFu17ll_BFu0c, "BFu8i_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu17ll_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu17ll_BFu0i) C1{ Fi:8 FL:17 Fi:0}



static void Test_BFu8i_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu17ll_BFu0i");
    static BFu8i_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu17ll_BFu0i(Test_BFu8i_BFu17ll_BFu0i, "BFu8i_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu17ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu17ll_BFu0ll) C1{ Fi:8 FL:17 FL:0}



static void Test_BFu8i_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu17ll_BFu0ll");
    static BFu8i_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu17ll_BFu0ll(Test_BFu8i_BFu17ll_BFu0ll, "BFu8i_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu17ll_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu17ll_BFu0s) C1{ Fi:8 FL:17 Fs:0}



static void Test_BFu8i_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu17ll_BFu0s");
    static BFu8i_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8i_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8i_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu17ll_BFu0s(Test_BFu8i_BFu17ll_BFu0s, "BFu8i_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1c_BFu0c  {
  unsigned int v1:8;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu1c_BFu0c) C1{ Fi:8 Fc:1 Fc:0}



static void Test_BFu8i_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu1c_BFu0c");
    static BFu8i_BFu1c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu1c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1c_BFu0c(Test_BFu8i_BFu1c_BFu0c, "BFu8i_BFu1c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1c_BFu0i  {
  unsigned int v1:8;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu1c_BFu0i) C1{ Fi:8 Fc:1 Fi:0}



static void Test_BFu8i_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu1c_BFu0i");
    static BFu8i_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu1c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1c_BFu0i(Test_BFu8i_BFu1c_BFu0i, "BFu8i_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1c_BFu0ll  {
  unsigned int v1:8;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu1c_BFu0ll) C1{ Fi:8 Fc:1 FL:0}



static void Test_BFu8i_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu1c_BFu0ll");
    static BFu8i_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1c_BFu0ll(Test_BFu8i_BFu1c_BFu0ll, "BFu8i_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1c_BFu0s  {
  unsigned int v1:8;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu1c_BFu0s) C1{ Fi:8 Fc:1 Fs:0}



static void Test_BFu8i_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu1c_BFu0s");
    static BFu8i_BFu1c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu1c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1c_BFu0s(Test_BFu8i_BFu1c_BFu0s, "BFu8i_BFu1c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1i_BFu0c  {
  unsigned int v1:8;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu1i_BFu0c) C1{ Fi:8 Fi:1 Fc:0}



static void Test_BFu8i_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu1i_BFu0c");
    static BFu8i_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1i_BFu0c(Test_BFu8i_BFu1i_BFu0c, "BFu8i_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1i_BFu0i  {
  unsigned int v1:8;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu1i_BFu0i) C1{ Fi:8 Fi:1 Fi:0}



static void Test_BFu8i_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu1i_BFu0i");
    static BFu8i_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1i_BFu0i(Test_BFu8i_BFu1i_BFu0i, "BFu8i_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1i_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu1i_BFu0ll) C1{ Fi:8 Fi:1 FL:0}



static void Test_BFu8i_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu1i_BFu0ll");
    static BFu8i_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1i_BFu0ll(Test_BFu8i_BFu1i_BFu0ll, "BFu8i_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1i_BFu0s  {
  unsigned int v1:8;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu1i_BFu0s) C1{ Fi:8 Fi:1 Fs:0}



static void Test_BFu8i_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu1i_BFu0s");
    static BFu8i_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1i_BFu0s(Test_BFu8i_BFu1i_BFu0s, "BFu8i_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1ll_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu1ll_BFu0c) C1{ Fi:8 FL:1 Fc:0}



static void Test_BFu8i_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu1ll_BFu0c");
    static BFu8i_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1ll_BFu0c(Test_BFu8i_BFu1ll_BFu0c, "BFu8i_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1ll_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu1ll_BFu0i) C1{ Fi:8 FL:1 Fi:0}



static void Test_BFu8i_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu1ll_BFu0i");
    static BFu8i_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1ll_BFu0i(Test_BFu8i_BFu1ll_BFu0i, "BFu8i_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu1ll_BFu0ll) C1{ Fi:8 FL:1 FL:0}



static void Test_BFu8i_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu1ll_BFu0ll");
    static BFu8i_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1ll_BFu0ll(Test_BFu8i_BFu1ll_BFu0ll, "BFu8i_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1ll_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu1ll_BFu0s) C1{ Fi:8 FL:1 Fs:0}



static void Test_BFu8i_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu1ll_BFu0s");
    static BFu8i_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1ll_BFu0s(Test_BFu8i_BFu1ll_BFu0s, "BFu8i_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1s_BFu0c  {
  unsigned int v1:8;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu1s_BFu0c) C1{ Fi:8 Fs:1 Fc:0}



static void Test_BFu8i_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu1s_BFu0c");
    static BFu8i_BFu1s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu1s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1s_BFu0c(Test_BFu8i_BFu1s_BFu0c, "BFu8i_BFu1s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1s_BFu0i  {
  unsigned int v1:8;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu1s_BFu0i) C1{ Fi:8 Fs:1 Fi:0}



static void Test_BFu8i_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu1s_BFu0i");
    static BFu8i_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu1s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1s_BFu0i(Test_BFu8i_BFu1s_BFu0i, "BFu8i_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1s_BFu0ll  {
  unsigned int v1:8;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu1s_BFu0ll) C1{ Fi:8 Fs:1 FL:0}



static void Test_BFu8i_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu1s_BFu0ll");
    static BFu8i_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1s_BFu0ll(Test_BFu8i_BFu1s_BFu0ll, "BFu8i_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu1s_BFu0s  {
  unsigned int v1:8;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu1s_BFu0s) C1{ Fi:8 Fs:1 Fs:0}



static void Test_BFu8i_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu1s_BFu0s");
    static BFu8i_BFu1s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu1s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8i_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu1s_BFu0s(Test_BFu8i_BFu1s_BFu0s, "BFu8i_BFu1s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu31i_BFu0c  {
  unsigned int v1:8;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu31i_BFu0c) C1{ Fi:8 Fi:31 Fc:0}



static void Test_BFu8i_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu31i_BFu0c");
    static BFu8i_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8i_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu31i_BFu0c(Test_BFu8i_BFu31i_BFu0c, "BFu8i_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu31i_BFu0i  {
  unsigned int v1:8;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu31i_BFu0i) C1{ Fi:8 Fi:31 Fi:0}



static void Test_BFu8i_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu31i_BFu0i");
    static BFu8i_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8i_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu31i_BFu0i(Test_BFu8i_BFu31i_BFu0i, "BFu8i_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu31i_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu31i_BFu0ll) C1{ Fi:8 Fi:31 FL:0}



static void Test_BFu8i_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu31i_BFu0ll");
    static BFu8i_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8i_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu31i_BFu0ll(Test_BFu8i_BFu31i_BFu0ll, "BFu8i_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu31i_BFu0s  {
  unsigned int v1:8;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu31i_BFu0s) C1{ Fi:8 Fi:31 Fs:0}



static void Test_BFu8i_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu31i_BFu0s");
    static BFu8i_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8i_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu31i_BFu0s(Test_BFu8i_BFu31i_BFu0s, "BFu8i_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu31ll_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu31ll_BFu0c) C1{ Fi:8 FL:31 Fc:0}



static void Test_BFu8i_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu31ll_BFu0c");
    static BFu8i_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8i_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu31ll_BFu0c(Test_BFu8i_BFu31ll_BFu0c, "BFu8i_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu31ll_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu31ll_BFu0i) C1{ Fi:8 FL:31 Fi:0}



static void Test_BFu8i_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu31ll_BFu0i");
    static BFu8i_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8i_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu31ll_BFu0i(Test_BFu8i_BFu31ll_BFu0i, "BFu8i_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu31ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu31ll_BFu0ll) C1{ Fi:8 FL:31 FL:0}



static void Test_BFu8i_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu31ll_BFu0ll");
    static BFu8i_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8i_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu31ll_BFu0ll(Test_BFu8i_BFu31ll_BFu0ll, "BFu8i_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu31ll_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu31ll_BFu0s) C1{ Fi:8 FL:31 Fs:0}



static void Test_BFu8i_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu31ll_BFu0s");
    static BFu8i_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8i_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8i_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu31ll_BFu0s(Test_BFu8i_BFu31ll_BFu0s, "BFu8i_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu32i_BFu0c  {
  unsigned int v1:8;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu32i_BFu0c) C1{ Fi:8 Fi:32 Fc:0}



static void Test_BFu8i_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu32i_BFu0c");
    static BFu8i_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8i_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu32i_BFu0c(Test_BFu8i_BFu32i_BFu0c, "BFu8i_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu32i_BFu0i  {
  unsigned int v1:8;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu32i_BFu0i) C1{ Fi:8 Fi:32 Fi:0}



static void Test_BFu8i_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu32i_BFu0i");
    static BFu8i_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8i_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu32i_BFu0i(Test_BFu8i_BFu32i_BFu0i, "BFu8i_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu32i_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu32i_BFu0ll) C1{ Fi:8 Fi:32 FL:0}



static void Test_BFu8i_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu32i_BFu0ll");
    static BFu8i_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8i_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu32i_BFu0ll(Test_BFu8i_BFu32i_BFu0ll, "BFu8i_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu32i_BFu0s  {
  unsigned int v1:8;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu32i_BFu0s) C1{ Fi:8 Fi:32 Fs:0}



static void Test_BFu8i_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu32i_BFu0s");
    static BFu8i_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8i_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu32i_BFu0s(Test_BFu8i_BFu32i_BFu0s, "BFu8i_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu32ll_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu32ll_BFu0c) C1{ Fi:8 FL:32 Fc:0}



static void Test_BFu8i_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu32ll_BFu0c");
    static BFu8i_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8i_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu32ll_BFu0c(Test_BFu8i_BFu32ll_BFu0c, "BFu8i_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu32ll_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu32ll_BFu0i) C1{ Fi:8 FL:32 Fi:0}



static void Test_BFu8i_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu32ll_BFu0i");
    static BFu8i_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8i_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu32ll_BFu0i(Test_BFu8i_BFu32ll_BFu0i, "BFu8i_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu32ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu32ll_BFu0ll) C1{ Fi:8 FL:32 FL:0}



static void Test_BFu8i_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu32ll_BFu0ll");
    static BFu8i_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8i_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu32ll_BFu0ll(Test_BFu8i_BFu32ll_BFu0ll, "BFu8i_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu32ll_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu32ll_BFu0s) C1{ Fi:8 FL:32 Fs:0}



static void Test_BFu8i_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu32ll_BFu0s");
    static BFu8i_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8i_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8i_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu32ll_BFu0s(Test_BFu8i_BFu32ll_BFu0s, "BFu8i_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu33_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu33_BFu0c) C1{ Fi:8 FL:33 Fc:0}



static void Test_BFu8i_BFu33_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu33_BFu0c");
    static BFu8i_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8i_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8i_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu33_BFu0c(Test_BFu8i_BFu33_BFu0c, "BFu8i_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu33_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu33_BFu0i) C1{ Fi:8 FL:33 Fi:0}



static void Test_BFu8i_BFu33_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu33_BFu0i");
    static BFu8i_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8i_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8i_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu33_BFu0i(Test_BFu8i_BFu33_BFu0i, "BFu8i_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu33_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu33_BFu0ll) C1{ Fi:8 FL:33 FL:0}



static void Test_BFu8i_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu33_BFu0ll");
    static BFu8i_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8i_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8i_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu33_BFu0ll(Test_BFu8i_BFu33_BFu0ll, "BFu8i_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu33_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu33_BFu0s) C1{ Fi:8 FL:33 Fs:0}



static void Test_BFu8i_BFu33_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu33_BFu0s");
    static BFu8i_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8i_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8i_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu33_BFu0s(Test_BFu8i_BFu33_BFu0s, "BFu8i_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7c_BFu0c  {
  unsigned int v1:8;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu7c_BFu0c) C1{ Fi:8 Fc:7 Fc:0}



static void Test_BFu8i_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu7c_BFu0c");
    static BFu8i_BFu7c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu7c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7c_BFu0c(Test_BFu8i_BFu7c_BFu0c, "BFu8i_BFu7c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7c_BFu0i  {
  unsigned int v1:8;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu7c_BFu0i) C1{ Fi:8 Fc:7 Fi:0}



static void Test_BFu8i_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu7c_BFu0i");
    static BFu8i_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu7c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7c_BFu0i(Test_BFu8i_BFu7c_BFu0i, "BFu8i_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7c_BFu0ll  {
  unsigned int v1:8;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu7c_BFu0ll) C1{ Fi:8 Fc:7 FL:0}



static void Test_BFu8i_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu7c_BFu0ll");
    static BFu8i_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7c_BFu0ll(Test_BFu8i_BFu7c_BFu0ll, "BFu8i_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7c_BFu0s  {
  unsigned int v1:8;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu7c_BFu0s) C1{ Fi:8 Fc:7 Fs:0}



static void Test_BFu8i_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu7c_BFu0s");
    static BFu8i_BFu7c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu7c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7c_BFu0s(Test_BFu8i_BFu7c_BFu0s, "BFu8i_BFu7c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7i_BFu0c  {
  unsigned int v1:8;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu7i_BFu0c) C1{ Fi:8 Fi:7 Fc:0}



static void Test_BFu8i_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu7i_BFu0c");
    static BFu8i_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7i_BFu0c(Test_BFu8i_BFu7i_BFu0c, "BFu8i_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7i_BFu0i  {
  unsigned int v1:8;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu7i_BFu0i) C1{ Fi:8 Fi:7 Fi:0}



static void Test_BFu8i_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu7i_BFu0i");
    static BFu8i_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7i_BFu0i(Test_BFu8i_BFu7i_BFu0i, "BFu8i_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7i_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu7i_BFu0ll) C1{ Fi:8 Fi:7 FL:0}



static void Test_BFu8i_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu7i_BFu0ll");
    static BFu8i_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7i_BFu0ll(Test_BFu8i_BFu7i_BFu0ll, "BFu8i_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7i_BFu0s  {
  unsigned int v1:8;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu7i_BFu0s) C1{ Fi:8 Fi:7 Fs:0}



static void Test_BFu8i_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu7i_BFu0s");
    static BFu8i_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7i_BFu0s(Test_BFu8i_BFu7i_BFu0s, "BFu8i_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7ll_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu7ll_BFu0c) C1{ Fi:8 FL:7 Fc:0}



static void Test_BFu8i_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu7ll_BFu0c");
    static BFu8i_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7ll_BFu0c(Test_BFu8i_BFu7ll_BFu0c, "BFu8i_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7ll_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu7ll_BFu0i) C1{ Fi:8 FL:7 Fi:0}



static void Test_BFu8i_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu7ll_BFu0i");
    static BFu8i_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7ll_BFu0i(Test_BFu8i_BFu7ll_BFu0i, "BFu8i_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu7ll_BFu0ll) C1{ Fi:8 FL:7 FL:0}



static void Test_BFu8i_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu7ll_BFu0ll");
    static BFu8i_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7ll_BFu0ll(Test_BFu8i_BFu7ll_BFu0ll, "BFu8i_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7ll_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu7ll_BFu0s) C1{ Fi:8 FL:7 Fs:0}



static void Test_BFu8i_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu7ll_BFu0s");
    static BFu8i_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7ll_BFu0s(Test_BFu8i_BFu7ll_BFu0s, "BFu8i_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7s_BFu0c  {
  unsigned int v1:8;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu7s_BFu0c) C1{ Fi:8 Fs:7 Fc:0}



static void Test_BFu8i_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu7s_BFu0c");
    static BFu8i_BFu7s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu7s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7s_BFu0c(Test_BFu8i_BFu7s_BFu0c, "BFu8i_BFu7s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7s_BFu0i  {
  unsigned int v1:8;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu7s_BFu0i) C1{ Fi:8 Fs:7 Fi:0}



static void Test_BFu8i_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu7s_BFu0i");
    static BFu8i_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu7s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7s_BFu0i(Test_BFu8i_BFu7s_BFu0i, "BFu8i_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7s_BFu0ll  {
  unsigned int v1:8;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu7s_BFu0ll) C1{ Fi:8 Fs:7 FL:0}



static void Test_BFu8i_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu7s_BFu0ll");
    static BFu8i_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7s_BFu0ll(Test_BFu8i_BFu7s_BFu0ll, "BFu8i_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu7s_BFu0s  {
  unsigned int v1:8;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu7s_BFu0s) C1{ Fi:8 Fs:7 Fs:0}



static void Test_BFu8i_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu7s_BFu0s");
    static BFu8i_BFu7s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu7s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8i_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8i_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu7s_BFu0s(Test_BFu8i_BFu7s_BFu0s, "BFu8i_BFu7s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8c_BFu0c  {
  unsigned int v1:8;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu8c_BFu0c) C1{ Fi:8 Fc:8 Fc:0}



static void Test_BFu8i_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu8c_BFu0c");
    static BFu8i_BFu8c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu8c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8c_BFu0c(Test_BFu8i_BFu8c_BFu0c, "BFu8i_BFu8c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8c_BFu0i  {
  unsigned int v1:8;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu8c_BFu0i) C1{ Fi:8 Fc:8 Fi:0}



static void Test_BFu8i_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu8c_BFu0i");
    static BFu8i_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu8c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8c_BFu0i(Test_BFu8i_BFu8c_BFu0i, "BFu8i_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8c_BFu0ll  {
  unsigned int v1:8;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu8c_BFu0ll) C1{ Fi:8 Fc:8 FL:0}



static void Test_BFu8i_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu8c_BFu0ll");
    static BFu8i_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8c_BFu0ll(Test_BFu8i_BFu8c_BFu0ll, "BFu8i_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8c_BFu0s  {
  unsigned int v1:8;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu8c_BFu0s) C1{ Fi:8 Fc:8 Fs:0}



static void Test_BFu8i_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu8c_BFu0s");
    static BFu8i_BFu8c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu8c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8c_BFu0s(Test_BFu8i_BFu8c_BFu0s, "BFu8i_BFu8c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8i_BFu0c  {
  unsigned int v1:8;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu8i_BFu0c) C1{ Fi:8 Fi:8 Fc:0}



static void Test_BFu8i_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu8i_BFu0c");
    static BFu8i_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8i_BFu0c(Test_BFu8i_BFu8i_BFu0c, "BFu8i_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8i_BFu0i  {
  unsigned int v1:8;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu8i_BFu0i) C1{ Fi:8 Fi:8 Fi:0}



static void Test_BFu8i_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu8i_BFu0i");
    static BFu8i_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8i_BFu0i(Test_BFu8i_BFu8i_BFu0i, "BFu8i_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8i_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu8i_BFu0ll) C1{ Fi:8 Fi:8 FL:0}



static void Test_BFu8i_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu8i_BFu0ll");
    static BFu8i_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8i_BFu0ll(Test_BFu8i_BFu8i_BFu0ll, "BFu8i_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8i_BFu0s  {
  unsigned int v1:8;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu8i_BFu0s) C1{ Fi:8 Fi:8 Fs:0}



static void Test_BFu8i_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu8i_BFu0s");
    static BFu8i_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8i_BFu0s(Test_BFu8i_BFu8i_BFu0s, "BFu8i_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8ll_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu8ll_BFu0c) C1{ Fi:8 FL:8 Fc:0}



static void Test_BFu8i_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu8ll_BFu0c");
    static BFu8i_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8ll_BFu0c(Test_BFu8i_BFu8ll_BFu0c, "BFu8i_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8ll_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu8ll_BFu0i) C1{ Fi:8 FL:8 Fi:0}



static void Test_BFu8i_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu8ll_BFu0i");
    static BFu8i_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8ll_BFu0i(Test_BFu8i_BFu8ll_BFu0i, "BFu8i_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu8ll_BFu0ll) C1{ Fi:8 FL:8 FL:0}



static void Test_BFu8i_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu8ll_BFu0ll");
    static BFu8i_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8ll_BFu0ll(Test_BFu8i_BFu8ll_BFu0ll, "BFu8i_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8ll_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu8ll_BFu0s) C1{ Fi:8 FL:8 Fs:0}



static void Test_BFu8i_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu8ll_BFu0s");
    static BFu8i_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8ll_BFu0s(Test_BFu8i_BFu8ll_BFu0s, "BFu8i_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8s_BFu0c  {
  unsigned int v1:8;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu8s_BFu0c) C1{ Fi:8 Fs:8 Fc:0}



static void Test_BFu8i_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu8s_BFu0c");
    static BFu8i_BFu8s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu8s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8s_BFu0c(Test_BFu8i_BFu8s_BFu0c, "BFu8i_BFu8s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8s_BFu0i  {
  unsigned int v1:8;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu8s_BFu0i) C1{ Fi:8 Fs:8 Fi:0}



static void Test_BFu8i_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu8s_BFu0i");
    static BFu8i_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu8s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8s_BFu0i(Test_BFu8i_BFu8s_BFu0i, "BFu8i_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8s_BFu0ll  {
  unsigned int v1:8;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu8s_BFu0ll) C1{ Fi:8 Fs:8 FL:0}



static void Test_BFu8i_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu8s_BFu0ll");
    static BFu8i_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8s_BFu0ll(Test_BFu8i_BFu8s_BFu0ll, "BFu8i_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu8s_BFu0s  {
  unsigned int v1:8;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu8s_BFu0s) C1{ Fi:8 Fs:8 Fs:0}



static void Test_BFu8i_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu8s_BFu0s");
    static BFu8i_BFu8s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu8s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8i_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu8s_BFu0s(Test_BFu8i_BFu8s_BFu0s, "BFu8i_BFu8s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9i_BFu0c  {
  unsigned int v1:8;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu9i_BFu0c) C1{ Fi:8 Fi:9 Fc:0}



static void Test_BFu8i_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu9i_BFu0c");
    static BFu8i_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9i_BFu0c(Test_BFu8i_BFu9i_BFu0c, "BFu8i_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9i_BFu0i  {
  unsigned int v1:8;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu9i_BFu0i) C1{ Fi:8 Fi:9 Fi:0}



static void Test_BFu8i_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu9i_BFu0i");
    static BFu8i_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9i_BFu0i(Test_BFu8i_BFu9i_BFu0i, "BFu8i_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9i_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu9i_BFu0ll) C1{ Fi:8 Fi:9 FL:0}



static void Test_BFu8i_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu9i_BFu0ll");
    static BFu8i_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9i_BFu0ll(Test_BFu8i_BFu9i_BFu0ll, "BFu8i_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9i_BFu0s  {
  unsigned int v1:8;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu9i_BFu0s) C1{ Fi:8 Fi:9 Fs:0}



static void Test_BFu8i_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu9i_BFu0s");
    static BFu8i_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9i_BFu0s(Test_BFu8i_BFu9i_BFu0s, "BFu8i_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9ll_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu9ll_BFu0c) C1{ Fi:8 FL:9 Fc:0}



static void Test_BFu8i_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu9ll_BFu0c");
    static BFu8i_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9ll_BFu0c(Test_BFu8i_BFu9ll_BFu0c, "BFu8i_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9ll_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu9ll_BFu0i) C1{ Fi:8 FL:9 Fi:0}



static void Test_BFu8i_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu9ll_BFu0i");
    static BFu8i_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9ll_BFu0i(Test_BFu8i_BFu9ll_BFu0i, "BFu8i_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9ll_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu9ll_BFu0ll) C1{ Fi:8 FL:9 FL:0}



static void Test_BFu8i_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu9ll_BFu0ll");
    static BFu8i_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9ll_BFu0ll(Test_BFu8i_BFu9ll_BFu0ll, "BFu8i_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9ll_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu9ll_BFu0s) C1{ Fi:8 FL:9 Fs:0}



static void Test_BFu8i_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu9ll_BFu0s");
    static BFu8i_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8i_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9ll_BFu0s(Test_BFu8i_BFu9ll_BFu0s, "BFu8i_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9s_BFu0c  {
  unsigned int v1:8;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8i_BFu9s_BFu0c) C1{ Fi:8 Fs:9 Fc:0}



static void Test_BFu8i_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu8i_BFu9s_BFu0c");
    static BFu8i_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu9s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8i_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9s_BFu0c(Test_BFu8i_BFu9s_BFu0c, "BFu8i_BFu9s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9s_BFu0i  {
  unsigned int v1:8;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8i_BFu9s_BFu0i) C1{ Fi:8 Fs:9 Fi:0}



static void Test_BFu8i_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu8i_BFu9s_BFu0i");
    static BFu8i_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu9s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8i_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9s_BFu0i(Test_BFu8i_BFu9s_BFu0i, "BFu8i_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9s_BFu0ll  {
  unsigned int v1:8;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8i_BFu9s_BFu0ll) C1{ Fi:8 Fs:9 FL:0}



static void Test_BFu8i_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu8i_BFu9s_BFu0ll");
    static BFu8i_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8i_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9s_BFu0ll(Test_BFu8i_BFu9s_BFu0ll, "BFu8i_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_BFu9s_BFu0s  {
  unsigned int v1:8;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8i_BFu9s_BFu0s) C1{ Fi:8 Fs:9 Fs:0}



static void Test_BFu8i_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu8i_BFu9s_BFu0s");
    static BFu8i_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_BFu9s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8i_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8i_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8i_BFu9s_BFu0s(Test_BFu8i_BFu9s_BFu0s, "BFu8i_BFu9s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_C_BFu0c  {
  unsigned int v1:8;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_C_BFu0c) C1{ Fi:8 Fc Fc:0}



static void Test_BFu8i_C_BFu0c()
{
  {
    init_simple_test("BFu8i_C_BFu0c");
    static BFu8i_C_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_C_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_C_BFu0c");
    check_field_offset(lv, v2, 1, "BFu8i_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_C_BFu0c(Test_BFu8i_C_BFu0c, "BFu8i_C_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_C_BFu0i  {
  unsigned int v1:8;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_C_BFu0i) C1{ Fi:8 Fc Fi:0}



static void Test_BFu8i_C_BFu0i()
{
  {
    init_simple_test("BFu8i_C_BFu0i");
    static BFu8i_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_C_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_C_BFu0i");
    check_field_offset(lv, v2, 1, "BFu8i_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_C_BFu0i(Test_BFu8i_C_BFu0i, "BFu8i_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_C_BFu0ll  {
  unsigned int v1:8;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_C_BFu0ll) C1{ Fi:8 Fc FL:0}



static void Test_BFu8i_C_BFu0ll()
{
  {
    init_simple_test("BFu8i_C_BFu0ll");
    static BFu8i_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_C_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu8i_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_C_BFu0ll(Test_BFu8i_C_BFu0ll, "BFu8i_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_C_BFu0s  {
  unsigned int v1:8;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_C_BFu0s) C1{ Fi:8 Fc Fs:0}



static void Test_BFu8i_C_BFu0s()
{
  {
    init_simple_test("BFu8i_C_BFu0s");
    static BFu8i_C_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_C_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_C_BFu0s");
    check_field_offset(lv, v2, 1, "BFu8i_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_C_BFu0s(Test_BFu8i_C_BFu0s, "BFu8i_C_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_D_BFu0c  {
  unsigned int v1:8;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_D_BFu0c) C1{ Fi:8 FL Fc:0}



static void Test_BFu8i_D_BFu0c()
{
  {
    init_simple_test("BFu8i_D_BFu0c");
    static BFu8i_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_D_BFu0c(Test_BFu8i_D_BFu0c, "BFu8i_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_D_BFu0i  {
  unsigned int v1:8;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_D_BFu0i) C1{ Fi:8 FL Fi:0}



static void Test_BFu8i_D_BFu0i()
{
  {
    init_simple_test("BFu8i_D_BFu0i");
    static BFu8i_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_D_BFu0i(Test_BFu8i_D_BFu0i, "BFu8i_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_D_BFu0ll  {
  unsigned int v1:8;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_D_BFu0ll) C1{ Fi:8 FL FL:0}



static void Test_BFu8i_D_BFu0ll()
{
  {
    init_simple_test("BFu8i_D_BFu0ll");
    static BFu8i_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_D_BFu0ll(Test_BFu8i_D_BFu0ll, "BFu8i_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_D_BFu0s  {
  unsigned int v1:8;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_D_BFu0s) C1{ Fi:8 FL Fs:0}



static void Test_BFu8i_D_BFu0s()
{
  {
    init_simple_test("BFu8i_D_BFu0s");
    static BFu8i_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_D_BFu0s(Test_BFu8i_D_BFu0s, "BFu8i_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_F_BFu0c  {
  unsigned int v1:8;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_F_BFu0c) C1{ Fi:8 Fi Fc:0}



static void Test_BFu8i_F_BFu0c()
{
  {
    init_simple_test("BFu8i_F_BFu0c");
    static BFu8i_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8i_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_F_BFu0c(Test_BFu8i_F_BFu0c, "BFu8i_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_F_BFu0i  {
  unsigned int v1:8;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_F_BFu0i) C1{ Fi:8 Fi Fi:0}



static void Test_BFu8i_F_BFu0i()
{
  {
    init_simple_test("BFu8i_F_BFu0i");
    static BFu8i_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8i_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_F_BFu0i(Test_BFu8i_F_BFu0i, "BFu8i_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_F_BFu0ll  {
  unsigned int v1:8;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_F_BFu0ll) C1{ Fi:8 Fi FL:0}



static void Test_BFu8i_F_BFu0ll()
{
  {
    init_simple_test("BFu8i_F_BFu0ll");
    static BFu8i_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8i_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_F_BFu0ll(Test_BFu8i_F_BFu0ll, "BFu8i_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_F_BFu0s  {
  unsigned int v1:8;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_F_BFu0s) C1{ Fi:8 Fi Fs:0}



static void Test_BFu8i_F_BFu0s()
{
  {
    init_simple_test("BFu8i_F_BFu0s");
    static BFu8i_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8i_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_F_BFu0s(Test_BFu8i_F_BFu0s, "BFu8i_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_I_BFu0c  {
  unsigned int v1:8;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_I_BFu0c) C1{ Fi:8 Fi Fc:0}



static void Test_BFu8i_I_BFu0c()
{
  {
    init_simple_test("BFu8i_I_BFu0c");
    static BFu8i_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8i_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_I_BFu0c(Test_BFu8i_I_BFu0c, "BFu8i_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_I_BFu0i  {
  unsigned int v1:8;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_I_BFu0i) C1{ Fi:8 Fi Fi:0}



static void Test_BFu8i_I_BFu0i()
{
  {
    init_simple_test("BFu8i_I_BFu0i");
    static BFu8i_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8i_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_I_BFu0i(Test_BFu8i_I_BFu0i, "BFu8i_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_I_BFu0ll  {
  unsigned int v1:8;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_I_BFu0ll) C1{ Fi:8 Fi FL:0}



static void Test_BFu8i_I_BFu0ll()
{
  {
    init_simple_test("BFu8i_I_BFu0ll");
    static BFu8i_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8i_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_I_BFu0ll(Test_BFu8i_I_BFu0ll, "BFu8i_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_I_BFu0s  {
  unsigned int v1:8;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_I_BFu0s) C1{ Fi:8 Fi Fs:0}



static void Test_BFu8i_I_BFu0s()
{
  {
    init_simple_test("BFu8i_I_BFu0s");
    static BFu8i_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8i_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_I_BFu0s(Test_BFu8i_I_BFu0s, "BFu8i_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ip_BFu0c  {
  unsigned int v1:8;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_Ip_BFu0c) C1{ Fi:8 Fp Fc:0}



static void Test_BFu8i_Ip_BFu0c()
{
  {
    init_simple_test("BFu8i_Ip_BFu0c");
    static BFu8i_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ip_BFu0c(Test_BFu8i_Ip_BFu0c, "BFu8i_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ip_BFu0i  {
  unsigned int v1:8;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_Ip_BFu0i) C1{ Fi:8 Fp Fi:0}



static void Test_BFu8i_Ip_BFu0i()
{
  {
    init_simple_test("BFu8i_Ip_BFu0i");
    static BFu8i_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ip_BFu0i(Test_BFu8i_Ip_BFu0i, "BFu8i_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ip_BFu0ll  {
  unsigned int v1:8;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_Ip_BFu0ll) C1{ Fi:8 Fp FL:0}



static void Test_BFu8i_Ip_BFu0ll()
{
  {
    init_simple_test("BFu8i_Ip_BFu0ll");
    static BFu8i_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ip_BFu0ll(Test_BFu8i_Ip_BFu0ll, "BFu8i_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ip_BFu0s  {
  unsigned int v1:8;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_Ip_BFu0s) C1{ Fi:8 Fp Fs:0}



static void Test_BFu8i_Ip_BFu0s()
{
  {
    init_simple_test("BFu8i_Ip_BFu0s");
    static BFu8i_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ip_BFu0s(Test_BFu8i_Ip_BFu0s, "BFu8i_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_L_BFu0c  {
  unsigned int v1:8;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_L_BFu0c) C1{ Fi:8 FL Fc:0}



static void Test_BFu8i_L_BFu0c()
{
  {
    init_simple_test("BFu8i_L_BFu0c");
    static BFu8i_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_L_BFu0c(Test_BFu8i_L_BFu0c, "BFu8i_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_L_BFu0i  {
  unsigned int v1:8;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_L_BFu0i) C1{ Fi:8 FL Fi:0}



static void Test_BFu8i_L_BFu0i()
{
  {
    init_simple_test("BFu8i_L_BFu0i");
    static BFu8i_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_L_BFu0i(Test_BFu8i_L_BFu0i, "BFu8i_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_L_BFu0ll  {
  unsigned int v1:8;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_L_BFu0ll) C1{ Fi:8 FL FL:0}



static void Test_BFu8i_L_BFu0ll()
{
  {
    init_simple_test("BFu8i_L_BFu0ll");
    static BFu8i_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_L_BFu0ll(Test_BFu8i_L_BFu0ll, "BFu8i_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_L_BFu0s  {
  unsigned int v1:8;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_L_BFu0s) C1{ Fi:8 FL Fs:0}



static void Test_BFu8i_L_BFu0s()
{
  {
    init_simple_test("BFu8i_L_BFu0s");
    static BFu8i_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_L_BFu0s(Test_BFu8i_L_BFu0s, "BFu8i_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_S_BFu0c  {
  unsigned int v1:8;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_S_BFu0c) C1{ Fi:8 Fs Fc:0}



static void Test_BFu8i_S_BFu0c()
{
  {
    init_simple_test("BFu8i_S_BFu0c");
    static BFu8i_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_S_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu8i_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_S_BFu0c(Test_BFu8i_S_BFu0c, "BFu8i_S_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_S_BFu0i  {
  unsigned int v1:8;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_S_BFu0i) C1{ Fi:8 Fs Fi:0}



static void Test_BFu8i_S_BFu0i()
{
  {
    init_simple_test("BFu8i_S_BFu0i");
    static BFu8i_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_S_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu8i_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_S_BFu0i(Test_BFu8i_S_BFu0i, "BFu8i_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_S_BFu0ll  {
  unsigned int v1:8;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_S_BFu0ll) C1{ Fi:8 Fs FL:0}



static void Test_BFu8i_S_BFu0ll()
{
  {
    init_simple_test("BFu8i_S_BFu0ll");
    static BFu8i_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu8i_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_S_BFu0ll(Test_BFu8i_S_BFu0ll, "BFu8i_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_S_BFu0s  {
  unsigned int v1:8;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_S_BFu0s) C1{ Fi:8 Fs Fs:0}



static void Test_BFu8i_S_BFu0s()
{
  {
    init_simple_test("BFu8i_S_BFu0s");
    static BFu8i_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_S_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu8i_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_S_BFu0s(Test_BFu8i_S_BFu0s, "BFu8i_S_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Uc_BFu0c  {
  unsigned int v1:8;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_Uc_BFu0c) C1{ Fi:8 Fc Fc:0}



static void Test_BFu8i_Uc_BFu0c()
{
  {
    init_simple_test("BFu8i_Uc_BFu0c");
    static BFu8i_Uc_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_Uc_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Uc_BFu0c");
    check_field_offset(lv, v2, 1, "BFu8i_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Uc_BFu0c(Test_BFu8i_Uc_BFu0c, "BFu8i_Uc_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Uc_BFu0i  {
  unsigned int v1:8;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_Uc_BFu0i) C1{ Fi:8 Fc Fi:0}



static void Test_BFu8i_Uc_BFu0i()
{
  {
    init_simple_test("BFu8i_Uc_BFu0i");
    static BFu8i_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_Uc_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Uc_BFu0i");
    check_field_offset(lv, v2, 1, "BFu8i_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Uc_BFu0i(Test_BFu8i_Uc_BFu0i, "BFu8i_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Uc_BFu0ll  {
  unsigned int v1:8;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_Uc_BFu0ll) C1{ Fi:8 Fc FL:0}



static void Test_BFu8i_Uc_BFu0ll()
{
  {
    init_simple_test("BFu8i_Uc_BFu0ll");
    static BFu8i_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Uc_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu8i_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Uc_BFu0ll(Test_BFu8i_Uc_BFu0ll, "BFu8i_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Uc_BFu0s  {
  unsigned int v1:8;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_Uc_BFu0s) C1{ Fi:8 Fc Fs:0}



static void Test_BFu8i_Uc_BFu0s()
{
  {
    init_simple_test("BFu8i_Uc_BFu0s");
    static BFu8i_Uc_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_Uc_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Uc_BFu0s");
    check_field_offset(lv, v2, 1, "BFu8i_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Uc_BFu0s(Test_BFu8i_Uc_BFu0s, "BFu8i_Uc_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ui_BFu0c  {
  unsigned int v1:8;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_Ui_BFu0c) C1{ Fi:8 Fi Fc:0}



static void Test_BFu8i_Ui_BFu0c()
{
  {
    init_simple_test("BFu8i_Ui_BFu0c");
    static BFu8i_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ui_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8i_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ui_BFu0c(Test_BFu8i_Ui_BFu0c, "BFu8i_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ui_BFu0i  {
  unsigned int v1:8;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_Ui_BFu0i) C1{ Fi:8 Fi Fi:0}



static void Test_BFu8i_Ui_BFu0i()
{
  {
    init_simple_test("BFu8i_Ui_BFu0i");
    static BFu8i_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ui_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8i_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ui_BFu0i(Test_BFu8i_Ui_BFu0i, "BFu8i_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ui_BFu0ll  {
  unsigned int v1:8;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_Ui_BFu0ll) C1{ Fi:8 Fi FL:0}



static void Test_BFu8i_Ui_BFu0ll()
{
  {
    init_simple_test("BFu8i_Ui_BFu0ll");
    static BFu8i_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ui_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8i_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ui_BFu0ll(Test_BFu8i_Ui_BFu0ll, "BFu8i_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ui_BFu0s  {
  unsigned int v1:8;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_Ui_BFu0s) C1{ Fi:8 Fi Fs:0}



static void Test_BFu8i_Ui_BFu0s()
{
  {
    init_simple_test("BFu8i_Ui_BFu0s");
    static BFu8i_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8i_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ui_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8i_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ui_BFu0s(Test_BFu8i_Ui_BFu0s, "BFu8i_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ul_BFu0c  {
  unsigned int v1:8;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_Ul_BFu0c) C1{ Fi:8 FL Fc:0}



static void Test_BFu8i_Ul_BFu0c()
{
  {
    init_simple_test("BFu8i_Ul_BFu0c");
    static BFu8i_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ul_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ul_BFu0c(Test_BFu8i_Ul_BFu0c, "BFu8i_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ul_BFu0i  {
  unsigned int v1:8;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_Ul_BFu0i) C1{ Fi:8 FL Fi:0}



static void Test_BFu8i_Ul_BFu0i()
{
  {
    init_simple_test("BFu8i_Ul_BFu0i");
    static BFu8i_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ul_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ul_BFu0i(Test_BFu8i_Ul_BFu0i, "BFu8i_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ul_BFu0ll  {
  unsigned int v1:8;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_Ul_BFu0ll) C1{ Fi:8 FL FL:0}



static void Test_BFu8i_Ul_BFu0ll()
{
  {
    init_simple_test("BFu8i_Ul_BFu0ll");
    static BFu8i_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ul_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ul_BFu0ll(Test_BFu8i_Ul_BFu0ll, "BFu8i_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Ul_BFu0s  {
  unsigned int v1:8;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_Ul_BFu0s) C1{ Fi:8 FL Fs:0}



static void Test_BFu8i_Ul_BFu0s()
{
  {
    init_simple_test("BFu8i_Ul_BFu0s");
    static BFu8i_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8i_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Ul_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Ul_BFu0s(Test_BFu8i_Ul_BFu0s, "BFu8i_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Us_BFu0c  {
  unsigned int v1:8;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_Us_BFu0c) C1{ Fi:8 Fs Fc:0}



static void Test_BFu8i_Us_BFu0c()
{
  {
    init_simple_test("BFu8i_Us_BFu0c");
    static BFu8i_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_Us_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Us_BFu0c");
    check_field_offset(lv, v2, 2, "BFu8i_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Us_BFu0c(Test_BFu8i_Us_BFu0c, "BFu8i_Us_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Us_BFu0i  {
  unsigned int v1:8;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_Us_BFu0i) C1{ Fi:8 Fs Fi:0}



static void Test_BFu8i_Us_BFu0i()
{
  {
    init_simple_test("BFu8i_Us_BFu0i");
    static BFu8i_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_Us_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Us_BFu0i");
    check_field_offset(lv, v2, 2, "BFu8i_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Us_BFu0i(Test_BFu8i_Us_BFu0i, "BFu8i_Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Us_BFu0ll  {
  unsigned int v1:8;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_Us_BFu0ll) C1{ Fi:8 Fs FL:0}



static void Test_BFu8i_Us_BFu0ll()
{
  {
    init_simple_test("BFu8i_Us_BFu0ll");
    static BFu8i_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8i_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8i_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Us_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu8i_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Us_BFu0ll(Test_BFu8i_Us_BFu0ll, "BFu8i_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Us_BFu0s  {
  unsigned int v1:8;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_Us_BFu0s) C1{ Fi:8 Fs Fs:0}



static void Test_BFu8i_Us_BFu0s()
{
  {
    init_simple_test("BFu8i_Us_BFu0s");
    static BFu8i_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8i_Us_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8i_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Us_BFu0s");
    check_field_offset(lv, v2, 2, "BFu8i_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Us_BFu0s(Test_BFu8i_Us_BFu0s, "BFu8i_Us_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Vp_BFu0c  {
  unsigned int v1:8;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu8i_Vp_BFu0c) C1{ Fi:8 Fp Fc:0}



static void Test_BFu8i_Vp_BFu0c()
{
  {
    init_simple_test("BFu8i_Vp_BFu0c");
    static BFu8i_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Vp_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Vp_BFu0c(Test_BFu8i_Vp_BFu0c, "BFu8i_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Vp_BFu0i  {
  unsigned int v1:8;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu8i_Vp_BFu0i) C1{ Fi:8 Fp Fi:0}



static void Test_BFu8i_Vp_BFu0i()
{
  {
    init_simple_test("BFu8i_Vp_BFu0i");
    static BFu8i_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Vp_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Vp_BFu0i(Test_BFu8i_Vp_BFu0i, "BFu8i_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Vp_BFu0ll  {
  unsigned int v1:8;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu8i_Vp_BFu0ll) C1{ Fi:8 Fp FL:0}



static void Test_BFu8i_Vp_BFu0ll()
{
  {
    init_simple_test("BFu8i_Vp_BFu0ll");
    static BFu8i_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Vp_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Vp_BFu0ll(Test_BFu8i_Vp_BFu0ll, "BFu8i_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8i_Vp_BFu0s  {
  unsigned int v1:8;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu8i_Vp_BFu0s) C1{ Fi:8 Fp Fs:0}



static void Test_BFu8i_Vp_BFu0s()
{
  {
    init_simple_test("BFu8i_Vp_BFu0s");
    static BFu8i_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8i_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8i_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8i_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8i_Vp_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8i_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8i_Vp_BFu0s(Test_BFu8i_Vp_BFu0s, "BFu8i_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c  {
  __tsu64 v1:8;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu0c) C1{ FL:8 Fc:0}



static void Test_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu0c");
    static BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c(Test_BFu8ll_BFu0c, "BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu0c  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu0c_BFu0c) C1{ FL:8 Fc:0 Fc:0}



static void Test_BFu8ll_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu0c");
    static BFu8ll_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu0c(Test_BFu8ll_BFu0c_BFu0c, "BFu8ll_BFu0c_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu0i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu0c_BFu0i) C1{ FL:8 Fc:0 Fi:0}



static void Test_BFu8ll_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu0i");
    static BFu8ll_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu0i(Test_BFu8ll_BFu0c_BFu0i, "BFu8ll_BFu0c_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu0ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu0c_BFu0ll) C1{ FL:8 Fc:0 FL:0}



static void Test_BFu8ll_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu0ll");
    static BFu8ll_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu0ll(Test_BFu8ll_BFu0c_BFu0ll, "BFu8ll_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu0s  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu0c_BFu0s) C1{ FL:8 Fc:0 Fs:0}



static void Test_BFu8ll_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu0s");
    static BFu8ll_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu0s(Test_BFu8ll_BFu0c_BFu0s, "BFu8ll_BFu0c_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu15i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8ll_BFu0c_BFu15i) C1{ FL:8 Fc:0 Fi:15}



static void Test_BFu8ll_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu15i");
    static BFu8ll_BFu0c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu15i(Test_BFu8ll_BFu0c_BFu15i, "BFu8ll_BFu0c_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu15ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8ll_BFu0c_BFu15ll) C1{ FL:8 Fc:0 FL:15}



static void Test_BFu8ll_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu15ll");
    static BFu8ll_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu15ll(Test_BFu8ll_BFu0c_BFu15ll, "BFu8ll_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu15s  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8ll_BFu0c_BFu15s) C1{ FL:8 Fc:0 Fs:15}



static void Test_BFu8ll_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu15s");
    static BFu8ll_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8ll_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu15s(Test_BFu8ll_BFu0c_BFu15s, "BFu8ll_BFu0c_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu16i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8ll_BFu0c_BFu16i) C1{ FL:8 Fc:0 Fi:16}



static void Test_BFu8ll_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu16i");
    static BFu8ll_BFu0c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu16i(Test_BFu8ll_BFu0c_BFu16i, "BFu8ll_BFu0c_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu16ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8ll_BFu0c_BFu16ll) C1{ FL:8 Fc:0 FL:16}



static void Test_BFu8ll_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu16ll");
    static BFu8ll_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu16ll(Test_BFu8ll_BFu0c_BFu16ll, "BFu8ll_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu16s  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8ll_BFu0c_BFu16s) C1{ FL:8 Fc:0 Fs:16}



static void Test_BFu8ll_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu16s");
    static BFu8ll_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8ll_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu16s(Test_BFu8ll_BFu0c_BFu16s, "BFu8ll_BFu0c_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu17i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8ll_BFu0c_BFu17i) C1{ FL:8 Fc:0 Fi:17}



static void Test_BFu8ll_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu17i");
    static BFu8ll_BFu0c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu17i(Test_BFu8ll_BFu0c_BFu17i, "BFu8ll_BFu0c_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu17ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8ll_BFu0c_BFu17ll) C1{ FL:8 Fc:0 FL:17}



static void Test_BFu8ll_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu17ll");
    static BFu8ll_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu17ll(Test_BFu8ll_BFu0c_BFu17ll, "BFu8ll_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu1c  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8ll_BFu0c_BFu1c) C1{ FL:8 Fc:0 Fc:1}



static void Test_BFu8ll_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu1c");
    static BFu8ll_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu1c(Test_BFu8ll_BFu0c_BFu1c, "BFu8ll_BFu0c_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu1i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8ll_BFu0c_BFu1i) C1{ FL:8 Fc:0 Fi:1}



static void Test_BFu8ll_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu1i");
    static BFu8ll_BFu0c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu1i(Test_BFu8ll_BFu0c_BFu1i, "BFu8ll_BFu0c_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu1ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8ll_BFu0c_BFu1ll) C1{ FL:8 Fc:0 FL:1}



static void Test_BFu8ll_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu1ll");
    static BFu8ll_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu1ll(Test_BFu8ll_BFu0c_BFu1ll, "BFu8ll_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu1s  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8ll_BFu0c_BFu1s) C1{ FL:8 Fc:0 Fs:1}



static void Test_BFu8ll_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu1s");
    static BFu8ll_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu1s(Test_BFu8ll_BFu0c_BFu1s, "BFu8ll_BFu0c_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu31i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8ll_BFu0c_BFu31i) C1{ FL:8 Fc:0 Fi:31}



static void Test_BFu8ll_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu31i");
    static BFu8ll_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8ll_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu31i(Test_BFu8ll_BFu0c_BFu31i, "BFu8ll_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu31ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8ll_BFu0c_BFu31ll) C1{ FL:8 Fc:0 FL:31}



static void Test_BFu8ll_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu31ll");
    static BFu8ll_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8ll_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu31ll(Test_BFu8ll_BFu0c_BFu31ll, "BFu8ll_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu32i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8ll_BFu0c_BFu32i) C1{ FL:8 Fc:0 Fi:32}



static void Test_BFu8ll_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu32i");
    static BFu8ll_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8ll_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu32i(Test_BFu8ll_BFu0c_BFu32i, "BFu8ll_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu32ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8ll_BFu0c_BFu32ll) C1{ FL:8 Fc:0 FL:32}



static void Test_BFu8ll_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu32ll");
    static BFu8ll_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8ll_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu32ll(Test_BFu8ll_BFu0c_BFu32ll, "BFu8ll_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu33  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8ll_BFu0c_BFu33) C1{ FL:8 Fc:0 FL:33}



static void Test_BFu8ll_BFu0c_BFu33()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu33");
    static BFu8ll_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8ll_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8ll_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu33(Test_BFu8ll_BFu0c_BFu33, "BFu8ll_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu7c  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8ll_BFu0c_BFu7c) C1{ FL:8 Fc:0 Fc:7}



static void Test_BFu8ll_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu7c");
    static BFu8ll_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu7c(Test_BFu8ll_BFu0c_BFu7c, "BFu8ll_BFu0c_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu7i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8ll_BFu0c_BFu7i) C1{ FL:8 Fc:0 Fi:7}



static void Test_BFu8ll_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu7i");
    static BFu8ll_BFu0c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu7i(Test_BFu8ll_BFu0c_BFu7i, "BFu8ll_BFu0c_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu7ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8ll_BFu0c_BFu7ll) C1{ FL:8 Fc:0 FL:7}



static void Test_BFu8ll_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu7ll");
    static BFu8ll_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu7ll(Test_BFu8ll_BFu0c_BFu7ll, "BFu8ll_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu7s  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8ll_BFu0c_BFu7s) C1{ FL:8 Fc:0 Fs:7}



static void Test_BFu8ll_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu7s");
    static BFu8ll_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu7s(Test_BFu8ll_BFu0c_BFu7s, "BFu8ll_BFu0c_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu8c  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8ll_BFu0c_BFu8c) C1{ FL:8 Fc:0 Fc:8}



static void Test_BFu8ll_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu8c");
    static BFu8ll_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu8c(Test_BFu8ll_BFu0c_BFu8c, "BFu8ll_BFu0c_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu8i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8ll_BFu0c_BFu8i) C1{ FL:8 Fc:0 Fi:8}



static void Test_BFu8ll_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu8i");
    static BFu8ll_BFu0c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu8i(Test_BFu8ll_BFu0c_BFu8i, "BFu8ll_BFu0c_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu8ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8ll_BFu0c_BFu8ll) C1{ FL:8 Fc:0 FL:8}



static void Test_BFu8ll_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu8ll");
    static BFu8ll_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu8ll(Test_BFu8ll_BFu0c_BFu8ll, "BFu8ll_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu8s  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8ll_BFu0c_BFu8s) C1{ FL:8 Fc:0 Fs:8}



static void Test_BFu8ll_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu8s");
    static BFu8ll_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu8s(Test_BFu8ll_BFu0c_BFu8s, "BFu8ll_BFu0c_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu9i  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8ll_BFu0c_BFu9i) C1{ FL:8 Fc:0 Fi:9}



static void Test_BFu8ll_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu9i");
    static BFu8ll_BFu0c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu9i(Test_BFu8ll_BFu0c_BFu9i, "BFu8ll_BFu0c_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu9ll  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8ll_BFu0c_BFu9ll) C1{ FL:8 Fc:0 FL:9}



static void Test_BFu8ll_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu9ll");
    static BFu8ll_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu9ll(Test_BFu8ll_BFu0c_BFu9ll, "BFu8ll_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_BFu9s  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8ll_BFu0c_BFu9s) C1{ FL:8 Fc:0 Fs:9}



static void Test_BFu8ll_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu8ll_BFu0c_BFu9s");
    static BFu8ll_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8ll_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_BFu9s(Test_BFu8ll_BFu0c_BFu9s, "BFu8ll_BFu0c_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_C  {
  __tsu64 v1:8;
  unsigned char  :0;
  char v2;
};
//SIG(1 BFu8ll_BFu0c_C) C1{ FL:8 Fc:0 Fc}



static void Test_BFu8ll_BFu0c_C()
{
  {
    init_simple_test("BFu8ll_BFu0c_C");
    static BFu8ll_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_C");
    check_field_offset(lv, v2, 1, "BFu8ll_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_C(Test_BFu8ll_BFu0c_C, "BFu8ll_BFu0c_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_D  {
  __tsu64 v1:8;
  unsigned char  :0;
  double v2;
};
//SIG(1 BFu8ll_BFu0c_D) C1{ FL:8 Fc:0 FL}



static void Test_BFu8ll_BFu0c_D()
{
  {
    init_simple_test("BFu8ll_BFu0c_D");
    static BFu8ll_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_D(Test_BFu8ll_BFu0c_D, "BFu8ll_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_F  {
  __tsu64 v1:8;
  unsigned char  :0;
  float v2;
};
//SIG(1 BFu8ll_BFu0c_F) C1{ FL:8 Fc:0 Fi}



static void Test_BFu8ll_BFu0c_F()
{
  {
    init_simple_test("BFu8ll_BFu0c_F");
    static BFu8ll_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_F");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_F(Test_BFu8ll_BFu0c_F, "BFu8ll_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_I  {
  __tsu64 v1:8;
  unsigned char  :0;
  int v2;
};
//SIG(1 BFu8ll_BFu0c_I) C1{ FL:8 Fc:0 Fi}



static void Test_BFu8ll_BFu0c_I()
{
  {
    init_simple_test("BFu8ll_BFu0c_I");
    static BFu8ll_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_I");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_I(Test_BFu8ll_BFu0c_I, "BFu8ll_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_Ip  {
  __tsu64 v1:8;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu8ll_BFu0c_Ip) C1{ FL:8 Fc:0 Fp}



static void Test_BFu8ll_BFu0c_Ip()
{
  {
    init_simple_test("BFu8ll_BFu0c_Ip");
    static BFu8ll_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_Ip(Test_BFu8ll_BFu0c_Ip, "BFu8ll_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_L  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 BFu8ll_BFu0c_L) C1{ FL:8 Fc:0 FL}



static void Test_BFu8ll_BFu0c_L()
{
  {
    init_simple_test("BFu8ll_BFu0c_L");
    static BFu8ll_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_L(Test_BFu8ll_BFu0c_L, "BFu8ll_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_S  {
  __tsu64 v1:8;
  unsigned char  :0;
  short v2;
};
//SIG(1 BFu8ll_BFu0c_S) C1{ FL:8 Fc:0 Fs}



static void Test_BFu8ll_BFu0c_S()
{
  {
    init_simple_test("BFu8ll_BFu0c_S");
    static BFu8ll_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_S");
    check_field_offset(lv, v2, 2, "BFu8ll_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_S(Test_BFu8ll_BFu0c_S, "BFu8ll_BFu0c_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_Uc  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 BFu8ll_BFu0c_Uc) C1{ FL:8 Fc:0 Fc}



static void Test_BFu8ll_BFu0c_Uc()
{
  {
    init_simple_test("BFu8ll_BFu0c_Uc");
    static BFu8ll_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_Uc");
    check_field_offset(lv, v2, 1, "BFu8ll_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_Uc(Test_BFu8ll_BFu0c_Uc, "BFu8ll_BFu0c_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_Ui  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 BFu8ll_BFu0c_Ui) C1{ FL:8 Fc:0 Fi}



static void Test_BFu8ll_BFu0c_Ui()
{
  {
    init_simple_test("BFu8ll_BFu0c_Ui");
    static BFu8ll_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_Ui");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_Ui(Test_BFu8ll_BFu0c_Ui, "BFu8ll_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_Ul  {
  __tsu64 v1:8;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 BFu8ll_BFu0c_Ul) C1{ FL:8 Fc:0 FL}



static void Test_BFu8ll_BFu0c_Ul()
{
  {
    init_simple_test("BFu8ll_BFu0c_Ul");
    static BFu8ll_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_Ul(Test_BFu8ll_BFu0c_Ul, "BFu8ll_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_Us  {
  __tsu64 v1:8;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 BFu8ll_BFu0c_Us) C1{ FL:8 Fc:0 Fs}



static void Test_BFu8ll_BFu0c_Us()
{
  {
    init_simple_test("BFu8ll_BFu0c_Us");
    static BFu8ll_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_Us");
    check_field_offset(lv, v2, 2, "BFu8ll_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_Us(Test_BFu8ll_BFu0c_Us, "BFu8ll_BFu0c_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0c_Vp  {
  __tsu64 v1:8;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu8ll_BFu0c_Vp) C1{ FL:8 Fc:0 Fp}



static void Test_BFu8ll_BFu0c_Vp()
{
  {
    init_simple_test("BFu8ll_BFu0c_Vp");
    static BFu8ll_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0c_Vp(Test_BFu8ll_BFu0c_Vp, "BFu8ll_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i  {
  __tsu64 v1:8;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu0i) C1{ FL:8 Fi:0}



static void Test_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu0i");
    static BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i(Test_BFu8ll_BFu0i, "BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu0c  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu0i_BFu0c) C1{ FL:8 Fi:0 Fc:0}



static void Test_BFu8ll_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu0c");
    static BFu8ll_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu0c(Test_BFu8ll_BFu0i_BFu0c, "BFu8ll_BFu0i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu0i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu0i_BFu0i) C1{ FL:8 Fi:0 Fi:0}



static void Test_BFu8ll_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu0i");
    static BFu8ll_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu0i(Test_BFu8ll_BFu0i_BFu0i, "BFu8ll_BFu0i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu0i_BFu0ll) C1{ FL:8 Fi:0 FL:0}



static void Test_BFu8ll_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu0ll");
    static BFu8ll_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu0ll(Test_BFu8ll_BFu0i_BFu0ll, "BFu8ll_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu0s  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu0i_BFu0s) C1{ FL:8 Fi:0 Fs:0}



static void Test_BFu8ll_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu0s");
    static BFu8ll_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu0s(Test_BFu8ll_BFu0i_BFu0s, "BFu8ll_BFu0i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu15i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8ll_BFu0i_BFu15i) C1{ FL:8 Fi:0 Fi:15}



static void Test_BFu8ll_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu15i");
    static BFu8ll_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8ll_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu15i(Test_BFu8ll_BFu0i_BFu15i, "BFu8ll_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu15ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8ll_BFu0i_BFu15ll) C1{ FL:8 Fi:0 FL:15}



static void Test_BFu8ll_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu15ll");
    static BFu8ll_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8ll_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu15ll(Test_BFu8ll_BFu0i_BFu15ll, "BFu8ll_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu15s  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8ll_BFu0i_BFu15s) C1{ FL:8 Fi:0 Fs:15}



static void Test_BFu8ll_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu15s");
    static BFu8ll_BFu0i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8ll_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu15s(Test_BFu8ll_BFu0i_BFu15s, "BFu8ll_BFu0i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu16i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8ll_BFu0i_BFu16i) C1{ FL:8 Fi:0 Fi:16}



static void Test_BFu8ll_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu16i");
    static BFu8ll_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8ll_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu16i(Test_BFu8ll_BFu0i_BFu16i, "BFu8ll_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu16ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8ll_BFu0i_BFu16ll) C1{ FL:8 Fi:0 FL:16}



static void Test_BFu8ll_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu16ll");
    static BFu8ll_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8ll_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu16ll(Test_BFu8ll_BFu0i_BFu16ll, "BFu8ll_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu16s  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8ll_BFu0i_BFu16s) C1{ FL:8 Fi:0 Fs:16}



static void Test_BFu8ll_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu16s");
    static BFu8ll_BFu0i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8ll_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu16s(Test_BFu8ll_BFu0i_BFu16s, "BFu8ll_BFu0i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu17i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8ll_BFu0i_BFu17i) C1{ FL:8 Fi:0 Fi:17}



static void Test_BFu8ll_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu17i");
    static BFu8ll_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8ll_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu17i(Test_BFu8ll_BFu0i_BFu17i, "BFu8ll_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu17ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8ll_BFu0i_BFu17ll) C1{ FL:8 Fi:0 FL:17}



static void Test_BFu8ll_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu17ll");
    static BFu8ll_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8ll_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu17ll(Test_BFu8ll_BFu0i_BFu17ll, "BFu8ll_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu1c  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8ll_BFu0i_BFu1c) C1{ FL:8 Fi:0 Fc:1}



static void Test_BFu8ll_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu1c");
    static BFu8ll_BFu0i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8ll_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu1c(Test_BFu8ll_BFu0i_BFu1c, "BFu8ll_BFu0i_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu1i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8ll_BFu0i_BFu1i) C1{ FL:8 Fi:0 Fi:1}



static void Test_BFu8ll_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu1i");
    static BFu8ll_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8ll_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu1i(Test_BFu8ll_BFu0i_BFu1i, "BFu8ll_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu1ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8ll_BFu0i_BFu1ll) C1{ FL:8 Fi:0 FL:1}



static void Test_BFu8ll_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu1ll");
    static BFu8ll_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8ll_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu1ll(Test_BFu8ll_BFu0i_BFu1ll, "BFu8ll_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu1s  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8ll_BFu0i_BFu1s) C1{ FL:8 Fi:0 Fs:1}



static void Test_BFu8ll_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu1s");
    static BFu8ll_BFu0i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8ll_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu1s(Test_BFu8ll_BFu0i_BFu1s, "BFu8ll_BFu0i_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu31i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8ll_BFu0i_BFu31i) C1{ FL:8 Fi:0 Fi:31}



static void Test_BFu8ll_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu31i");
    static BFu8ll_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8ll_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu31i(Test_BFu8ll_BFu0i_BFu31i, "BFu8ll_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu31ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8ll_BFu0i_BFu31ll) C1{ FL:8 Fi:0 FL:31}



static void Test_BFu8ll_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu31ll");
    static BFu8ll_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8ll_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu31ll(Test_BFu8ll_BFu0i_BFu31ll, "BFu8ll_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu32i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8ll_BFu0i_BFu32i) C1{ FL:8 Fi:0 Fi:32}



static void Test_BFu8ll_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu32i");
    static BFu8ll_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8ll_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu32i(Test_BFu8ll_BFu0i_BFu32i, "BFu8ll_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu32ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8ll_BFu0i_BFu32ll) C1{ FL:8 Fi:0 FL:32}



static void Test_BFu8ll_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu32ll");
    static BFu8ll_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8ll_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu32ll(Test_BFu8ll_BFu0i_BFu32ll, "BFu8ll_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu33  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8ll_BFu0i_BFu33) C1{ FL:8 Fi:0 FL:33}



static void Test_BFu8ll_BFu0i_BFu33()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu33");
    static BFu8ll_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu8ll_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu8ll_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu33(Test_BFu8ll_BFu0i_BFu33, "BFu8ll_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu7c  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8ll_BFu0i_BFu7c) C1{ FL:8 Fi:0 Fc:7}



static void Test_BFu8ll_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu7c");
    static BFu8ll_BFu0i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8ll_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu7c(Test_BFu8ll_BFu0i_BFu7c, "BFu8ll_BFu0i_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu7i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8ll_BFu0i_BFu7i) C1{ FL:8 Fi:0 Fi:7}



static void Test_BFu8ll_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu7i");
    static BFu8ll_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8ll_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu7i(Test_BFu8ll_BFu0i_BFu7i, "BFu8ll_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu7ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8ll_BFu0i_BFu7ll) C1{ FL:8 Fi:0 FL:7}



static void Test_BFu8ll_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu7ll");
    static BFu8ll_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8ll_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu7ll(Test_BFu8ll_BFu0i_BFu7ll, "BFu8ll_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu7s  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8ll_BFu0i_BFu7s) C1{ FL:8 Fi:0 Fs:7}



static void Test_BFu8ll_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu7s");
    static BFu8ll_BFu0i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8ll_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu7s(Test_BFu8ll_BFu0i_BFu7s, "BFu8ll_BFu0i_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu8c  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8ll_BFu0i_BFu8c) C1{ FL:8 Fi:0 Fc:8}



static void Test_BFu8ll_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu8c");
    static BFu8ll_BFu0i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8ll_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu8c(Test_BFu8ll_BFu0i_BFu8c, "BFu8ll_BFu0i_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu8i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8ll_BFu0i_BFu8i) C1{ FL:8 Fi:0 Fi:8}



static void Test_BFu8ll_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu8i");
    static BFu8ll_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8ll_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu8i(Test_BFu8ll_BFu0i_BFu8i, "BFu8ll_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu8ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8ll_BFu0i_BFu8ll) C1{ FL:8 Fi:0 FL:8}



static void Test_BFu8ll_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu8ll");
    static BFu8ll_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8ll_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu8ll(Test_BFu8ll_BFu0i_BFu8ll, "BFu8ll_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu8s  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8ll_BFu0i_BFu8s) C1{ FL:8 Fi:0 Fs:8}



static void Test_BFu8ll_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu8s");
    static BFu8ll_BFu0i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8ll_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu8s(Test_BFu8ll_BFu0i_BFu8s, "BFu8ll_BFu0i_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu9i  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8ll_BFu0i_BFu9i) C1{ FL:8 Fi:0 Fi:9}



static void Test_BFu8ll_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu9i");
    static BFu8ll_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8ll_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu9i(Test_BFu8ll_BFu0i_BFu9i, "BFu8ll_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu9ll  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8ll_BFu0i_BFu9ll) C1{ FL:8 Fi:0 FL:9}



static void Test_BFu8ll_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu9ll");
    static BFu8ll_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8ll_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu9ll(Test_BFu8ll_BFu0i_BFu9ll, "BFu8ll_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_BFu9s  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8ll_BFu0i_BFu9s) C1{ FL:8 Fi:0 Fs:9}



static void Test_BFu8ll_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu8ll_BFu0i_BFu9s");
    static BFu8ll_BFu0i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8ll_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_BFu9s(Test_BFu8ll_BFu0i_BFu9s, "BFu8ll_BFu0i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_C  {
  __tsu64 v1:8;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu8ll_BFu0i_C) C1{ FL:8 Fi:0 Fc}



static void Test_BFu8ll_BFu0i_C()
{
  {
    init_simple_test("BFu8ll_BFu0i_C");
    static BFu8ll_BFu0i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_C(Test_BFu8ll_BFu0i_C, "BFu8ll_BFu0i_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_D  {
  __tsu64 v1:8;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu8ll_BFu0i_D) C1{ FL:8 Fi:0 FL}



static void Test_BFu8ll_BFu0i_D()
{
  {
    init_simple_test("BFu8ll_BFu0i_D");
    static BFu8ll_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_D(Test_BFu8ll_BFu0i_D, "BFu8ll_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_F  {
  __tsu64 v1:8;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu8ll_BFu0i_F) C1{ FL:8 Fi:0 Fi}



static void Test_BFu8ll_BFu0i_F()
{
  {
    init_simple_test("BFu8ll_BFu0i_F");
    static BFu8ll_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_F(Test_BFu8ll_BFu0i_F, "BFu8ll_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_I  {
  __tsu64 v1:8;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu8ll_BFu0i_I) C1{ FL:8 Fi:0 Fi}



static void Test_BFu8ll_BFu0i_I()
{
  {
    init_simple_test("BFu8ll_BFu0i_I");
    static BFu8ll_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_I(Test_BFu8ll_BFu0i_I, "BFu8ll_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_Ip  {
  __tsu64 v1:8;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu8ll_BFu0i_Ip) C1{ FL:8 Fi:0 Fp}



static void Test_BFu8ll_BFu0i_Ip()
{
  {
    init_simple_test("BFu8ll_BFu0i_Ip");
    static BFu8ll_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_Ip(Test_BFu8ll_BFu0i_Ip, "BFu8ll_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_L  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu8ll_BFu0i_L) C1{ FL:8 Fi:0 FL}



static void Test_BFu8ll_BFu0i_L()
{
  {
    init_simple_test("BFu8ll_BFu0i_L");
    static BFu8ll_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_L(Test_BFu8ll_BFu0i_L, "BFu8ll_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_S  {
  __tsu64 v1:8;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu8ll_BFu0i_S) C1{ FL:8 Fi:0 Fs}



static void Test_BFu8ll_BFu0i_S()
{
  {
    init_simple_test("BFu8ll_BFu0i_S");
    static BFu8ll_BFu0i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_S(Test_BFu8ll_BFu0i_S, "BFu8ll_BFu0i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_Uc  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu8ll_BFu0i_Uc) C1{ FL:8 Fi:0 Fc}



static void Test_BFu8ll_BFu0i_Uc()
{
  {
    init_simple_test("BFu8ll_BFu0i_Uc");
    static BFu8ll_BFu0i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_Uc(Test_BFu8ll_BFu0i_Uc, "BFu8ll_BFu0i_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_Ui  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu8ll_BFu0i_Ui) C1{ FL:8 Fi:0 Fi}



static void Test_BFu8ll_BFu0i_Ui()
{
  {
    init_simple_test("BFu8ll_BFu0i_Ui");
    static BFu8ll_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_Ui(Test_BFu8ll_BFu0i_Ui, "BFu8ll_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_Ul  {
  __tsu64 v1:8;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu8ll_BFu0i_Ul) C1{ FL:8 Fi:0 FL}



static void Test_BFu8ll_BFu0i_Ul()
{
  {
    init_simple_test("BFu8ll_BFu0i_Ul");
    static BFu8ll_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_Ul(Test_BFu8ll_BFu0i_Ul, "BFu8ll_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_Us  {
  __tsu64 v1:8;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu8ll_BFu0i_Us) C1{ FL:8 Fi:0 Fs}



static void Test_BFu8ll_BFu0i_Us()
{
  {
    init_simple_test("BFu8ll_BFu0i_Us");
    static BFu8ll_BFu0i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_Us(Test_BFu8ll_BFu0i_Us, "BFu8ll_BFu0i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0i_Vp  {
  __tsu64 v1:8;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu8ll_BFu0i_Vp) C1{ FL:8 Fi:0 Fp}



static void Test_BFu8ll_BFu0i_Vp()
{
  {
    init_simple_test("BFu8ll_BFu0i_Vp");
    static BFu8ll_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0i_Vp(Test_BFu8ll_BFu0i_Vp, "BFu8ll_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu0ll) C1{ FL:8 FL:0}



static void Test_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll");
    static BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll(Test_BFu8ll_BFu0ll, "BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu0ll_BFu0c) C1{ FL:8 FL:0 Fc:0}



static void Test_BFu8ll_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu0c");
    static BFu8ll_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu0c(Test_BFu8ll_BFu0ll_BFu0c, "BFu8ll_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu0ll_BFu0i) C1{ FL:8 FL:0 Fi:0}



static void Test_BFu8ll_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu0i");
    static BFu8ll_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu0i(Test_BFu8ll_BFu0ll_BFu0i, "BFu8ll_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu0ll_BFu0ll) C1{ FL:8 FL:0 FL:0}



static void Test_BFu8ll_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu0ll");
    static BFu8ll_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu0ll(Test_BFu8ll_BFu0ll_BFu0ll, "BFu8ll_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu0ll_BFu0s) C1{ FL:8 FL:0 Fs:0}



static void Test_BFu8ll_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu0s");
    static BFu8ll_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu0s(Test_BFu8ll_BFu0ll_BFu0s, "BFu8ll_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu15i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8ll_BFu0ll_BFu15i) C1{ FL:8 FL:0 Fi:15}



static void Test_BFu8ll_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu15i");
    static BFu8ll_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8ll_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu15i(Test_BFu8ll_BFu0ll_BFu15i, "BFu8ll_BFu0ll_BFu15i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu15ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8ll_BFu0ll_BFu15ll) C1{ FL:8 FL:0 FL:15}



static void Test_BFu8ll_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu15ll");
    static BFu8ll_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8ll_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu15ll(Test_BFu8ll_BFu0ll_BFu15ll, "BFu8ll_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu15s  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8ll_BFu0ll_BFu15s) C1{ FL:8 FL:0 Fs:15}



static void Test_BFu8ll_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu15s");
    static BFu8ll_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8ll_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu15s(Test_BFu8ll_BFu0ll_BFu15s, "BFu8ll_BFu0ll_BFu15s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu16i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8ll_BFu0ll_BFu16i) C1{ FL:8 FL:0 Fi:16}



static void Test_BFu8ll_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu16i");
    static BFu8ll_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8ll_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu16i(Test_BFu8ll_BFu0ll_BFu16i, "BFu8ll_BFu0ll_BFu16i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu16ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8ll_BFu0ll_BFu16ll) C1{ FL:8 FL:0 FL:16}



static void Test_BFu8ll_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu16ll");
    static BFu8ll_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8ll_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu16ll(Test_BFu8ll_BFu0ll_BFu16ll, "BFu8ll_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu16s  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8ll_BFu0ll_BFu16s) C1{ FL:8 FL:0 Fs:16}



static void Test_BFu8ll_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu16s");
    static BFu8ll_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8ll_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu16s(Test_BFu8ll_BFu0ll_BFu16s, "BFu8ll_BFu0ll_BFu16s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu17i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8ll_BFu0ll_BFu17i) C1{ FL:8 FL:0 Fi:17}



static void Test_BFu8ll_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu17i");
    static BFu8ll_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu8ll_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu17i(Test_BFu8ll_BFu0ll_BFu17i, "BFu8ll_BFu0ll_BFu17i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu17ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8ll_BFu0ll_BFu17ll) C1{ FL:8 FL:0 FL:17}



static void Test_BFu8ll_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu17ll");
    static BFu8ll_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu8ll_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu17ll(Test_BFu8ll_BFu0ll_BFu17ll, "BFu8ll_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu1c  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8ll_BFu0ll_BFu1c) C1{ FL:8 FL:0 Fc:1}



static void Test_BFu8ll_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu1c");
    static BFu8ll_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8ll_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu1c(Test_BFu8ll_BFu0ll_BFu1c, "BFu8ll_BFu0ll_BFu1c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu1i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8ll_BFu0ll_BFu1i) C1{ FL:8 FL:0 Fi:1}



static void Test_BFu8ll_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu1i");
    static BFu8ll_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8ll_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu1i(Test_BFu8ll_BFu0ll_BFu1i, "BFu8ll_BFu0ll_BFu1i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu1ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8ll_BFu0ll_BFu1ll) C1{ FL:8 FL:0 FL:1}



static void Test_BFu8ll_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu1ll");
    static BFu8ll_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8ll_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu1ll(Test_BFu8ll_BFu0ll_BFu1ll, "BFu8ll_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu1s  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8ll_BFu0ll_BFu1s) C1{ FL:8 FL:0 Fs:1}



static void Test_BFu8ll_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu1s");
    static BFu8ll_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8ll_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu1s(Test_BFu8ll_BFu0ll_BFu1s, "BFu8ll_BFu0ll_BFu1s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu31i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8ll_BFu0ll_BFu31i) C1{ FL:8 FL:0 Fi:31}



static void Test_BFu8ll_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu31i");
    static BFu8ll_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu8ll_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu31i(Test_BFu8ll_BFu0ll_BFu31i, "BFu8ll_BFu0ll_BFu31i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu31ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8ll_BFu0ll_BFu31ll) C1{ FL:8 FL:0 FL:31}



static void Test_BFu8ll_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu31ll");
    static BFu8ll_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu8ll_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu31ll(Test_BFu8ll_BFu0ll_BFu31ll, "BFu8ll_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu32i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8ll_BFu0ll_BFu32i) C1{ FL:8 FL:0 Fi:32}



static void Test_BFu8ll_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu32i");
    static BFu8ll_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu8ll_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu32i(Test_BFu8ll_BFu0ll_BFu32i, "BFu8ll_BFu0ll_BFu32i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu32ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8ll_BFu0ll_BFu32ll) C1{ FL:8 FL:0 FL:32}



static void Test_BFu8ll_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu32ll");
    static BFu8ll_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu8ll_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu32ll(Test_BFu8ll_BFu0ll_BFu32ll, "BFu8ll_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu33  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8ll_BFu0ll_BFu33) C1{ FL:8 FL:0 FL:33}



static void Test_BFu8ll_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu33");
    static BFu8ll_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu8ll_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu8ll_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu33(Test_BFu8ll_BFu0ll_BFu33, "BFu8ll_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu7c  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8ll_BFu0ll_BFu7c) C1{ FL:8 FL:0 Fc:7}



static void Test_BFu8ll_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu7c");
    static BFu8ll_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8ll_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu7c(Test_BFu8ll_BFu0ll_BFu7c, "BFu8ll_BFu0ll_BFu7c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu7i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8ll_BFu0ll_BFu7i) C1{ FL:8 FL:0 Fi:7}



static void Test_BFu8ll_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu7i");
    static BFu8ll_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8ll_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu7i(Test_BFu8ll_BFu0ll_BFu7i, "BFu8ll_BFu0ll_BFu7i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu7ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8ll_BFu0ll_BFu7ll) C1{ FL:8 FL:0 FL:7}



static void Test_BFu8ll_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu7ll");
    static BFu8ll_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8ll_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu7ll(Test_BFu8ll_BFu0ll_BFu7ll, "BFu8ll_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu7s  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8ll_BFu0ll_BFu7s) C1{ FL:8 FL:0 Fs:7}



static void Test_BFu8ll_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu7s");
    static BFu8ll_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8ll_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu7s(Test_BFu8ll_BFu0ll_BFu7s, "BFu8ll_BFu0ll_BFu7s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu8c  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8ll_BFu0ll_BFu8c) C1{ FL:8 FL:0 Fc:8}



static void Test_BFu8ll_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu8c");
    static BFu8ll_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8ll_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu8c(Test_BFu8ll_BFu0ll_BFu8c, "BFu8ll_BFu0ll_BFu8c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu8i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8ll_BFu0ll_BFu8i) C1{ FL:8 FL:0 Fi:8}



static void Test_BFu8ll_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu8i");
    static BFu8ll_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8ll_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu8i(Test_BFu8ll_BFu0ll_BFu8i, "BFu8ll_BFu0ll_BFu8i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu8ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8ll_BFu0ll_BFu8ll) C1{ FL:8 FL:0 FL:8}



static void Test_BFu8ll_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu8ll");
    static BFu8ll_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8ll_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu8ll(Test_BFu8ll_BFu0ll_BFu8ll, "BFu8ll_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu8s  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8ll_BFu0ll_BFu8s) C1{ FL:8 FL:0 Fs:8}



static void Test_BFu8ll_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu8s");
    static BFu8ll_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8ll_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu8s(Test_BFu8ll_BFu0ll_BFu8s, "BFu8ll_BFu0ll_BFu8s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu9i  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8ll_BFu0ll_BFu9i) C1{ FL:8 FL:0 Fi:9}



static void Test_BFu8ll_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu9i");
    static BFu8ll_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8ll_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu9i(Test_BFu8ll_BFu0ll_BFu9i, "BFu8ll_BFu0ll_BFu9i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu9ll  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8ll_BFu0ll_BFu9ll) C1{ FL:8 FL:0 FL:9}



static void Test_BFu8ll_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu9ll");
    static BFu8ll_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8ll_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu9ll(Test_BFu8ll_BFu0ll_BFu9ll, "BFu8ll_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_BFu9s  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8ll_BFu0ll_BFu9s) C1{ FL:8 FL:0 Fs:9}



static void Test_BFu8ll_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu8ll_BFu0ll_BFu9s");
    static BFu8ll_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8ll_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_BFu9s(Test_BFu8ll_BFu0ll_BFu9s, "BFu8ll_BFu0ll_BFu9s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_C  {
  __tsu64 v1:8;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu8ll_BFu0ll_C) C1{ FL:8 FL:0 Fc}



static void Test_BFu8ll_BFu0ll_C()
{
  {
    init_simple_test("BFu8ll_BFu0ll_C");
    static BFu8ll_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_C(Test_BFu8ll_BFu0ll_C, "BFu8ll_BFu0ll_C", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_D  {
  __tsu64 v1:8;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu8ll_BFu0ll_D) C1{ FL:8 FL:0 FL}



static void Test_BFu8ll_BFu0ll_D()
{
  {
    init_simple_test("BFu8ll_BFu0ll_D");
    static BFu8ll_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_D(Test_BFu8ll_BFu0ll_D, "BFu8ll_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_F  {
  __tsu64 v1:8;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu8ll_BFu0ll_F) C1{ FL:8 FL:0 Fi}



static void Test_BFu8ll_BFu0ll_F()
{
  {
    init_simple_test("BFu8ll_BFu0ll_F");
    static BFu8ll_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_F(Test_BFu8ll_BFu0ll_F, "BFu8ll_BFu0ll_F", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_I  {
  __tsu64 v1:8;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu8ll_BFu0ll_I) C1{ FL:8 FL:0 Fi}



static void Test_BFu8ll_BFu0ll_I()
{
  {
    init_simple_test("BFu8ll_BFu0ll_I");
    static BFu8ll_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_I(Test_BFu8ll_BFu0ll_I, "BFu8ll_BFu0ll_I", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_Ip  {
  __tsu64 v1:8;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu8ll_BFu0ll_Ip) C1{ FL:8 FL:0 Fp}



static void Test_BFu8ll_BFu0ll_Ip()
{
  {
    init_simple_test("BFu8ll_BFu0ll_Ip");
    static BFu8ll_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_Ip(Test_BFu8ll_BFu0ll_Ip, "BFu8ll_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_L  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu8ll_BFu0ll_L) C1{ FL:8 FL:0 FL}



static void Test_BFu8ll_BFu0ll_L()
{
  {
    init_simple_test("BFu8ll_BFu0ll_L");
    static BFu8ll_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_L(Test_BFu8ll_BFu0ll_L, "BFu8ll_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_S  {
  __tsu64 v1:8;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu8ll_BFu0ll_S) C1{ FL:8 FL:0 Fs}



static void Test_BFu8ll_BFu0ll_S()
{
  {
    init_simple_test("BFu8ll_BFu0ll_S");
    static BFu8ll_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_S(Test_BFu8ll_BFu0ll_S, "BFu8ll_BFu0ll_S", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_Uc  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu8ll_BFu0ll_Uc) C1{ FL:8 FL:0 Fc}



static void Test_BFu8ll_BFu0ll_Uc()
{
  {
    init_simple_test("BFu8ll_BFu0ll_Uc");
    static BFu8ll_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_Uc(Test_BFu8ll_BFu0ll_Uc, "BFu8ll_BFu0ll_Uc", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_Ui  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu8ll_BFu0ll_Ui) C1{ FL:8 FL:0 Fi}



static void Test_BFu8ll_BFu0ll_Ui()
{
  {
    init_simple_test("BFu8ll_BFu0ll_Ui");
    static BFu8ll_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_Ui(Test_BFu8ll_BFu0ll_Ui, "BFu8ll_BFu0ll_Ui", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_Ul  {
  __tsu64 v1:8;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu8ll_BFu0ll_Ul) C1{ FL:8 FL:0 FL}



static void Test_BFu8ll_BFu0ll_Ul()
{
  {
    init_simple_test("BFu8ll_BFu0ll_Ul");
    static BFu8ll_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_Ul(Test_BFu8ll_BFu0ll_Ul, "BFu8ll_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_Us  {
  __tsu64 v1:8;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu8ll_BFu0ll_Us) C1{ FL:8 FL:0 Fs}



static void Test_BFu8ll_BFu0ll_Us()
{
  {
    init_simple_test("BFu8ll_BFu0ll_Us");
    static BFu8ll_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_Us(Test_BFu8ll_BFu0ll_Us, "BFu8ll_BFu0ll_Us", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0ll_Vp  {
  __tsu64 v1:8;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu8ll_BFu0ll_Vp) C1{ FL:8 FL:0 Fp}



static void Test_BFu8ll_BFu0ll_Vp()
{
  {
    init_simple_test("BFu8ll_BFu0ll_Vp");
    static BFu8ll_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0ll_Vp(Test_BFu8ll_BFu0ll_Vp, "BFu8ll_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s  {
  __tsu64 v1:8;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu0s) C1{ FL:8 Fs:0}



static void Test_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu0s");
    static BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s(Test_BFu8ll_BFu0s, "BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu0c  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu0s_BFu0c) C1{ FL:8 Fs:0 Fc:0}



static void Test_BFu8ll_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu0c");
    static BFu8ll_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu0c(Test_BFu8ll_BFu0s_BFu0c, "BFu8ll_BFu0s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu0i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu0s_BFu0i) C1{ FL:8 Fs:0 Fi:0}



static void Test_BFu8ll_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu0i");
    static BFu8ll_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu0i(Test_BFu8ll_BFu0s_BFu0i, "BFu8ll_BFu0s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu0ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu0s_BFu0ll) C1{ FL:8 Fs:0 FL:0}



static void Test_BFu8ll_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu0ll");
    static BFu8ll_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu0ll(Test_BFu8ll_BFu0s_BFu0ll, "BFu8ll_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu0s  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu0s_BFu0s) C1{ FL:8 Fs:0 Fs:0}



static void Test_BFu8ll_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu0s");
    static BFu8ll_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu0s(Test_BFu8ll_BFu0s_BFu0s, "BFu8ll_BFu0s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu15i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8ll_BFu0s_BFu15i) C1{ FL:8 Fs:0 Fi:15}



static void Test_BFu8ll_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu15i");
    static BFu8ll_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8ll_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu15i(Test_BFu8ll_BFu0s_BFu15i, "BFu8ll_BFu0s_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu15ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8ll_BFu0s_BFu15ll) C1{ FL:8 Fs:0 FL:15}



static void Test_BFu8ll_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu15ll");
    static BFu8ll_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8ll_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu15ll(Test_BFu8ll_BFu0s_BFu15ll, "BFu8ll_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu15s  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8ll_BFu0s_BFu15s) C1{ FL:8 Fs:0 Fs:15}



static void Test_BFu8ll_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu15s");
    static BFu8ll_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8ll_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu15s(Test_BFu8ll_BFu0s_BFu15s, "BFu8ll_BFu0s_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu16i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8ll_BFu0s_BFu16i) C1{ FL:8 Fs:0 Fi:16}



static void Test_BFu8ll_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu16i");
    static BFu8ll_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8ll_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu16i(Test_BFu8ll_BFu0s_BFu16i, "BFu8ll_BFu0s_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu16ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8ll_BFu0s_BFu16ll) C1{ FL:8 Fs:0 FL:16}



static void Test_BFu8ll_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu16ll");
    static BFu8ll_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8ll_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu16ll(Test_BFu8ll_BFu0s_BFu16ll, "BFu8ll_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu16s  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8ll_BFu0s_BFu16s) C1{ FL:8 Fs:0 Fs:16}



static void Test_BFu8ll_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu16s");
    static BFu8ll_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8ll_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu16s(Test_BFu8ll_BFu0s_BFu16s, "BFu8ll_BFu0s_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu17i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8ll_BFu0s_BFu17i) C1{ FL:8 Fs:0 Fi:17}



static void Test_BFu8ll_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu17i");
    static BFu8ll_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8ll_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu17i(Test_BFu8ll_BFu0s_BFu17i, "BFu8ll_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu17ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8ll_BFu0s_BFu17ll) C1{ FL:8 Fs:0 FL:17}



static void Test_BFu8ll_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu17ll");
    static BFu8ll_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu8ll_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu17ll(Test_BFu8ll_BFu0s_BFu17ll, "BFu8ll_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu1c  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8ll_BFu0s_BFu1c) C1{ FL:8 Fs:0 Fc:1}



static void Test_BFu8ll_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu1c");
    static BFu8ll_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8ll_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu1c(Test_BFu8ll_BFu0s_BFu1c, "BFu8ll_BFu0s_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu1i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8ll_BFu0s_BFu1i) C1{ FL:8 Fs:0 Fi:1}



static void Test_BFu8ll_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu1i");
    static BFu8ll_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8ll_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu1i(Test_BFu8ll_BFu0s_BFu1i, "BFu8ll_BFu0s_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu1ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8ll_BFu0s_BFu1ll) C1{ FL:8 Fs:0 FL:1}



static void Test_BFu8ll_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu1ll");
    static BFu8ll_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8ll_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu1ll(Test_BFu8ll_BFu0s_BFu1ll, "BFu8ll_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu1s  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8ll_BFu0s_BFu1s) C1{ FL:8 Fs:0 Fs:1}



static void Test_BFu8ll_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu1s");
    static BFu8ll_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8ll_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu1s(Test_BFu8ll_BFu0s_BFu1s, "BFu8ll_BFu0s_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu31i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8ll_BFu0s_BFu31i) C1{ FL:8 Fs:0 Fi:31}



static void Test_BFu8ll_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu31i");
    static BFu8ll_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8ll_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu31i(Test_BFu8ll_BFu0s_BFu31i, "BFu8ll_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu31ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8ll_BFu0s_BFu31ll) C1{ FL:8 Fs:0 FL:31}



static void Test_BFu8ll_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu31ll");
    static BFu8ll_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu8ll_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu31ll(Test_BFu8ll_BFu0s_BFu31ll, "BFu8ll_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu32i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8ll_BFu0s_BFu32i) C1{ FL:8 Fs:0 Fi:32}



static void Test_BFu8ll_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu32i");
    static BFu8ll_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8ll_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu32i(Test_BFu8ll_BFu0s_BFu32i, "BFu8ll_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu32ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8ll_BFu0s_BFu32ll) C1{ FL:8 Fs:0 FL:32}



static void Test_BFu8ll_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu32ll");
    static BFu8ll_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu8ll_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu32ll(Test_BFu8ll_BFu0s_BFu32ll, "BFu8ll_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu33  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8ll_BFu0s_BFu33) C1{ FL:8 Fs:0 FL:33}



static void Test_BFu8ll_BFu0s_BFu33()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu33");
    static BFu8ll_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu8ll_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu8ll_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu33(Test_BFu8ll_BFu0s_BFu33, "BFu8ll_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu7c  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8ll_BFu0s_BFu7c) C1{ FL:8 Fs:0 Fc:7}



static void Test_BFu8ll_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu7c");
    static BFu8ll_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8ll_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu7c(Test_BFu8ll_BFu0s_BFu7c, "BFu8ll_BFu0s_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu7i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8ll_BFu0s_BFu7i) C1{ FL:8 Fs:0 Fi:7}



static void Test_BFu8ll_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu7i");
    static BFu8ll_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8ll_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu7i(Test_BFu8ll_BFu0s_BFu7i, "BFu8ll_BFu0s_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu7ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8ll_BFu0s_BFu7ll) C1{ FL:8 Fs:0 FL:7}



static void Test_BFu8ll_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu7ll");
    static BFu8ll_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8ll_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu7ll(Test_BFu8ll_BFu0s_BFu7ll, "BFu8ll_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu7s  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8ll_BFu0s_BFu7s) C1{ FL:8 Fs:0 Fs:7}



static void Test_BFu8ll_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu7s");
    static BFu8ll_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8ll_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu7s(Test_BFu8ll_BFu0s_BFu7s, "BFu8ll_BFu0s_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu8c  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8ll_BFu0s_BFu8c) C1{ FL:8 Fs:0 Fc:8}



static void Test_BFu8ll_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu8c");
    static BFu8ll_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8ll_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu8c(Test_BFu8ll_BFu0s_BFu8c, "BFu8ll_BFu0s_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu8i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8ll_BFu0s_BFu8i) C1{ FL:8 Fs:0 Fi:8}



static void Test_BFu8ll_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu8i");
    static BFu8ll_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8ll_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu8i(Test_BFu8ll_BFu0s_BFu8i, "BFu8ll_BFu0s_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu8ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8ll_BFu0s_BFu8ll) C1{ FL:8 Fs:0 FL:8}



static void Test_BFu8ll_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu8ll");
    static BFu8ll_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8ll_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu8ll(Test_BFu8ll_BFu0s_BFu8ll, "BFu8ll_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu8s  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8ll_BFu0s_BFu8s) C1{ FL:8 Fs:0 Fs:8}



static void Test_BFu8ll_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu8s");
    static BFu8ll_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8ll_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu8s(Test_BFu8ll_BFu0s_BFu8s, "BFu8ll_BFu0s_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu9i  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8ll_BFu0s_BFu9i) C1{ FL:8 Fs:0 Fi:9}



static void Test_BFu8ll_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu9i");
    static BFu8ll_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8ll_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu9i(Test_BFu8ll_BFu0s_BFu9i, "BFu8ll_BFu0s_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu9ll  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8ll_BFu0s_BFu9ll) C1{ FL:8 Fs:0 FL:9}



static void Test_BFu8ll_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu9ll");
    static BFu8ll_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8ll_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu9ll(Test_BFu8ll_BFu0s_BFu9ll, "BFu8ll_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_BFu9s  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8ll_BFu0s_BFu9s) C1{ FL:8 Fs:0 Fs:9}



static void Test_BFu8ll_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu8ll_BFu0s_BFu9s");
    static BFu8ll_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8ll_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_BFu9s(Test_BFu8ll_BFu0s_BFu9s, "BFu8ll_BFu0s_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_C  {
  __tsu64 v1:8;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu8ll_BFu0s_C) C1{ FL:8 Fs:0 Fc}



static void Test_BFu8ll_BFu0s_C()
{
  {
    init_simple_test("BFu8ll_BFu0s_C");
    static BFu8ll_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu8ll_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_C(Test_BFu8ll_BFu0s_C, "BFu8ll_BFu0s_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_D  {
  __tsu64 v1:8;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu8ll_BFu0s_D) C1{ FL:8 Fs:0 FL}



static void Test_BFu8ll_BFu0s_D()
{
  {
    init_simple_test("BFu8ll_BFu0s_D");
    static BFu8ll_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_D(Test_BFu8ll_BFu0s_D, "BFu8ll_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_F  {
  __tsu64 v1:8;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu8ll_BFu0s_F) C1{ FL:8 Fs:0 Fi}



static void Test_BFu8ll_BFu0s_F()
{
  {
    init_simple_test("BFu8ll_BFu0s_F");
    static BFu8ll_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_F(Test_BFu8ll_BFu0s_F, "BFu8ll_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_I  {
  __tsu64 v1:8;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu8ll_BFu0s_I) C1{ FL:8 Fs:0 Fi}



static void Test_BFu8ll_BFu0s_I()
{
  {
    init_simple_test("BFu8ll_BFu0s_I");
    static BFu8ll_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_I(Test_BFu8ll_BFu0s_I, "BFu8ll_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_Ip  {
  __tsu64 v1:8;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu8ll_BFu0s_Ip) C1{ FL:8 Fs:0 Fp}



static void Test_BFu8ll_BFu0s_Ip()
{
  {
    init_simple_test("BFu8ll_BFu0s_Ip");
    static BFu8ll_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_Ip(Test_BFu8ll_BFu0s_Ip, "BFu8ll_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_L  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu8ll_BFu0s_L) C1{ FL:8 Fs:0 FL}



static void Test_BFu8ll_BFu0s_L()
{
  {
    init_simple_test("BFu8ll_BFu0s_L");
    static BFu8ll_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_L(Test_BFu8ll_BFu0s_L, "BFu8ll_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_S  {
  __tsu64 v1:8;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu8ll_BFu0s_S) C1{ FL:8 Fs:0 Fs}



static void Test_BFu8ll_BFu0s_S()
{
  {
    init_simple_test("BFu8ll_BFu0s_S");
    static BFu8ll_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu8ll_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_S(Test_BFu8ll_BFu0s_S, "BFu8ll_BFu0s_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_Uc  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu8ll_BFu0s_Uc) C1{ FL:8 Fs:0 Fc}



static void Test_BFu8ll_BFu0s_Uc()
{
  {
    init_simple_test("BFu8ll_BFu0s_Uc");
    static BFu8ll_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu8ll_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_Uc(Test_BFu8ll_BFu0s_Uc, "BFu8ll_BFu0s_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_Ui  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu8ll_BFu0s_Ui) C1{ FL:8 Fs:0 Fi}



static void Test_BFu8ll_BFu0s_Ui()
{
  {
    init_simple_test("BFu8ll_BFu0s_Ui");
    static BFu8ll_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu8ll_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_Ui(Test_BFu8ll_BFu0s_Ui, "BFu8ll_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_Ul  {
  __tsu64 v1:8;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu8ll_BFu0s_Ul) C1{ FL:8 Fs:0 FL}



static void Test_BFu8ll_BFu0s_Ul()
{
  {
    init_simple_test("BFu8ll_BFu0s_Ul");
    static BFu8ll_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_Ul(Test_BFu8ll_BFu0s_Ul, "BFu8ll_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_Us  {
  __tsu64 v1:8;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu8ll_BFu0s_Us) C1{ FL:8 Fs:0 Fs}



static void Test_BFu8ll_BFu0s_Us()
{
  {
    init_simple_test("BFu8ll_BFu0s_Us");
    static BFu8ll_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu8ll_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_Us(Test_BFu8ll_BFu0s_Us, "BFu8ll_BFu0s_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu0s_Vp  {
  __tsu64 v1:8;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu8ll_BFu0s_Vp) C1{ FL:8 Fs:0 Fp}



static void Test_BFu8ll_BFu0s_Vp()
{
  {
    init_simple_test("BFu8ll_BFu0s_Vp");
    static BFu8ll_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu0s_Vp(Test_BFu8ll_BFu0s_Vp, "BFu8ll_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15i_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu15i_BFu0c) C1{ FL:8 Fi:15 Fc:0}



static void Test_BFu8ll_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu15i_BFu0c");
    static BFu8ll_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15i_BFu0c(Test_BFu8ll_BFu15i_BFu0c, "BFu8ll_BFu15i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15i_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu15i_BFu0i) C1{ FL:8 Fi:15 Fi:0}



static void Test_BFu8ll_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu15i_BFu0i");
    static BFu8ll_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15i_BFu0i(Test_BFu8ll_BFu15i_BFu0i, "BFu8ll_BFu15i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu15i_BFu0ll) C1{ FL:8 Fi:15 FL:0}



static void Test_BFu8ll_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu15i_BFu0ll");
    static BFu8ll_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15i_BFu0ll(Test_BFu8ll_BFu15i_BFu0ll, "BFu8ll_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15i_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu15i_BFu0s) C1{ FL:8 Fi:15 Fs:0}



static void Test_BFu8ll_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu15i_BFu0s");
    static BFu8ll_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15i_BFu0s(Test_BFu8ll_BFu15i_BFu0s, "BFu8ll_BFu15i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu15ll_BFu0c) C1{ FL:8 FL:15 Fc:0}



static void Test_BFu8ll_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu15ll_BFu0c");
    static BFu8ll_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15ll_BFu0c(Test_BFu8ll_BFu15ll_BFu0c, "BFu8ll_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu15ll_BFu0i) C1{ FL:8 FL:15 Fi:0}



static void Test_BFu8ll_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu15ll_BFu0i");
    static BFu8ll_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15ll_BFu0i(Test_BFu8ll_BFu15ll_BFu0i, "BFu8ll_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu15ll_BFu0ll) C1{ FL:8 FL:15 FL:0}



static void Test_BFu8ll_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu15ll_BFu0ll");
    static BFu8ll_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15ll_BFu0ll(Test_BFu8ll_BFu15ll_BFu0ll, "BFu8ll_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu15ll_BFu0s) C1{ FL:8 FL:15 Fs:0}



static void Test_BFu8ll_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu15ll_BFu0s");
    static BFu8ll_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8ll_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15ll_BFu0s(Test_BFu8ll_BFu15ll_BFu0s, "BFu8ll_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15s_BFu0c  {
  __tsu64 v1:8;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu15s_BFu0c) C1{ FL:8 Fs:15 Fc:0}



static void Test_BFu8ll_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu15s_BFu0c");
    static BFu8ll_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8ll_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15s_BFu0c(Test_BFu8ll_BFu15s_BFu0c, "BFu8ll_BFu15s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15s_BFu0i  {
  __tsu64 v1:8;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu15s_BFu0i) C1{ FL:8 Fs:15 Fi:0}



static void Test_BFu8ll_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu15s_BFu0i");
    static BFu8ll_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8ll_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15s_BFu0i(Test_BFu8ll_BFu15s_BFu0i, "BFu8ll_BFu15s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15s_BFu0ll  {
  __tsu64 v1:8;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu15s_BFu0ll) C1{ FL:8 Fs:15 FL:0}



static void Test_BFu8ll_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu15s_BFu0ll");
    static BFu8ll_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8ll_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15s_BFu0ll(Test_BFu8ll_BFu15s_BFu0ll, "BFu8ll_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu15s_BFu0s  {
  __tsu64 v1:8;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu15s_BFu0s) C1{ FL:8 Fs:15 Fs:0}



static void Test_BFu8ll_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu15s_BFu0s");
    static BFu8ll_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8ll_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8ll_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu15s_BFu0s(Test_BFu8ll_BFu15s_BFu0s, "BFu8ll_BFu15s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16i_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu16i_BFu0c) C1{ FL:8 Fi:16 Fc:0}



static void Test_BFu8ll_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu16i_BFu0c");
    static BFu8ll_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16i_BFu0c(Test_BFu8ll_BFu16i_BFu0c, "BFu8ll_BFu16i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16i_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu16i_BFu0i) C1{ FL:8 Fi:16 Fi:0}



static void Test_BFu8ll_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu16i_BFu0i");
    static BFu8ll_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16i_BFu0i(Test_BFu8ll_BFu16i_BFu0i, "BFu8ll_BFu16i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu16i_BFu0ll) C1{ FL:8 Fi:16 FL:0}



static void Test_BFu8ll_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu16i_BFu0ll");
    static BFu8ll_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16i_BFu0ll(Test_BFu8ll_BFu16i_BFu0ll, "BFu8ll_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16i_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu16i_BFu0s) C1{ FL:8 Fi:16 Fs:0}



static void Test_BFu8ll_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu16i_BFu0s");
    static BFu8ll_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16i_BFu0s(Test_BFu8ll_BFu16i_BFu0s, "BFu8ll_BFu16i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu16ll_BFu0c) C1{ FL:8 FL:16 Fc:0}



static void Test_BFu8ll_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu16ll_BFu0c");
    static BFu8ll_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16ll_BFu0c(Test_BFu8ll_BFu16ll_BFu0c, "BFu8ll_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu16ll_BFu0i) C1{ FL:8 FL:16 Fi:0}



static void Test_BFu8ll_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu16ll_BFu0i");
    static BFu8ll_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16ll_BFu0i(Test_BFu8ll_BFu16ll_BFu0i, "BFu8ll_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu16ll_BFu0ll) C1{ FL:8 FL:16 FL:0}



static void Test_BFu8ll_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu16ll_BFu0ll");
    static BFu8ll_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16ll_BFu0ll(Test_BFu8ll_BFu16ll_BFu0ll, "BFu8ll_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu16ll_BFu0s) C1{ FL:8 FL:16 Fs:0}



static void Test_BFu8ll_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu16ll_BFu0s");
    static BFu8ll_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8ll_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16ll_BFu0s(Test_BFu8ll_BFu16ll_BFu0s, "BFu8ll_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16s_BFu0c  {
  __tsu64 v1:8;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu16s_BFu0c) C1{ FL:8 Fs:16 Fc:0}



static void Test_BFu8ll_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu16s_BFu0c");
    static BFu8ll_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8ll_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16s_BFu0c(Test_BFu8ll_BFu16s_BFu0c, "BFu8ll_BFu16s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16s_BFu0i  {
  __tsu64 v1:8;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu16s_BFu0i) C1{ FL:8 Fs:16 Fi:0}



static void Test_BFu8ll_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu16s_BFu0i");
    static BFu8ll_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8ll_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16s_BFu0i(Test_BFu8ll_BFu16s_BFu0i, "BFu8ll_BFu16s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16s_BFu0ll  {
  __tsu64 v1:8;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu16s_BFu0ll) C1{ FL:8 Fs:16 FL:0}



static void Test_BFu8ll_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu16s_BFu0ll");
    static BFu8ll_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8ll_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16s_BFu0ll(Test_BFu8ll_BFu16s_BFu0ll, "BFu8ll_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu16s_BFu0s  {
  __tsu64 v1:8;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu16s_BFu0s) C1{ FL:8 Fs:16 Fs:0}



static void Test_BFu8ll_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu16s_BFu0s");
    static BFu8ll_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8ll_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8ll_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu16s_BFu0s(Test_BFu8ll_BFu16s_BFu0s, "BFu8ll_BFu16s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu17i_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu17i_BFu0c) C1{ FL:8 Fi:17 Fc:0}



static void Test_BFu8ll_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu17i_BFu0c");
    static BFu8ll_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu17i_BFu0c(Test_BFu8ll_BFu17i_BFu0c, "BFu8ll_BFu17i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu17i_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu17i_BFu0i) C1{ FL:8 Fi:17 Fi:0}



static void Test_BFu8ll_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu17i_BFu0i");
    static BFu8ll_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu17i_BFu0i(Test_BFu8ll_BFu17i_BFu0i, "BFu8ll_BFu17i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu17i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu17i_BFu0ll) C1{ FL:8 Fi:17 FL:0}



static void Test_BFu8ll_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu17i_BFu0ll");
    static BFu8ll_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu17i_BFu0ll(Test_BFu8ll_BFu17i_BFu0ll, "BFu8ll_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu17i_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu17i_BFu0s) C1{ FL:8 Fi:17 Fs:0}



static void Test_BFu8ll_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu17i_BFu0s");
    static BFu8ll_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu17i_BFu0s(Test_BFu8ll_BFu17i_BFu0s, "BFu8ll_BFu17i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu17ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu17ll_BFu0c) C1{ FL:8 FL:17 Fc:0}



static void Test_BFu8ll_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu17ll_BFu0c");
    static BFu8ll_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu17ll_BFu0c(Test_BFu8ll_BFu17ll_BFu0c, "BFu8ll_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu17ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu17ll_BFu0i) C1{ FL:8 FL:17 Fi:0}



static void Test_BFu8ll_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu17ll_BFu0i");
    static BFu8ll_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu17ll_BFu0i(Test_BFu8ll_BFu17ll_BFu0i, "BFu8ll_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu17ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu17ll_BFu0ll) C1{ FL:8 FL:17 FL:0}



static void Test_BFu8ll_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu17ll_BFu0ll");
    static BFu8ll_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu17ll_BFu0ll(Test_BFu8ll_BFu17ll_BFu0ll, "BFu8ll_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu17ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu17ll_BFu0s) C1{ FL:8 FL:17 Fs:0}



static void Test_BFu8ll_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu17ll_BFu0s");
    static BFu8ll_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8ll_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8ll_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu17ll_BFu0s(Test_BFu8ll_BFu17ll_BFu0s, "BFu8ll_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1c_BFu0c  {
  __tsu64 v1:8;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu1c_BFu0c) C1{ FL:8 Fc:1 Fc:0}



static void Test_BFu8ll_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu1c_BFu0c");
    static BFu8ll_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1c_BFu0c(Test_BFu8ll_BFu1c_BFu0c, "BFu8ll_BFu1c_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1c_BFu0i  {
  __tsu64 v1:8;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu1c_BFu0i) C1{ FL:8 Fc:1 Fi:0}



static void Test_BFu8ll_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu1c_BFu0i");
    static BFu8ll_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1c_BFu0i(Test_BFu8ll_BFu1c_BFu0i, "BFu8ll_BFu1c_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1c_BFu0ll  {
  __tsu64 v1:8;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu1c_BFu0ll) C1{ FL:8 Fc:1 FL:0}



static void Test_BFu8ll_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu1c_BFu0ll");
    static BFu8ll_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1c_BFu0ll(Test_BFu8ll_BFu1c_BFu0ll, "BFu8ll_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1c_BFu0s  {
  __tsu64 v1:8;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu1c_BFu0s) C1{ FL:8 Fc:1 Fs:0}



static void Test_BFu8ll_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu1c_BFu0s");
    static BFu8ll_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1c_BFu0s(Test_BFu8ll_BFu1c_BFu0s, "BFu8ll_BFu1c_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1i_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu1i_BFu0c) C1{ FL:8 Fi:1 Fc:0}



static void Test_BFu8ll_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu1i_BFu0c");
    static BFu8ll_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1i_BFu0c(Test_BFu8ll_BFu1i_BFu0c, "BFu8ll_BFu1i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1i_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu1i_BFu0i) C1{ FL:8 Fi:1 Fi:0}



static void Test_BFu8ll_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu1i_BFu0i");
    static BFu8ll_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1i_BFu0i(Test_BFu8ll_BFu1i_BFu0i, "BFu8ll_BFu1i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu1i_BFu0ll) C1{ FL:8 Fi:1 FL:0}



static void Test_BFu8ll_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu1i_BFu0ll");
    static BFu8ll_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1i_BFu0ll(Test_BFu8ll_BFu1i_BFu0ll, "BFu8ll_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1i_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu1i_BFu0s) C1{ FL:8 Fi:1 Fs:0}



static void Test_BFu8ll_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu1i_BFu0s");
    static BFu8ll_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1i_BFu0s(Test_BFu8ll_BFu1i_BFu0s, "BFu8ll_BFu1i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu1ll_BFu0c) C1{ FL:8 FL:1 Fc:0}



static void Test_BFu8ll_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu1ll_BFu0c");
    static BFu8ll_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1ll_BFu0c(Test_BFu8ll_BFu1ll_BFu0c, "BFu8ll_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu1ll_BFu0i) C1{ FL:8 FL:1 Fi:0}



static void Test_BFu8ll_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu1ll_BFu0i");
    static BFu8ll_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1ll_BFu0i(Test_BFu8ll_BFu1ll_BFu0i, "BFu8ll_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu1ll_BFu0ll) C1{ FL:8 FL:1 FL:0}



static void Test_BFu8ll_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu1ll_BFu0ll");
    static BFu8ll_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1ll_BFu0ll(Test_BFu8ll_BFu1ll_BFu0ll, "BFu8ll_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu1ll_BFu0s) C1{ FL:8 FL:1 Fs:0}



static void Test_BFu8ll_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu1ll_BFu0s");
    static BFu8ll_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1ll_BFu0s(Test_BFu8ll_BFu1ll_BFu0s, "BFu8ll_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1s_BFu0c  {
  __tsu64 v1:8;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu1s_BFu0c) C1{ FL:8 Fs:1 Fc:0}



static void Test_BFu8ll_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu1s_BFu0c");
    static BFu8ll_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1s_BFu0c(Test_BFu8ll_BFu1s_BFu0c, "BFu8ll_BFu1s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1s_BFu0i  {
  __tsu64 v1:8;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu1s_BFu0i) C1{ FL:8 Fs:1 Fi:0}



static void Test_BFu8ll_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu1s_BFu0i");
    static BFu8ll_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1s_BFu0i(Test_BFu8ll_BFu1s_BFu0i, "BFu8ll_BFu1s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1s_BFu0ll  {
  __tsu64 v1:8;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu1s_BFu0ll) C1{ FL:8 Fs:1 FL:0}



static void Test_BFu8ll_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu1s_BFu0ll");
    static BFu8ll_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1s_BFu0ll(Test_BFu8ll_BFu1s_BFu0ll, "BFu8ll_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu1s_BFu0s  {
  __tsu64 v1:8;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu1s_BFu0s) C1{ FL:8 Fs:1 Fs:0}



static void Test_BFu8ll_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu1s_BFu0s");
    static BFu8ll_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8ll_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu1s_BFu0s(Test_BFu8ll_BFu1s_BFu0s, "BFu8ll_BFu1s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu31i_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu31i_BFu0c) C1{ FL:8 Fi:31 Fc:0}



static void Test_BFu8ll_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu31i_BFu0c");
    static BFu8ll_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8ll_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu31i_BFu0c(Test_BFu8ll_BFu31i_BFu0c, "BFu8ll_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu31i_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu31i_BFu0i) C1{ FL:8 Fi:31 Fi:0}



static void Test_BFu8ll_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu31i_BFu0i");
    static BFu8ll_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8ll_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu31i_BFu0i(Test_BFu8ll_BFu31i_BFu0i, "BFu8ll_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu31i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu31i_BFu0ll) C1{ FL:8 Fi:31 FL:0}



static void Test_BFu8ll_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu31i_BFu0ll");
    static BFu8ll_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8ll_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu31i_BFu0ll(Test_BFu8ll_BFu31i_BFu0ll, "BFu8ll_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu31i_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu31i_BFu0s) C1{ FL:8 Fi:31 Fs:0}



static void Test_BFu8ll_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu31i_BFu0s");
    static BFu8ll_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8ll_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu31i_BFu0s(Test_BFu8ll_BFu31i_BFu0s, "BFu8ll_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu31ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu31ll_BFu0c) C1{ FL:8 FL:31 Fc:0}



static void Test_BFu8ll_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu31ll_BFu0c");
    static BFu8ll_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8ll_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu31ll_BFu0c(Test_BFu8ll_BFu31ll_BFu0c, "BFu8ll_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu31ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu31ll_BFu0i) C1{ FL:8 FL:31 Fi:0}



static void Test_BFu8ll_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu31ll_BFu0i");
    static BFu8ll_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8ll_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu31ll_BFu0i(Test_BFu8ll_BFu31ll_BFu0i, "BFu8ll_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu31ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu31ll_BFu0ll) C1{ FL:8 FL:31 FL:0}



static void Test_BFu8ll_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu31ll_BFu0ll");
    static BFu8ll_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8ll_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu31ll_BFu0ll(Test_BFu8ll_BFu31ll_BFu0ll, "BFu8ll_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu31ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu31ll_BFu0s) C1{ FL:8 FL:31 Fs:0}



static void Test_BFu8ll_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu31ll_BFu0s");
    static BFu8ll_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8ll_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8ll_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu31ll_BFu0s(Test_BFu8ll_BFu31ll_BFu0s, "BFu8ll_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu32i_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu32i_BFu0c) C1{ FL:8 Fi:32 Fc:0}



static void Test_BFu8ll_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu32i_BFu0c");
    static BFu8ll_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8ll_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu32i_BFu0c(Test_BFu8ll_BFu32i_BFu0c, "BFu8ll_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu32i_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu32i_BFu0i) C1{ FL:8 Fi:32 Fi:0}



static void Test_BFu8ll_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu32i_BFu0i");
    static BFu8ll_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8ll_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu32i_BFu0i(Test_BFu8ll_BFu32i_BFu0i, "BFu8ll_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu32i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu32i_BFu0ll) C1{ FL:8 Fi:32 FL:0}



static void Test_BFu8ll_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu32i_BFu0ll");
    static BFu8ll_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8ll_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu32i_BFu0ll(Test_BFu8ll_BFu32i_BFu0ll, "BFu8ll_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu32i_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu32i_BFu0s) C1{ FL:8 Fi:32 Fs:0}



static void Test_BFu8ll_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu32i_BFu0s");
    static BFu8ll_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8ll_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu32i_BFu0s(Test_BFu8ll_BFu32i_BFu0s, "BFu8ll_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu32ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu32ll_BFu0c) C1{ FL:8 FL:32 Fc:0}



static void Test_BFu8ll_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu32ll_BFu0c");
    static BFu8ll_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8ll_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu32ll_BFu0c(Test_BFu8ll_BFu32ll_BFu0c, "BFu8ll_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu32ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu32ll_BFu0i) C1{ FL:8 FL:32 Fi:0}



static void Test_BFu8ll_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu32ll_BFu0i");
    static BFu8ll_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8ll_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu32ll_BFu0i(Test_BFu8ll_BFu32ll_BFu0i, "BFu8ll_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu32ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu32ll_BFu0ll) C1{ FL:8 FL:32 FL:0}



static void Test_BFu8ll_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu32ll_BFu0ll");
    static BFu8ll_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8ll_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu32ll_BFu0ll(Test_BFu8ll_BFu32ll_BFu0ll, "BFu8ll_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu32ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu32ll_BFu0s) C1{ FL:8 FL:32 Fs:0}



static void Test_BFu8ll_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu32ll_BFu0s");
    static BFu8ll_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8ll_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8ll_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu32ll_BFu0s(Test_BFu8ll_BFu32ll_BFu0s, "BFu8ll_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu33_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu33_BFu0c) C1{ FL:8 FL:33 Fc:0}



static void Test_BFu8ll_BFu33_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu33_BFu0c");
    static BFu8ll_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8ll_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8ll_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu33_BFu0c(Test_BFu8ll_BFu33_BFu0c, "BFu8ll_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu33_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu33_BFu0i) C1{ FL:8 FL:33 Fi:0}



static void Test_BFu8ll_BFu33_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu33_BFu0i");
    static BFu8ll_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8ll_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8ll_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu33_BFu0i(Test_BFu8ll_BFu33_BFu0i, "BFu8ll_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu33_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu33_BFu0ll) C1{ FL:8 FL:33 FL:0}



static void Test_BFu8ll_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu33_BFu0ll");
    static BFu8ll_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8ll_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8ll_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu33_BFu0ll(Test_BFu8ll_BFu33_BFu0ll, "BFu8ll_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu33_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu33_BFu0s) C1{ FL:8 FL:33 Fs:0}



static void Test_BFu8ll_BFu33_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu33_BFu0s");
    static BFu8ll_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8ll_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8ll_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu33_BFu0s(Test_BFu8ll_BFu33_BFu0s, "BFu8ll_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7c_BFu0c  {
  __tsu64 v1:8;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu7c_BFu0c) C1{ FL:8 Fc:7 Fc:0}



static void Test_BFu8ll_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu7c_BFu0c");
    static BFu8ll_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7c_BFu0c(Test_BFu8ll_BFu7c_BFu0c, "BFu8ll_BFu7c_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7c_BFu0i  {
  __tsu64 v1:8;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu7c_BFu0i) C1{ FL:8 Fc:7 Fi:0}



static void Test_BFu8ll_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu7c_BFu0i");
    static BFu8ll_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7c_BFu0i(Test_BFu8ll_BFu7c_BFu0i, "BFu8ll_BFu7c_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7c_BFu0ll  {
  __tsu64 v1:8;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu7c_BFu0ll) C1{ FL:8 Fc:7 FL:0}



static void Test_BFu8ll_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu7c_BFu0ll");
    static BFu8ll_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7c_BFu0ll(Test_BFu8ll_BFu7c_BFu0ll, "BFu8ll_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7c_BFu0s  {
  __tsu64 v1:8;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu7c_BFu0s) C1{ FL:8 Fc:7 Fs:0}



static void Test_BFu8ll_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu7c_BFu0s");
    static BFu8ll_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7c_BFu0s(Test_BFu8ll_BFu7c_BFu0s, "BFu8ll_BFu7c_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7i_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu7i_BFu0c) C1{ FL:8 Fi:7 Fc:0}



static void Test_BFu8ll_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu7i_BFu0c");
    static BFu8ll_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7i_BFu0c(Test_BFu8ll_BFu7i_BFu0c, "BFu8ll_BFu7i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7i_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu7i_BFu0i) C1{ FL:8 Fi:7 Fi:0}



static void Test_BFu8ll_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu7i_BFu0i");
    static BFu8ll_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7i_BFu0i(Test_BFu8ll_BFu7i_BFu0i, "BFu8ll_BFu7i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu7i_BFu0ll) C1{ FL:8 Fi:7 FL:0}



static void Test_BFu8ll_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu7i_BFu0ll");
    static BFu8ll_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7i_BFu0ll(Test_BFu8ll_BFu7i_BFu0ll, "BFu8ll_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7i_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu7i_BFu0s) C1{ FL:8 Fi:7 Fs:0}



static void Test_BFu8ll_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu7i_BFu0s");
    static BFu8ll_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7i_BFu0s(Test_BFu8ll_BFu7i_BFu0s, "BFu8ll_BFu7i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu7ll_BFu0c) C1{ FL:8 FL:7 Fc:0}



static void Test_BFu8ll_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu7ll_BFu0c");
    static BFu8ll_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7ll_BFu0c(Test_BFu8ll_BFu7ll_BFu0c, "BFu8ll_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu7ll_BFu0i) C1{ FL:8 FL:7 Fi:0}



static void Test_BFu8ll_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu7ll_BFu0i");
    static BFu8ll_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7ll_BFu0i(Test_BFu8ll_BFu7ll_BFu0i, "BFu8ll_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu7ll_BFu0ll) C1{ FL:8 FL:7 FL:0}



static void Test_BFu8ll_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu7ll_BFu0ll");
    static BFu8ll_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7ll_BFu0ll(Test_BFu8ll_BFu7ll_BFu0ll, "BFu8ll_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu7ll_BFu0s) C1{ FL:8 FL:7 Fs:0}



static void Test_BFu8ll_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu7ll_BFu0s");
    static BFu8ll_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7ll_BFu0s(Test_BFu8ll_BFu7ll_BFu0s, "BFu8ll_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7s_BFu0c  {
  __tsu64 v1:8;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu7s_BFu0c) C1{ FL:8 Fs:7 Fc:0}



static void Test_BFu8ll_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu7s_BFu0c");
    static BFu8ll_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7s_BFu0c(Test_BFu8ll_BFu7s_BFu0c, "BFu8ll_BFu7s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7s_BFu0i  {
  __tsu64 v1:8;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu7s_BFu0i) C1{ FL:8 Fs:7 Fi:0}



static void Test_BFu8ll_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu7s_BFu0i");
    static BFu8ll_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7s_BFu0i(Test_BFu8ll_BFu7s_BFu0i, "BFu8ll_BFu7s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7s_BFu0ll  {
  __tsu64 v1:8;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu7s_BFu0ll) C1{ FL:8 Fs:7 FL:0}



static void Test_BFu8ll_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu7s_BFu0ll");
    static BFu8ll_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7s_BFu0ll(Test_BFu8ll_BFu7s_BFu0ll, "BFu8ll_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu7s_BFu0s  {
  __tsu64 v1:8;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu7s_BFu0s) C1{ FL:8 Fs:7 Fs:0}



static void Test_BFu8ll_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu7s_BFu0s");
    static BFu8ll_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8ll_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8ll_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu7s_BFu0s(Test_BFu8ll_BFu7s_BFu0s, "BFu8ll_BFu7s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8c_BFu0c  {
  __tsu64 v1:8;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu8c_BFu0c) C1{ FL:8 Fc:8 Fc:0}



static void Test_BFu8ll_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu8c_BFu0c");
    static BFu8ll_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8c_BFu0c(Test_BFu8ll_BFu8c_BFu0c, "BFu8ll_BFu8c_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8c_BFu0i  {
  __tsu64 v1:8;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu8c_BFu0i) C1{ FL:8 Fc:8 Fi:0}



static void Test_BFu8ll_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu8c_BFu0i");
    static BFu8ll_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8c_BFu0i(Test_BFu8ll_BFu8c_BFu0i, "BFu8ll_BFu8c_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8c_BFu0ll  {
  __tsu64 v1:8;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu8c_BFu0ll) C1{ FL:8 Fc:8 FL:0}



static void Test_BFu8ll_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu8c_BFu0ll");
    static BFu8ll_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8c_BFu0ll(Test_BFu8ll_BFu8c_BFu0ll, "BFu8ll_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8c_BFu0s  {
  __tsu64 v1:8;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu8c_BFu0s) C1{ FL:8 Fc:8 Fs:0}



static void Test_BFu8ll_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu8c_BFu0s");
    static BFu8ll_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8c_BFu0s(Test_BFu8ll_BFu8c_BFu0s, "BFu8ll_BFu8c_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8i_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu8i_BFu0c) C1{ FL:8 Fi:8 Fc:0}



static void Test_BFu8ll_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu8i_BFu0c");
    static BFu8ll_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8i_BFu0c(Test_BFu8ll_BFu8i_BFu0c, "BFu8ll_BFu8i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8i_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu8i_BFu0i) C1{ FL:8 Fi:8 Fi:0}



static void Test_BFu8ll_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu8i_BFu0i");
    static BFu8ll_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8i_BFu0i(Test_BFu8ll_BFu8i_BFu0i, "BFu8ll_BFu8i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu8i_BFu0ll) C1{ FL:8 Fi:8 FL:0}



static void Test_BFu8ll_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu8i_BFu0ll");
    static BFu8ll_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8i_BFu0ll(Test_BFu8ll_BFu8i_BFu0ll, "BFu8ll_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8i_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu8i_BFu0s) C1{ FL:8 Fi:8 Fs:0}



static void Test_BFu8ll_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu8i_BFu0s");
    static BFu8ll_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8i_BFu0s(Test_BFu8ll_BFu8i_BFu0s, "BFu8ll_BFu8i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu8ll_BFu0c) C1{ FL:8 FL:8 Fc:0}



static void Test_BFu8ll_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu8ll_BFu0c");
    static BFu8ll_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8ll_BFu0c(Test_BFu8ll_BFu8ll_BFu0c, "BFu8ll_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu8ll_BFu0i) C1{ FL:8 FL:8 Fi:0}



static void Test_BFu8ll_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu8ll_BFu0i");
    static BFu8ll_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8ll_BFu0i(Test_BFu8ll_BFu8ll_BFu0i, "BFu8ll_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu8ll_BFu0ll) C1{ FL:8 FL:8 FL:0}



static void Test_BFu8ll_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu8ll_BFu0ll");
    static BFu8ll_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8ll_BFu0ll(Test_BFu8ll_BFu8ll_BFu0ll, "BFu8ll_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu8ll_BFu0s) C1{ FL:8 FL:8 Fs:0}



static void Test_BFu8ll_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu8ll_BFu0s");
    static BFu8ll_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8ll_BFu0s(Test_BFu8ll_BFu8ll_BFu0s, "BFu8ll_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8s_BFu0c  {
  __tsu64 v1:8;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu8s_BFu0c) C1{ FL:8 Fs:8 Fc:0}



static void Test_BFu8ll_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu8s_BFu0c");
    static BFu8ll_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8s_BFu0c(Test_BFu8ll_BFu8s_BFu0c, "BFu8ll_BFu8s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8s_BFu0i  {
  __tsu64 v1:8;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu8s_BFu0i) C1{ FL:8 Fs:8 Fi:0}



static void Test_BFu8ll_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu8s_BFu0i");
    static BFu8ll_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8s_BFu0i(Test_BFu8ll_BFu8s_BFu0i, "BFu8ll_BFu8s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8s_BFu0ll  {
  __tsu64 v1:8;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu8s_BFu0ll) C1{ FL:8 Fs:8 FL:0}



static void Test_BFu8ll_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu8s_BFu0ll");
    static BFu8ll_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8s_BFu0ll(Test_BFu8ll_BFu8s_BFu0ll, "BFu8ll_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu8s_BFu0s  {
  __tsu64 v1:8;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu8s_BFu0s) C1{ FL:8 Fs:8 Fs:0}



static void Test_BFu8ll_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu8s_BFu0s");
    static BFu8ll_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8ll_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu8s_BFu0s(Test_BFu8ll_BFu8s_BFu0s, "BFu8ll_BFu8s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9i_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu9i_BFu0c) C1{ FL:8 Fi:9 Fc:0}



static void Test_BFu8ll_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu9i_BFu0c");
    static BFu8ll_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9i_BFu0c(Test_BFu8ll_BFu9i_BFu0c, "BFu8ll_BFu9i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9i_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu9i_BFu0i) C1{ FL:8 Fi:9 Fi:0}



static void Test_BFu8ll_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu9i_BFu0i");
    static BFu8ll_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9i_BFu0i(Test_BFu8ll_BFu9i_BFu0i, "BFu8ll_BFu9i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9i_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu9i_BFu0ll) C1{ FL:8 Fi:9 FL:0}



static void Test_BFu8ll_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu9i_BFu0ll");
    static BFu8ll_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9i_BFu0ll(Test_BFu8ll_BFu9i_BFu0ll, "BFu8ll_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9i_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu9i_BFu0s) C1{ FL:8 Fi:9 Fs:0}



static void Test_BFu8ll_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu9i_BFu0s");
    static BFu8ll_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9i_BFu0s(Test_BFu8ll_BFu9i_BFu0s, "BFu8ll_BFu9i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9ll_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu9ll_BFu0c) C1{ FL:8 FL:9 Fc:0}



static void Test_BFu8ll_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu9ll_BFu0c");
    static BFu8ll_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9ll_BFu0c(Test_BFu8ll_BFu9ll_BFu0c, "BFu8ll_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9ll_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu9ll_BFu0i) C1{ FL:8 FL:9 Fi:0}



static void Test_BFu8ll_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu9ll_BFu0i");
    static BFu8ll_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9ll_BFu0i(Test_BFu8ll_BFu9ll_BFu0i, "BFu8ll_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9ll_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu9ll_BFu0ll) C1{ FL:8 FL:9 FL:0}



static void Test_BFu8ll_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu9ll_BFu0ll");
    static BFu8ll_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9ll_BFu0ll(Test_BFu8ll_BFu9ll_BFu0ll, "BFu8ll_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9ll_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu9ll_BFu0s) C1{ FL:8 FL:9 Fs:0}



static void Test_BFu8ll_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu9ll_BFu0s");
    static BFu8ll_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8ll_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9ll_BFu0s(Test_BFu8ll_BFu9ll_BFu0s, "BFu8ll_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9s_BFu0c  {
  __tsu64 v1:8;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8ll_BFu9s_BFu0c) C1{ FL:8 Fs:9 Fc:0}



static void Test_BFu8ll_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu8ll_BFu9s_BFu0c");
    static BFu8ll_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9s_BFu0c(Test_BFu8ll_BFu9s_BFu0c, "BFu8ll_BFu9s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9s_BFu0i  {
  __tsu64 v1:8;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8ll_BFu9s_BFu0i) C1{ FL:8 Fs:9 Fi:0}



static void Test_BFu8ll_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu8ll_BFu9s_BFu0i");
    static BFu8ll_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8ll_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9s_BFu0i(Test_BFu8ll_BFu9s_BFu0i, "BFu8ll_BFu9s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9s_BFu0ll  {
  __tsu64 v1:8;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8ll_BFu9s_BFu0ll) C1{ FL:8 Fs:9 FL:0}



static void Test_BFu8ll_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu8ll_BFu9s_BFu0ll");
    static BFu8ll_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8ll_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9s_BFu0ll(Test_BFu8ll_BFu9s_BFu0ll, "BFu8ll_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_BFu9s_BFu0s  {
  __tsu64 v1:8;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8ll_BFu9s_BFu0s) C1{ FL:8 Fs:9 Fs:0}



static void Test_BFu8ll_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu8ll_BFu9s_BFu0s");
    static BFu8ll_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8ll_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8ll_BFu9s_BFu0s(Test_BFu8ll_BFu9s_BFu0s, "BFu8ll_BFu9s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_C_BFu0c  {
  __tsu64 v1:8;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_C_BFu0c) C1{ FL:8 Fc Fc:0}



static void Test_BFu8ll_C_BFu0c()
{
  {
    init_simple_test("BFu8ll_C_BFu0c");
    static BFu8ll_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_C_BFu0c");
    check_field_offset(lv, v2, 1, "BFu8ll_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_C_BFu0c(Test_BFu8ll_C_BFu0c, "BFu8ll_C_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_C_BFu0i  {
  __tsu64 v1:8;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_C_BFu0i) C1{ FL:8 Fc Fi:0}



static void Test_BFu8ll_C_BFu0i()
{
  {
    init_simple_test("BFu8ll_C_BFu0i");
    static BFu8ll_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_C_BFu0i");
    check_field_offset(lv, v2, 1, "BFu8ll_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_C_BFu0i(Test_BFu8ll_C_BFu0i, "BFu8ll_C_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_C_BFu0ll  {
  __tsu64 v1:8;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_C_BFu0ll) C1{ FL:8 Fc FL:0}



static void Test_BFu8ll_C_BFu0ll()
{
  {
    init_simple_test("BFu8ll_C_BFu0ll");
    static BFu8ll_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_C_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu8ll_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_C_BFu0ll(Test_BFu8ll_C_BFu0ll, "BFu8ll_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_C_BFu0s  {
  __tsu64 v1:8;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_C_BFu0s) C1{ FL:8 Fc Fs:0}



static void Test_BFu8ll_C_BFu0s()
{
  {
    init_simple_test("BFu8ll_C_BFu0s");
    static BFu8ll_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_C_BFu0s");
    check_field_offset(lv, v2, 1, "BFu8ll_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_C_BFu0s(Test_BFu8ll_C_BFu0s, "BFu8ll_C_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_D_BFu0c  {
  __tsu64 v1:8;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_D_BFu0c) C1{ FL:8 FL Fc:0}



static void Test_BFu8ll_D_BFu0c()
{
  {
    init_simple_test("BFu8ll_D_BFu0c");
    static BFu8ll_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_D_BFu0c(Test_BFu8ll_D_BFu0c, "BFu8ll_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_D_BFu0i  {
  __tsu64 v1:8;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_D_BFu0i) C1{ FL:8 FL Fi:0}



static void Test_BFu8ll_D_BFu0i()
{
  {
    init_simple_test("BFu8ll_D_BFu0i");
    static BFu8ll_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_D_BFu0i(Test_BFu8ll_D_BFu0i, "BFu8ll_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_D_BFu0ll  {
  __tsu64 v1:8;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_D_BFu0ll) C1{ FL:8 FL FL:0}



static void Test_BFu8ll_D_BFu0ll()
{
  {
    init_simple_test("BFu8ll_D_BFu0ll");
    static BFu8ll_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_D_BFu0ll(Test_BFu8ll_D_BFu0ll, "BFu8ll_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_D_BFu0s  {
  __tsu64 v1:8;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_D_BFu0s) C1{ FL:8 FL Fs:0}



static void Test_BFu8ll_D_BFu0s()
{
  {
    init_simple_test("BFu8ll_D_BFu0s");
    static BFu8ll_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_D_BFu0s(Test_BFu8ll_D_BFu0s, "BFu8ll_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_F_BFu0c  {
  __tsu64 v1:8;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_F_BFu0c) C1{ FL:8 Fi Fc:0}



static void Test_BFu8ll_F_BFu0c()
{
  {
    init_simple_test("BFu8ll_F_BFu0c");
    static BFu8ll_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8ll_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_F_BFu0c(Test_BFu8ll_F_BFu0c, "BFu8ll_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_F_BFu0i  {
  __tsu64 v1:8;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_F_BFu0i) C1{ FL:8 Fi Fi:0}



static void Test_BFu8ll_F_BFu0i()
{
  {
    init_simple_test("BFu8ll_F_BFu0i");
    static BFu8ll_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8ll_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_F_BFu0i(Test_BFu8ll_F_BFu0i, "BFu8ll_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_F_BFu0ll  {
  __tsu64 v1:8;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_F_BFu0ll) C1{ FL:8 Fi FL:0}



static void Test_BFu8ll_F_BFu0ll()
{
  {
    init_simple_test("BFu8ll_F_BFu0ll");
    static BFu8ll_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8ll_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_F_BFu0ll(Test_BFu8ll_F_BFu0ll, "BFu8ll_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_F_BFu0s  {
  __tsu64 v1:8;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_F_BFu0s) C1{ FL:8 Fi Fs:0}



static void Test_BFu8ll_F_BFu0s()
{
  {
    init_simple_test("BFu8ll_F_BFu0s");
    static BFu8ll_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8ll_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_F_BFu0s(Test_BFu8ll_F_BFu0s, "BFu8ll_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_I_BFu0c  {
  __tsu64 v1:8;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_I_BFu0c) C1{ FL:8 Fi Fc:0}



static void Test_BFu8ll_I_BFu0c()
{
  {
    init_simple_test("BFu8ll_I_BFu0c");
    static BFu8ll_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8ll_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_I_BFu0c(Test_BFu8ll_I_BFu0c, "BFu8ll_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_I_BFu0i  {
  __tsu64 v1:8;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_I_BFu0i) C1{ FL:8 Fi Fi:0}



static void Test_BFu8ll_I_BFu0i()
{
  {
    init_simple_test("BFu8ll_I_BFu0i");
    static BFu8ll_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8ll_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_I_BFu0i(Test_BFu8ll_I_BFu0i, "BFu8ll_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_I_BFu0ll  {
  __tsu64 v1:8;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_I_BFu0ll) C1{ FL:8 Fi FL:0}



static void Test_BFu8ll_I_BFu0ll()
{
  {
    init_simple_test("BFu8ll_I_BFu0ll");
    static BFu8ll_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8ll_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_I_BFu0ll(Test_BFu8ll_I_BFu0ll, "BFu8ll_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_I_BFu0s  {
  __tsu64 v1:8;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_I_BFu0s) C1{ FL:8 Fi Fs:0}



static void Test_BFu8ll_I_BFu0s()
{
  {
    init_simple_test("BFu8ll_I_BFu0s");
    static BFu8ll_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8ll_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_I_BFu0s(Test_BFu8ll_I_BFu0s, "BFu8ll_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ip_BFu0c  {
  __tsu64 v1:8;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_Ip_BFu0c) C1{ FL:8 Fp Fc:0}



static void Test_BFu8ll_Ip_BFu0c()
{
  {
    init_simple_test("BFu8ll_Ip_BFu0c");
    static BFu8ll_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ip_BFu0c(Test_BFu8ll_Ip_BFu0c, "BFu8ll_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ip_BFu0i  {
  __tsu64 v1:8;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_Ip_BFu0i) C1{ FL:8 Fp Fi:0}



static void Test_BFu8ll_Ip_BFu0i()
{
  {
    init_simple_test("BFu8ll_Ip_BFu0i");
    static BFu8ll_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ip_BFu0i(Test_BFu8ll_Ip_BFu0i, "BFu8ll_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ip_BFu0ll  {
  __tsu64 v1:8;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_Ip_BFu0ll) C1{ FL:8 Fp FL:0}



static void Test_BFu8ll_Ip_BFu0ll()
{
  {
    init_simple_test("BFu8ll_Ip_BFu0ll");
    static BFu8ll_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ip_BFu0ll(Test_BFu8ll_Ip_BFu0ll, "BFu8ll_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ip_BFu0s  {
  __tsu64 v1:8;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_Ip_BFu0s) C1{ FL:8 Fp Fs:0}



static void Test_BFu8ll_Ip_BFu0s()
{
  {
    init_simple_test("BFu8ll_Ip_BFu0s");
    static BFu8ll_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ip_BFu0s(Test_BFu8ll_Ip_BFu0s, "BFu8ll_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_L_BFu0c  {
  __tsu64 v1:8;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_L_BFu0c) C1{ FL:8 FL Fc:0}



static void Test_BFu8ll_L_BFu0c()
{
  {
    init_simple_test("BFu8ll_L_BFu0c");
    static BFu8ll_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_L_BFu0c(Test_BFu8ll_L_BFu0c, "BFu8ll_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_L_BFu0i  {
  __tsu64 v1:8;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_L_BFu0i) C1{ FL:8 FL Fi:0}



static void Test_BFu8ll_L_BFu0i()
{
  {
    init_simple_test("BFu8ll_L_BFu0i");
    static BFu8ll_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_L_BFu0i(Test_BFu8ll_L_BFu0i, "BFu8ll_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_L_BFu0ll  {
  __tsu64 v1:8;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_L_BFu0ll) C1{ FL:8 FL FL:0}



static void Test_BFu8ll_L_BFu0ll()
{
  {
    init_simple_test("BFu8ll_L_BFu0ll");
    static BFu8ll_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_L_BFu0ll(Test_BFu8ll_L_BFu0ll, "BFu8ll_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_L_BFu0s  {
  __tsu64 v1:8;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_L_BFu0s) C1{ FL:8 FL Fs:0}



static void Test_BFu8ll_L_BFu0s()
{
  {
    init_simple_test("BFu8ll_L_BFu0s");
    static BFu8ll_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_L_BFu0s(Test_BFu8ll_L_BFu0s, "BFu8ll_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_S_BFu0c  {
  __tsu64 v1:8;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_S_BFu0c) C1{ FL:8 Fs Fc:0}



static void Test_BFu8ll_S_BFu0c()
{
  {
    init_simple_test("BFu8ll_S_BFu0c");
    static BFu8ll_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu8ll_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_S_BFu0c(Test_BFu8ll_S_BFu0c, "BFu8ll_S_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_S_BFu0i  {
  __tsu64 v1:8;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_S_BFu0i) C1{ FL:8 Fs Fi:0}



static void Test_BFu8ll_S_BFu0i()
{
  {
    init_simple_test("BFu8ll_S_BFu0i");
    static BFu8ll_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu8ll_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_S_BFu0i(Test_BFu8ll_S_BFu0i, "BFu8ll_S_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_S_BFu0ll  {
  __tsu64 v1:8;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_S_BFu0ll) C1{ FL:8 Fs FL:0}



static void Test_BFu8ll_S_BFu0ll()
{
  {
    init_simple_test("BFu8ll_S_BFu0ll");
    static BFu8ll_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu8ll_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_S_BFu0ll(Test_BFu8ll_S_BFu0ll, "BFu8ll_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_S_BFu0s  {
  __tsu64 v1:8;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_S_BFu0s) C1{ FL:8 Fs Fs:0}



static void Test_BFu8ll_S_BFu0s()
{
  {
    init_simple_test("BFu8ll_S_BFu0s");
    static BFu8ll_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu8ll_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_S_BFu0s(Test_BFu8ll_S_BFu0s, "BFu8ll_S_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Uc_BFu0c  {
  __tsu64 v1:8;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_Uc_BFu0c) C1{ FL:8 Fc Fc:0}



static void Test_BFu8ll_Uc_BFu0c()
{
  {
    init_simple_test("BFu8ll_Uc_BFu0c");
    static BFu8ll_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Uc_BFu0c");
    check_field_offset(lv, v2, 1, "BFu8ll_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Uc_BFu0c(Test_BFu8ll_Uc_BFu0c, "BFu8ll_Uc_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Uc_BFu0i  {
  __tsu64 v1:8;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_Uc_BFu0i) C1{ FL:8 Fc Fi:0}



static void Test_BFu8ll_Uc_BFu0i()
{
  {
    init_simple_test("BFu8ll_Uc_BFu0i");
    static BFu8ll_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Uc_BFu0i");
    check_field_offset(lv, v2, 1, "BFu8ll_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Uc_BFu0i(Test_BFu8ll_Uc_BFu0i, "BFu8ll_Uc_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Uc_BFu0ll  {
  __tsu64 v1:8;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_Uc_BFu0ll) C1{ FL:8 Fc FL:0}



static void Test_BFu8ll_Uc_BFu0ll()
{
  {
    init_simple_test("BFu8ll_Uc_BFu0ll");
    static BFu8ll_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Uc_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu8ll_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Uc_BFu0ll(Test_BFu8ll_Uc_BFu0ll, "BFu8ll_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Uc_BFu0s  {
  __tsu64 v1:8;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_Uc_BFu0s) C1{ FL:8 Fc Fs:0}



static void Test_BFu8ll_Uc_BFu0s()
{
  {
    init_simple_test("BFu8ll_Uc_BFu0s");
    static BFu8ll_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Uc_BFu0s");
    check_field_offset(lv, v2, 1, "BFu8ll_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Uc_BFu0s(Test_BFu8ll_Uc_BFu0s, "BFu8ll_Uc_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ui_BFu0c  {
  __tsu64 v1:8;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_Ui_BFu0c) C1{ FL:8 Fi Fc:0}



static void Test_BFu8ll_Ui_BFu0c()
{
  {
    init_simple_test("BFu8ll_Ui_BFu0c");
    static BFu8ll_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ui_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8ll_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ui_BFu0c(Test_BFu8ll_Ui_BFu0c, "BFu8ll_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ui_BFu0i  {
  __tsu64 v1:8;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_Ui_BFu0i) C1{ FL:8 Fi Fi:0}



static void Test_BFu8ll_Ui_BFu0i()
{
  {
    init_simple_test("BFu8ll_Ui_BFu0i");
    static BFu8ll_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ui_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8ll_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ui_BFu0i(Test_BFu8ll_Ui_BFu0i, "BFu8ll_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ui_BFu0ll  {
  __tsu64 v1:8;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_Ui_BFu0ll) C1{ FL:8 Fi FL:0}



static void Test_BFu8ll_Ui_BFu0ll()
{
  {
    init_simple_test("BFu8ll_Ui_BFu0ll");
    static BFu8ll_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ui_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8ll_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ui_BFu0ll(Test_BFu8ll_Ui_BFu0ll, "BFu8ll_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ui_BFu0s  {
  __tsu64 v1:8;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_Ui_BFu0s) C1{ FL:8 Fi Fs:0}



static void Test_BFu8ll_Ui_BFu0s()
{
  {
    init_simple_test("BFu8ll_Ui_BFu0s");
    static BFu8ll_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8ll_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ui_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8ll_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ui_BFu0s(Test_BFu8ll_Ui_BFu0s, "BFu8ll_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ul_BFu0c  {
  __tsu64 v1:8;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_Ul_BFu0c) C1{ FL:8 FL Fc:0}



static void Test_BFu8ll_Ul_BFu0c()
{
  {
    init_simple_test("BFu8ll_Ul_BFu0c");
    static BFu8ll_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ul_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ul_BFu0c(Test_BFu8ll_Ul_BFu0c, "BFu8ll_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ul_BFu0i  {
  __tsu64 v1:8;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_Ul_BFu0i) C1{ FL:8 FL Fi:0}



static void Test_BFu8ll_Ul_BFu0i()
{
  {
    init_simple_test("BFu8ll_Ul_BFu0i");
    static BFu8ll_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ul_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ul_BFu0i(Test_BFu8ll_Ul_BFu0i, "BFu8ll_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ul_BFu0ll  {
  __tsu64 v1:8;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_Ul_BFu0ll) C1{ FL:8 FL FL:0}



static void Test_BFu8ll_Ul_BFu0ll()
{
  {
    init_simple_test("BFu8ll_Ul_BFu0ll");
    static BFu8ll_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ul_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ul_BFu0ll(Test_BFu8ll_Ul_BFu0ll, "BFu8ll_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Ul_BFu0s  {
  __tsu64 v1:8;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_Ul_BFu0s) C1{ FL:8 FL Fs:0}



static void Test_BFu8ll_Ul_BFu0s()
{
  {
    init_simple_test("BFu8ll_Ul_BFu0s");
    static BFu8ll_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8ll_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Ul_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Ul_BFu0s(Test_BFu8ll_Ul_BFu0s, "BFu8ll_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Us_BFu0c  {
  __tsu64 v1:8;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_Us_BFu0c) C1{ FL:8 Fs Fc:0}



static void Test_BFu8ll_Us_BFu0c()
{
  {
    init_simple_test("BFu8ll_Us_BFu0c");
    static BFu8ll_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Us_BFu0c");
    check_field_offset(lv, v2, 2, "BFu8ll_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Us_BFu0c(Test_BFu8ll_Us_BFu0c, "BFu8ll_Us_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Us_BFu0i  {
  __tsu64 v1:8;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_Us_BFu0i) C1{ FL:8 Fs Fi:0}



static void Test_BFu8ll_Us_BFu0i()
{
  {
    init_simple_test("BFu8ll_Us_BFu0i");
    static BFu8ll_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Us_BFu0i");
    check_field_offset(lv, v2, 2, "BFu8ll_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Us_BFu0i(Test_BFu8ll_Us_BFu0i, "BFu8ll_Us_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Us_BFu0ll  {
  __tsu64 v1:8;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_Us_BFu0ll) C1{ FL:8 Fs FL:0}



static void Test_BFu8ll_Us_BFu0ll()
{
  {
    init_simple_test("BFu8ll_Us_BFu0ll");
    static BFu8ll_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Us_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu8ll_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Us_BFu0ll(Test_BFu8ll_Us_BFu0ll, "BFu8ll_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Us_BFu0s  {
  __tsu64 v1:8;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_Us_BFu0s) C1{ FL:8 Fs Fs:0}



static void Test_BFu8ll_Us_BFu0s()
{
  {
    init_simple_test("BFu8ll_Us_BFu0s");
    static BFu8ll_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8ll_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Us_BFu0s");
    check_field_offset(lv, v2, 2, "BFu8ll_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Us_BFu0s(Test_BFu8ll_Us_BFu0s, "BFu8ll_Us_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Vp_BFu0c  {
  __tsu64 v1:8;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu8ll_Vp_BFu0c) C1{ FL:8 Fp Fc:0}



static void Test_BFu8ll_Vp_BFu0c()
{
  {
    init_simple_test("BFu8ll_Vp_BFu0c");
    static BFu8ll_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Vp_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Vp_BFu0c(Test_BFu8ll_Vp_BFu0c, "BFu8ll_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Vp_BFu0i  {
  __tsu64 v1:8;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu8ll_Vp_BFu0i) C1{ FL:8 Fp Fi:0}



static void Test_BFu8ll_Vp_BFu0i()
{
  {
    init_simple_test("BFu8ll_Vp_BFu0i");
    static BFu8ll_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Vp_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Vp_BFu0i(Test_BFu8ll_Vp_BFu0i, "BFu8ll_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Vp_BFu0ll  {
  __tsu64 v1:8;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu8ll_Vp_BFu0ll) C1{ FL:8 Fp FL:0}



static void Test_BFu8ll_Vp_BFu0ll()
{
  {
    init_simple_test("BFu8ll_Vp_BFu0ll");
    static BFu8ll_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Vp_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Vp_BFu0ll(Test_BFu8ll_Vp_BFu0ll, "BFu8ll_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8ll_Vp_BFu0s  {
  __tsu64 v1:8;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu8ll_Vp_BFu0s) C1{ FL:8 Fp Fs:0}



static void Test_BFu8ll_Vp_BFu0s()
{
  {
    init_simple_test("BFu8ll_Vp_BFu0s");
    static BFu8ll_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8ll_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8ll_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8ll_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8ll_Vp_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8ll_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8ll_Vp_BFu0s(Test_BFu8ll_Vp_BFu0s, "BFu8ll_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c  {
  unsigned short v1:8;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu0c) C1{ Fs:8 Fc:0}



static void Test_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu0c");
    static BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c(Test_BFu8s_BFu0c, "BFu8s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu0c  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu0c_BFu0c) C1{ Fs:8 Fc:0 Fc:0}



static void Test_BFu8s_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu0c");
    static BFu8s_BFu0c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu0c(Test_BFu8s_BFu0c_BFu0c, "BFu8s_BFu0c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu0i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu0c_BFu0i) C1{ Fs:8 Fc:0 Fi:0}



static void Test_BFu8s_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu0i");
    static BFu8s_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu0i(Test_BFu8s_BFu0c_BFu0i, "BFu8s_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu0ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu0c_BFu0ll) C1{ Fs:8 Fc:0 FL:0}



static void Test_BFu8s_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu0ll");
    static BFu8s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu0ll(Test_BFu8s_BFu0c_BFu0ll, "BFu8s_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu0s  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu0c_BFu0s) C1{ Fs:8 Fc:0 Fs:0}



static void Test_BFu8s_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu0s");
    static BFu8s_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu0s(Test_BFu8s_BFu0c_BFu0s, "BFu8s_BFu0c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu15i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8s_BFu0c_BFu15i) C1{ Fs:8 Fc:0 Fi:15}



static void Test_BFu8s_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu15i");
    static BFu8s_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu15i(Test_BFu8s_BFu0c_BFu15i, "BFu8s_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu15ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8s_BFu0c_BFu15ll) C1{ Fs:8 Fc:0 FL:15}



static void Test_BFu8s_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu15ll");
    static BFu8s_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu15ll(Test_BFu8s_BFu0c_BFu15ll, "BFu8s_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu15s  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8s_BFu0c_BFu15s) C1{ Fs:8 Fc:0 Fs:15}



static void Test_BFu8s_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu15s");
    static BFu8s_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8s_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu15s(Test_BFu8s_BFu0c_BFu15s, "BFu8s_BFu0c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu16i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8s_BFu0c_BFu16i) C1{ Fs:8 Fc:0 Fi:16}



static void Test_BFu8s_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu16i");
    static BFu8s_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu16i(Test_BFu8s_BFu0c_BFu16i, "BFu8s_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu16ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8s_BFu0c_BFu16ll) C1{ Fs:8 Fc:0 FL:16}



static void Test_BFu8s_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu16ll");
    static BFu8s_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu16ll(Test_BFu8s_BFu0c_BFu16ll, "BFu8s_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu16s  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8s_BFu0c_BFu16s) C1{ Fs:8 Fc:0 Fs:16}



static void Test_BFu8s_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu16s");
    static BFu8s_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8s_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu16s(Test_BFu8s_BFu0c_BFu16s, "BFu8s_BFu0c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu17i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8s_BFu0c_BFu17i) C1{ Fs:8 Fc:0 Fi:17}



static void Test_BFu8s_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu17i");
    static BFu8s_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu17i(Test_BFu8s_BFu0c_BFu17i, "BFu8s_BFu0c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu17ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8s_BFu0c_BFu17ll) C1{ Fs:8 Fc:0 FL:17}



static void Test_BFu8s_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu17ll");
    static BFu8s_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu17ll(Test_BFu8s_BFu0c_BFu17ll, "BFu8s_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu1c  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8s_BFu0c_BFu1c) C1{ Fs:8 Fc:0 Fc:1}



static void Test_BFu8s_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu1c");
    static BFu8s_BFu0c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu1c(Test_BFu8s_BFu0c_BFu1c, "BFu8s_BFu0c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu1i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8s_BFu0c_BFu1i) C1{ Fs:8 Fc:0 Fi:1}



static void Test_BFu8s_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu1i");
    static BFu8s_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu1i(Test_BFu8s_BFu0c_BFu1i, "BFu8s_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu1ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8s_BFu0c_BFu1ll) C1{ Fs:8 Fc:0 FL:1}



static void Test_BFu8s_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu1ll");
    static BFu8s_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu1ll(Test_BFu8s_BFu0c_BFu1ll, "BFu8s_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu1s  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8s_BFu0c_BFu1s) C1{ Fs:8 Fc:0 Fs:1}



static void Test_BFu8s_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu1s");
    static BFu8s_BFu0c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu1s(Test_BFu8s_BFu0c_BFu1s, "BFu8s_BFu0c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu31i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8s_BFu0c_BFu31i) C1{ Fs:8 Fc:0 Fi:31}



static void Test_BFu8s_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu31i");
    static BFu8s_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8s_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu31i(Test_BFu8s_BFu0c_BFu31i, "BFu8s_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu31ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8s_BFu0c_BFu31ll) C1{ Fs:8 Fc:0 FL:31}



static void Test_BFu8s_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu31ll");
    static BFu8s_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu31ll(Test_BFu8s_BFu0c_BFu31ll, "BFu8s_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu32i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8s_BFu0c_BFu32i) C1{ Fs:8 Fc:0 Fi:32}



static void Test_BFu8s_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu32i");
    static BFu8s_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8s_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu32i(Test_BFu8s_BFu0c_BFu32i, "BFu8s_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu32ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8s_BFu0c_BFu32ll) C1{ Fs:8 Fc:0 FL:32}



static void Test_BFu8s_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu32ll");
    static BFu8s_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu32ll(Test_BFu8s_BFu0c_BFu32ll, "BFu8s_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu33  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8s_BFu0c_BFu33) C1{ Fs:8 Fc:0 FL:33}



static void Test_BFu8s_BFu0c_BFu33()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu33");
    static BFu8s_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8s_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8s_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu33(Test_BFu8s_BFu0c_BFu33, "BFu8s_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu7c  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8s_BFu0c_BFu7c) C1{ Fs:8 Fc:0 Fc:7}



static void Test_BFu8s_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu7c");
    static BFu8s_BFu0c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu7c(Test_BFu8s_BFu0c_BFu7c, "BFu8s_BFu0c_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu7i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8s_BFu0c_BFu7i) C1{ Fs:8 Fc:0 Fi:7}



static void Test_BFu8s_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu7i");
    static BFu8s_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu7i(Test_BFu8s_BFu0c_BFu7i, "BFu8s_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu7ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8s_BFu0c_BFu7ll) C1{ Fs:8 Fc:0 FL:7}



static void Test_BFu8s_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu7ll");
    static BFu8s_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu7ll(Test_BFu8s_BFu0c_BFu7ll, "BFu8s_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu7s  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8s_BFu0c_BFu7s) C1{ Fs:8 Fc:0 Fs:7}



static void Test_BFu8s_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu7s");
    static BFu8s_BFu0c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu7s(Test_BFu8s_BFu0c_BFu7s, "BFu8s_BFu0c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu8c  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8s_BFu0c_BFu8c) C1{ Fs:8 Fc:0 Fc:8}



static void Test_BFu8s_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu8c");
    static BFu8s_BFu0c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu8c(Test_BFu8s_BFu0c_BFu8c, "BFu8s_BFu0c_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu8i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8s_BFu0c_BFu8i) C1{ Fs:8 Fc:0 Fi:8}



static void Test_BFu8s_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu8i");
    static BFu8s_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu8i(Test_BFu8s_BFu0c_BFu8i, "BFu8s_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu8ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8s_BFu0c_BFu8ll) C1{ Fs:8 Fc:0 FL:8}



static void Test_BFu8s_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu8ll");
    static BFu8s_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu8ll(Test_BFu8s_BFu0c_BFu8ll, "BFu8s_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu8s  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8s_BFu0c_BFu8s) C1{ Fs:8 Fc:0 Fs:8}



static void Test_BFu8s_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu8s");
    static BFu8s_BFu0c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu8s(Test_BFu8s_BFu0c_BFu8s, "BFu8s_BFu0c_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu9i  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8s_BFu0c_BFu9i) C1{ Fs:8 Fc:0 Fi:9}



static void Test_BFu8s_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu9i");
    static BFu8s_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu9i(Test_BFu8s_BFu0c_BFu9i, "BFu8s_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu9ll  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8s_BFu0c_BFu9ll) C1{ Fs:8 Fc:0 FL:9}



static void Test_BFu8s_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu9ll");
    static BFu8s_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu9ll(Test_BFu8s_BFu0c_BFu9ll, "BFu8s_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_BFu9s  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8s_BFu0c_BFu9s) C1{ Fs:8 Fc:0 Fs:9}



static void Test_BFu8s_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu8s_BFu0c_BFu9s");
    static BFu8s_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8s_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_BFu9s(Test_BFu8s_BFu0c_BFu9s, "BFu8s_BFu0c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_C  {
  unsigned short v1:8;
  unsigned char  :0;
  char v2;
};
//SIG(1 BFu8s_BFu0c_C) C1{ Fs:8 Fc:0 Fc}



static void Test_BFu8s_BFu0c_C()
{
  {
    init_simple_test("BFu8s_BFu0c_C");
    static BFu8s_BFu0c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_C");
    check_field_offset(lv, v2, 1, "BFu8s_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_C(Test_BFu8s_BFu0c_C, "BFu8s_BFu0c_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_D  {
  unsigned short v1:8;
  unsigned char  :0;
  double v2;
};
//SIG(1 BFu8s_BFu0c_D) C1{ Fs:8 Fc:0 FL}



static void Test_BFu8s_BFu0c_D()
{
  {
    init_simple_test("BFu8s_BFu0c_D");
    static BFu8s_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_D(Test_BFu8s_BFu0c_D, "BFu8s_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_F  {
  unsigned short v1:8;
  unsigned char  :0;
  float v2;
};
//SIG(1 BFu8s_BFu0c_F) C1{ Fs:8 Fc:0 Fi}



static void Test_BFu8s_BFu0c_F()
{
  {
    init_simple_test("BFu8s_BFu0c_F");
    static BFu8s_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_F");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_F(Test_BFu8s_BFu0c_F, "BFu8s_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_I  {
  unsigned short v1:8;
  unsigned char  :0;
  int v2;
};
//SIG(1 BFu8s_BFu0c_I) C1{ Fs:8 Fc:0 Fi}



static void Test_BFu8s_BFu0c_I()
{
  {
    init_simple_test("BFu8s_BFu0c_I");
    static BFu8s_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_I");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_I(Test_BFu8s_BFu0c_I, "BFu8s_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_Ip  {
  unsigned short v1:8;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu8s_BFu0c_Ip) C1{ Fs:8 Fc:0 Fp}



static void Test_BFu8s_BFu0c_Ip()
{
  {
    init_simple_test("BFu8s_BFu0c_Ip");
    static BFu8s_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_Ip(Test_BFu8s_BFu0c_Ip, "BFu8s_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_L  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 BFu8s_BFu0c_L) C1{ Fs:8 Fc:0 FL}



static void Test_BFu8s_BFu0c_L()
{
  {
    init_simple_test("BFu8s_BFu0c_L");
    static BFu8s_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_L(Test_BFu8s_BFu0c_L, "BFu8s_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_S  {
  unsigned short v1:8;
  unsigned char  :0;
  short v2;
};
//SIG(1 BFu8s_BFu0c_S) C1{ Fs:8 Fc:0 Fs}



static void Test_BFu8s_BFu0c_S()
{
  {
    init_simple_test("BFu8s_BFu0c_S");
    static BFu8s_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_S");
    check_field_offset(lv, v2, 2, "BFu8s_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_S(Test_BFu8s_BFu0c_S, "BFu8s_BFu0c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_Uc  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 BFu8s_BFu0c_Uc) C1{ Fs:8 Fc:0 Fc}



static void Test_BFu8s_BFu0c_Uc()
{
  {
    init_simple_test("BFu8s_BFu0c_Uc");
    static BFu8s_BFu0c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_Uc");
    check_field_offset(lv, v2, 1, "BFu8s_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_Uc(Test_BFu8s_BFu0c_Uc, "BFu8s_BFu0c_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_Ui  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 BFu8s_BFu0c_Ui) C1{ Fs:8 Fc:0 Fi}



static void Test_BFu8s_BFu0c_Ui()
{
  {
    init_simple_test("BFu8s_BFu0c_Ui");
    static BFu8s_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_Ui");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_Ui(Test_BFu8s_BFu0c_Ui, "BFu8s_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_Ul  {
  unsigned short v1:8;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 BFu8s_BFu0c_Ul) C1{ Fs:8 Fc:0 FL}



static void Test_BFu8s_BFu0c_Ul()
{
  {
    init_simple_test("BFu8s_BFu0c_Ul");
    static BFu8s_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_Ul(Test_BFu8s_BFu0c_Ul, "BFu8s_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_Us  {
  unsigned short v1:8;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 BFu8s_BFu0c_Us) C1{ Fs:8 Fc:0 Fs}



static void Test_BFu8s_BFu0c_Us()
{
  {
    init_simple_test("BFu8s_BFu0c_Us");
    static BFu8s_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_Us");
    check_field_offset(lv, v2, 2, "BFu8s_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_Us(Test_BFu8s_BFu0c_Us, "BFu8s_BFu0c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0c_Vp  {
  unsigned short v1:8;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu8s_BFu0c_Vp) C1{ Fs:8 Fc:0 Fp}



static void Test_BFu8s_BFu0c_Vp()
{
  {
    init_simple_test("BFu8s_BFu0c_Vp");
    static BFu8s_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0c_Vp(Test_BFu8s_BFu0c_Vp, "BFu8s_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i  {
  unsigned short v1:8;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu0i) C1{ Fs:8 Fi:0}



static void Test_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu0i");
    static BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i(Test_BFu8s_BFu0i, "BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu0c  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu0i_BFu0c) C1{ Fs:8 Fi:0 Fc:0}



static void Test_BFu8s_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu0c");
    static BFu8s_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu0c(Test_BFu8s_BFu0i_BFu0c, "BFu8s_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu0i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu0i_BFu0i) C1{ Fs:8 Fi:0 Fi:0}



static void Test_BFu8s_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu0i");
    static BFu8s_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu0i(Test_BFu8s_BFu0i_BFu0i, "BFu8s_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu0ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu0i_BFu0ll) C1{ Fs:8 Fi:0 FL:0}



static void Test_BFu8s_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu0ll");
    static BFu8s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu0ll(Test_BFu8s_BFu0i_BFu0ll, "BFu8s_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu0s  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu0i_BFu0s) C1{ Fs:8 Fi:0 Fs:0}



static void Test_BFu8s_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu0s");
    static BFu8s_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu0s(Test_BFu8s_BFu0i_BFu0s, "BFu8s_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu15i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8s_BFu0i_BFu15i) C1{ Fs:8 Fi:0 Fi:15}



static void Test_BFu8s_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu15i");
    static BFu8s_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8s_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu15i(Test_BFu8s_BFu0i_BFu15i, "BFu8s_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu15ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8s_BFu0i_BFu15ll) C1{ Fs:8 Fi:0 FL:15}



static void Test_BFu8s_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu15ll");
    static BFu8s_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu15ll(Test_BFu8s_BFu0i_BFu15ll, "BFu8s_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu15s  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8s_BFu0i_BFu15s) C1{ Fs:8 Fi:0 Fs:15}



static void Test_BFu8s_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu15s");
    static BFu8s_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu8s_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu15s(Test_BFu8s_BFu0i_BFu15s, "BFu8s_BFu0i_BFu15s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu16i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8s_BFu0i_BFu16i) C1{ Fs:8 Fi:0 Fi:16}



static void Test_BFu8s_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu16i");
    static BFu8s_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8s_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu16i(Test_BFu8s_BFu0i_BFu16i, "BFu8s_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu16ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8s_BFu0i_BFu16ll) C1{ Fs:8 Fi:0 FL:16}



static void Test_BFu8s_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu16ll");
    static BFu8s_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu16ll(Test_BFu8s_BFu0i_BFu16ll, "BFu8s_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu16s  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8s_BFu0i_BFu16s) C1{ Fs:8 Fi:0 Fs:16}



static void Test_BFu8s_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu16s");
    static BFu8s_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu8s_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu16s(Test_BFu8s_BFu0i_BFu16s, "BFu8s_BFu0i_BFu16s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu17i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8s_BFu0i_BFu17i) C1{ Fs:8 Fi:0 Fi:17}



static void Test_BFu8s_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu17i");
    static BFu8s_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8s_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu17i(Test_BFu8s_BFu0i_BFu17i, "BFu8s_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu17ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8s_BFu0i_BFu17ll) C1{ Fs:8 Fi:0 FL:17}



static void Test_BFu8s_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu17ll");
    static BFu8s_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu17ll(Test_BFu8s_BFu0i_BFu17ll, "BFu8s_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu1c  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8s_BFu0i_BFu1c) C1{ Fs:8 Fi:0 Fc:1}



static void Test_BFu8s_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu1c");
    static BFu8s_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8s_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu1c(Test_BFu8s_BFu0i_BFu1c, "BFu8s_BFu0i_BFu1c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu1i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8s_BFu0i_BFu1i) C1{ Fs:8 Fi:0 Fi:1}



static void Test_BFu8s_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu1i");
    static BFu8s_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8s_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu1i(Test_BFu8s_BFu0i_BFu1i, "BFu8s_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu1ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8s_BFu0i_BFu1ll) C1{ Fs:8 Fi:0 FL:1}



static void Test_BFu8s_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu1ll");
    static BFu8s_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8s_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu1ll(Test_BFu8s_BFu0i_BFu1ll, "BFu8s_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu1s  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8s_BFu0i_BFu1s) C1{ Fs:8 Fi:0 Fs:1}



static void Test_BFu8s_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu1s");
    static BFu8s_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu8s_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu1s(Test_BFu8s_BFu0i_BFu1s, "BFu8s_BFu0i_BFu1s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu31i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8s_BFu0i_BFu31i) C1{ Fs:8 Fi:0 Fi:31}



static void Test_BFu8s_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu31i");
    static BFu8s_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8s_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu31i(Test_BFu8s_BFu0i_BFu31i, "BFu8s_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu31ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8s_BFu0i_BFu31ll) C1{ Fs:8 Fi:0 FL:31}



static void Test_BFu8s_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu31ll");
    static BFu8s_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu31ll(Test_BFu8s_BFu0i_BFu31ll, "BFu8s_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu32i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8s_BFu0i_BFu32i) C1{ Fs:8 Fi:0 Fi:32}



static void Test_BFu8s_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu32i");
    static BFu8s_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8s_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu32i(Test_BFu8s_BFu0i_BFu32i, "BFu8s_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu32ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8s_BFu0i_BFu32ll) C1{ Fs:8 Fi:0 FL:32}



static void Test_BFu8s_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu32ll");
    static BFu8s_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu32ll(Test_BFu8s_BFu0i_BFu32ll, "BFu8s_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu33  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8s_BFu0i_BFu33) C1{ Fs:8 Fi:0 FL:33}



static void Test_BFu8s_BFu0i_BFu33()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu33");
    static BFu8s_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu8s_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu8s_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu33(Test_BFu8s_BFu0i_BFu33, "BFu8s_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu7c  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8s_BFu0i_BFu7c) C1{ Fs:8 Fi:0 Fc:7}



static void Test_BFu8s_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu7c");
    static BFu8s_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8s_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu7c(Test_BFu8s_BFu0i_BFu7c, "BFu8s_BFu0i_BFu7c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu7i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8s_BFu0i_BFu7i) C1{ Fs:8 Fi:0 Fi:7}



static void Test_BFu8s_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu7i");
    static BFu8s_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8s_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu7i(Test_BFu8s_BFu0i_BFu7i, "BFu8s_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu7ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8s_BFu0i_BFu7ll) C1{ Fs:8 Fi:0 FL:7}



static void Test_BFu8s_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu7ll");
    static BFu8s_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu7ll(Test_BFu8s_BFu0i_BFu7ll, "BFu8s_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu7s  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8s_BFu0i_BFu7s) C1{ Fs:8 Fi:0 Fs:7}



static void Test_BFu8s_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu7s");
    static BFu8s_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu8s_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu7s(Test_BFu8s_BFu0i_BFu7s, "BFu8s_BFu0i_BFu7s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu8c  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8s_BFu0i_BFu8c) C1{ Fs:8 Fi:0 Fc:8}



static void Test_BFu8s_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu8c");
    static BFu8s_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8s_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu8c(Test_BFu8s_BFu0i_BFu8c, "BFu8s_BFu0i_BFu8c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu8i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8s_BFu0i_BFu8i) C1{ Fs:8 Fi:0 Fi:8}



static void Test_BFu8s_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu8i");
    static BFu8s_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8s_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu8i(Test_BFu8s_BFu0i_BFu8i, "BFu8s_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu8ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8s_BFu0i_BFu8ll) C1{ Fs:8 Fi:0 FL:8}



static void Test_BFu8s_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu8ll");
    static BFu8s_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu8ll(Test_BFu8s_BFu0i_BFu8ll, "BFu8s_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu8s  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8s_BFu0i_BFu8s) C1{ Fs:8 Fi:0 Fs:8}



static void Test_BFu8s_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu8s");
    static BFu8s_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu8s_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu8s(Test_BFu8s_BFu0i_BFu8s, "BFu8s_BFu0i_BFu8s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu9i  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8s_BFu0i_BFu9i) C1{ Fs:8 Fi:0 Fi:9}



static void Test_BFu8s_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu9i");
    static BFu8s_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8s_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu9i(Test_BFu8s_BFu0i_BFu9i, "BFu8s_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu9ll  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8s_BFu0i_BFu9ll) C1{ Fs:8 Fi:0 FL:9}



static void Test_BFu8s_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu9ll");
    static BFu8s_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu9ll(Test_BFu8s_BFu0i_BFu9ll, "BFu8s_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_BFu9s  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8s_BFu0i_BFu9s) C1{ Fs:8 Fi:0 Fs:9}



static void Test_BFu8s_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu8s_BFu0i_BFu9s");
    static BFu8s_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu8s_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_BFu9s(Test_BFu8s_BFu0i_BFu9s, "BFu8s_BFu0i_BFu9s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_C  {
  unsigned short v1:8;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu8s_BFu0i_C) C1{ Fs:8 Fi:0 Fc}



static void Test_BFu8s_BFu0i_C()
{
  {
    init_simple_test("BFu8s_BFu0i_C");
    static BFu8s_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_C(Test_BFu8s_BFu0i_C, "BFu8s_BFu0i_C", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_D  {
  unsigned short v1:8;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu8s_BFu0i_D) C1{ Fs:8 Fi:0 FL}



static void Test_BFu8s_BFu0i_D()
{
  {
    init_simple_test("BFu8s_BFu0i_D");
    static BFu8s_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_D(Test_BFu8s_BFu0i_D, "BFu8s_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_F  {
  unsigned short v1:8;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu8s_BFu0i_F) C1{ Fs:8 Fi:0 Fi}



static void Test_BFu8s_BFu0i_F()
{
  {
    init_simple_test("BFu8s_BFu0i_F");
    static BFu8s_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_F(Test_BFu8s_BFu0i_F, "BFu8s_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_I  {
  unsigned short v1:8;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu8s_BFu0i_I) C1{ Fs:8 Fi:0 Fi}



static void Test_BFu8s_BFu0i_I()
{
  {
    init_simple_test("BFu8s_BFu0i_I");
    static BFu8s_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_I(Test_BFu8s_BFu0i_I, "BFu8s_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_Ip  {
  unsigned short v1:8;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu8s_BFu0i_Ip) C1{ Fs:8 Fi:0 Fp}



static void Test_BFu8s_BFu0i_Ip()
{
  {
    init_simple_test("BFu8s_BFu0i_Ip");
    static BFu8s_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_Ip(Test_BFu8s_BFu0i_Ip, "BFu8s_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_L  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu8s_BFu0i_L) C1{ Fs:8 Fi:0 FL}



static void Test_BFu8s_BFu0i_L()
{
  {
    init_simple_test("BFu8s_BFu0i_L");
    static BFu8s_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_L(Test_BFu8s_BFu0i_L, "BFu8s_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_S  {
  unsigned short v1:8;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu8s_BFu0i_S) C1{ Fs:8 Fi:0 Fs}



static void Test_BFu8s_BFu0i_S()
{
  {
    init_simple_test("BFu8s_BFu0i_S");
    static BFu8s_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_S(Test_BFu8s_BFu0i_S, "BFu8s_BFu0i_S", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_Uc  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu8s_BFu0i_Uc) C1{ Fs:8 Fi:0 Fc}



static void Test_BFu8s_BFu0i_Uc()
{
  {
    init_simple_test("BFu8s_BFu0i_Uc");
    static BFu8s_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_Uc(Test_BFu8s_BFu0i_Uc, "BFu8s_BFu0i_Uc", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_Ui  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu8s_BFu0i_Ui) C1{ Fs:8 Fi:0 Fi}



static void Test_BFu8s_BFu0i_Ui()
{
  {
    init_simple_test("BFu8s_BFu0i_Ui");
    static BFu8s_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_Ui(Test_BFu8s_BFu0i_Ui, "BFu8s_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_Ul  {
  unsigned short v1:8;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu8s_BFu0i_Ul) C1{ Fs:8 Fi:0 FL}



static void Test_BFu8s_BFu0i_Ul()
{
  {
    init_simple_test("BFu8s_BFu0i_Ul");
    static BFu8s_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_Ul(Test_BFu8s_BFu0i_Ul, "BFu8s_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_Us  {
  unsigned short v1:8;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu8s_BFu0i_Us) C1{ Fs:8 Fi:0 Fs}



static void Test_BFu8s_BFu0i_Us()
{
  {
    init_simple_test("BFu8s_BFu0i_Us");
    static BFu8s_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu8s_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_Us(Test_BFu8s_BFu0i_Us, "BFu8s_BFu0i_Us", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0i_Vp  {
  unsigned short v1:8;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu8s_BFu0i_Vp) C1{ Fs:8 Fi:0 Fp}



static void Test_BFu8s_BFu0i_Vp()
{
  {
    init_simple_test("BFu8s_BFu0i_Vp");
    static BFu8s_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0i_Vp(Test_BFu8s_BFu0i_Vp, "BFu8s_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll  {
  unsigned short v1:8;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu0ll) C1{ Fs:8 FL:0}



static void Test_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu0ll");
    static BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll(Test_BFu8s_BFu0ll, "BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu0c  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu0ll_BFu0c) C1{ Fs:8 FL:0 Fc:0}



static void Test_BFu8s_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu0c");
    static BFu8s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu0c(Test_BFu8s_BFu0ll_BFu0c, "BFu8s_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu0i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu0ll_BFu0i) C1{ Fs:8 FL:0 Fi:0}



static void Test_BFu8s_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu0i");
    static BFu8s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu0i(Test_BFu8s_BFu0ll_BFu0i, "BFu8s_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu0ll_BFu0ll) C1{ Fs:8 FL:0 FL:0}



static void Test_BFu8s_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu0ll");
    static BFu8s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu0ll(Test_BFu8s_BFu0ll_BFu0ll, "BFu8s_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu0s  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu0ll_BFu0s) C1{ Fs:8 FL:0 Fs:0}



static void Test_BFu8s_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu0s");
    static BFu8s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu0s(Test_BFu8s_BFu0ll_BFu0s, "BFu8s_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu15i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8s_BFu0ll_BFu15i) C1{ Fs:8 FL:0 Fi:15}



static void Test_BFu8s_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu15i");
    static BFu8s_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu15i(Test_BFu8s_BFu0ll_BFu15i, "BFu8s_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu15ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8s_BFu0ll_BFu15ll) C1{ Fs:8 FL:0 FL:15}



static void Test_BFu8s_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu15ll");
    static BFu8s_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu15ll(Test_BFu8s_BFu0ll_BFu15ll, "BFu8s_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu15s  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8s_BFu0ll_BFu15s) C1{ Fs:8 FL:0 Fs:15}



static void Test_BFu8s_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu15s");
    static BFu8s_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu8s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu15s(Test_BFu8s_BFu0ll_BFu15s, "BFu8s_BFu0ll_BFu15s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu16i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8s_BFu0ll_BFu16i) C1{ Fs:8 FL:0 Fi:16}



static void Test_BFu8s_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu16i");
    static BFu8s_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu16i(Test_BFu8s_BFu0ll_BFu16i, "BFu8s_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu16ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8s_BFu0ll_BFu16ll) C1{ Fs:8 FL:0 FL:16}



static void Test_BFu8s_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu16ll");
    static BFu8s_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu16ll(Test_BFu8s_BFu0ll_BFu16ll, "BFu8s_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu16s  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8s_BFu0ll_BFu16s) C1{ Fs:8 FL:0 Fs:16}



static void Test_BFu8s_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu16s");
    static BFu8s_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu8s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu16s(Test_BFu8s_BFu0ll_BFu16s, "BFu8s_BFu0ll_BFu16s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu17i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8s_BFu0ll_BFu17i) C1{ Fs:8 FL:0 Fi:17}



static void Test_BFu8s_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu17i");
    static BFu8s_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu8s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu8s_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu17i(Test_BFu8s_BFu0ll_BFu17i, "BFu8s_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu17ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8s_BFu0ll_BFu17ll) C1{ Fs:8 FL:0 FL:17}



static void Test_BFu8s_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu17ll");
    static BFu8s_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu8s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu8s_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu17ll(Test_BFu8s_BFu0ll_BFu17ll, "BFu8s_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu1c  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8s_BFu0ll_BFu1c) C1{ Fs:8 FL:0 Fc:1}



static void Test_BFu8s_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu1c");
    static BFu8s_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8s_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu1c(Test_BFu8s_BFu0ll_BFu1c, "BFu8s_BFu0ll_BFu1c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu1i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8s_BFu0ll_BFu1i) C1{ Fs:8 FL:0 Fi:1}



static void Test_BFu8s_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu1i");
    static BFu8s_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8s_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu1i(Test_BFu8s_BFu0ll_BFu1i, "BFu8s_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu1ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8s_BFu0ll_BFu1ll) C1{ Fs:8 FL:0 FL:1}



static void Test_BFu8s_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu1ll");
    static BFu8s_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8s_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu1ll(Test_BFu8s_BFu0ll_BFu1ll, "BFu8s_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu1s  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8s_BFu0ll_BFu1s) C1{ Fs:8 FL:0 Fs:1}



static void Test_BFu8s_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu1s");
    static BFu8s_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu8s_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu1s(Test_BFu8s_BFu0ll_BFu1s, "BFu8s_BFu0ll_BFu1s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu31i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8s_BFu0ll_BFu31i) C1{ Fs:8 FL:0 Fi:31}



static void Test_BFu8s_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu31i");
    static BFu8s_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu8s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu8s_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu31i(Test_BFu8s_BFu0ll_BFu31i, "BFu8s_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu31ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8s_BFu0ll_BFu31ll) C1{ Fs:8 FL:0 FL:31}



static void Test_BFu8s_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu31ll");
    static BFu8s_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu8s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu8s_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu31ll(Test_BFu8s_BFu0ll_BFu31ll, "BFu8s_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu32i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8s_BFu0ll_BFu32i) C1{ Fs:8 FL:0 Fi:32}



static void Test_BFu8s_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu32i");
    static BFu8s_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu8s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu8s_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu32i(Test_BFu8s_BFu0ll_BFu32i, "BFu8s_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu32ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8s_BFu0ll_BFu32ll) C1{ Fs:8 FL:0 FL:32}



static void Test_BFu8s_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu32ll");
    static BFu8s_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu8s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu8s_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu32ll(Test_BFu8s_BFu0ll_BFu32ll, "BFu8s_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu33  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8s_BFu0ll_BFu33) C1{ Fs:8 FL:0 FL:33}



static void Test_BFu8s_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu33");
    static BFu8s_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu8s_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu8s_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu33(Test_BFu8s_BFu0ll_BFu33, "BFu8s_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu7c  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8s_BFu0ll_BFu7c) C1{ Fs:8 FL:0 Fc:7}



static void Test_BFu8s_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu7c");
    static BFu8s_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu7c(Test_BFu8s_BFu0ll_BFu7c, "BFu8s_BFu0ll_BFu7c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu7i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8s_BFu0ll_BFu7i) C1{ Fs:8 FL:0 Fi:7}



static void Test_BFu8s_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu7i");
    static BFu8s_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu7i(Test_BFu8s_BFu0ll_BFu7i, "BFu8s_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu7ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8s_BFu0ll_BFu7ll) C1{ Fs:8 FL:0 FL:7}



static void Test_BFu8s_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu7ll");
    static BFu8s_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu7ll(Test_BFu8s_BFu0ll_BFu7ll, "BFu8s_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu7s  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8s_BFu0ll_BFu7s) C1{ Fs:8 FL:0 Fs:7}



static void Test_BFu8s_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu7s");
    static BFu8s_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu8s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu7s(Test_BFu8s_BFu0ll_BFu7s, "BFu8s_BFu0ll_BFu7s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu8c  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8s_BFu0ll_BFu8c) C1{ Fs:8 FL:0 Fc:8}



static void Test_BFu8s_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu8c");
    static BFu8s_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu8c(Test_BFu8s_BFu0ll_BFu8c, "BFu8s_BFu0ll_BFu8c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu8i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8s_BFu0ll_BFu8i) C1{ Fs:8 FL:0 Fi:8}



static void Test_BFu8s_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu8i");
    static BFu8s_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu8i(Test_BFu8s_BFu0ll_BFu8i, "BFu8s_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu8ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8s_BFu0ll_BFu8ll) C1{ Fs:8 FL:0 FL:8}



static void Test_BFu8s_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu8ll");
    static BFu8s_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu8ll(Test_BFu8s_BFu0ll_BFu8ll, "BFu8s_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu8s  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8s_BFu0ll_BFu8s) C1{ Fs:8 FL:0 Fs:8}



static void Test_BFu8s_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu8s");
    static BFu8s_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu8s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu8s(Test_BFu8s_BFu0ll_BFu8s, "BFu8s_BFu0ll_BFu8s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu9i  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8s_BFu0ll_BFu9i) C1{ Fs:8 FL:0 Fi:9}



static void Test_BFu8s_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu9i");
    static BFu8s_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu9i(Test_BFu8s_BFu0ll_BFu9i, "BFu8s_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu9ll  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8s_BFu0ll_BFu9ll) C1{ Fs:8 FL:0 FL:9}



static void Test_BFu8s_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu9ll");
    static BFu8s_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu9ll(Test_BFu8s_BFu0ll_BFu9ll, "BFu8s_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_BFu9s  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8s_BFu0ll_BFu9s) C1{ Fs:8 FL:0 Fs:9}



static void Test_BFu8s_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu8s_BFu0ll_BFu9s");
    static BFu8s_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu8s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_BFu9s(Test_BFu8s_BFu0ll_BFu9s, "BFu8s_BFu0ll_BFu9s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_C  {
  unsigned short v1:8;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu8s_BFu0ll_C) C1{ Fs:8 FL:0 Fc}



static void Test_BFu8s_BFu0ll_C()
{
  {
    init_simple_test("BFu8s_BFu0ll_C");
    static BFu8s_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_C(Test_BFu8s_BFu0ll_C, "BFu8s_BFu0ll_C", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_D  {
  unsigned short v1:8;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu8s_BFu0ll_D) C1{ Fs:8 FL:0 FL}



static void Test_BFu8s_BFu0ll_D()
{
  {
    init_simple_test("BFu8s_BFu0ll_D");
    static BFu8s_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_D(Test_BFu8s_BFu0ll_D, "BFu8s_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_F  {
  unsigned short v1:8;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu8s_BFu0ll_F) C1{ Fs:8 FL:0 Fi}



static void Test_BFu8s_BFu0ll_F()
{
  {
    init_simple_test("BFu8s_BFu0ll_F");
    static BFu8s_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_F(Test_BFu8s_BFu0ll_F, "BFu8s_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_I  {
  unsigned short v1:8;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu8s_BFu0ll_I) C1{ Fs:8 FL:0 Fi}



static void Test_BFu8s_BFu0ll_I()
{
  {
    init_simple_test("BFu8s_BFu0ll_I");
    static BFu8s_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_I(Test_BFu8s_BFu0ll_I, "BFu8s_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_Ip  {
  unsigned short v1:8;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu8s_BFu0ll_Ip) C1{ Fs:8 FL:0 Fp}



static void Test_BFu8s_BFu0ll_Ip()
{
  {
    init_simple_test("BFu8s_BFu0ll_Ip");
    static BFu8s_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_Ip(Test_BFu8s_BFu0ll_Ip, "BFu8s_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_L  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu8s_BFu0ll_L) C1{ Fs:8 FL:0 FL}



static void Test_BFu8s_BFu0ll_L()
{
  {
    init_simple_test("BFu8s_BFu0ll_L");
    static BFu8s_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_L(Test_BFu8s_BFu0ll_L, "BFu8s_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_S  {
  unsigned short v1:8;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu8s_BFu0ll_S) C1{ Fs:8 FL:0 Fs}



static void Test_BFu8s_BFu0ll_S()
{
  {
    init_simple_test("BFu8s_BFu0ll_S");
    static BFu8s_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_S(Test_BFu8s_BFu0ll_S, "BFu8s_BFu0ll_S", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_Uc  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu8s_BFu0ll_Uc) C1{ Fs:8 FL:0 Fc}



static void Test_BFu8s_BFu0ll_Uc()
{
  {
    init_simple_test("BFu8s_BFu0ll_Uc");
    static BFu8s_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_Uc(Test_BFu8s_BFu0ll_Uc, "BFu8s_BFu0ll_Uc", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_Ui  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu8s_BFu0ll_Ui) C1{ Fs:8 FL:0 Fi}



static void Test_BFu8s_BFu0ll_Ui()
{
  {
    init_simple_test("BFu8s_BFu0ll_Ui");
    static BFu8s_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu8s_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_Ui(Test_BFu8s_BFu0ll_Ui, "BFu8s_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_Ul  {
  unsigned short v1:8;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu8s_BFu0ll_Ul) C1{ Fs:8 FL:0 FL}



static void Test_BFu8s_BFu0ll_Ul()
{
  {
    init_simple_test("BFu8s_BFu0ll_Ul");
    static BFu8s_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_Ul(Test_BFu8s_BFu0ll_Ul, "BFu8s_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_Us  {
  unsigned short v1:8;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu8s_BFu0ll_Us) C1{ Fs:8 FL:0 Fs}



static void Test_BFu8s_BFu0ll_Us()
{
  {
    init_simple_test("BFu8s_BFu0ll_Us");
    static BFu8s_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu8s_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_Us(Test_BFu8s_BFu0ll_Us, "BFu8s_BFu0ll_Us", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0ll_Vp  {
  unsigned short v1:8;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu8s_BFu0ll_Vp) C1{ Fs:8 FL:0 Fp}



static void Test_BFu8s_BFu0ll_Vp()
{
  {
    init_simple_test("BFu8s_BFu0ll_Vp");
    static BFu8s_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0ll_Vp(Test_BFu8s_BFu0ll_Vp, "BFu8s_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s  {
  unsigned short v1:8;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu0s) C1{ Fs:8 Fs:0}



static void Test_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu0s");
    static BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s(Test_BFu8s_BFu0s, "BFu8s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu0c  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu0s_BFu0c) C1{ Fs:8 Fs:0 Fc:0}



static void Test_BFu8s_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu0c");
    static BFu8s_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu0c(Test_BFu8s_BFu0s_BFu0c, "BFu8s_BFu0s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu0i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu0s_BFu0i) C1{ Fs:8 Fs:0 Fi:0}



static void Test_BFu8s_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu0i");
    static BFu8s_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu0i(Test_BFu8s_BFu0s_BFu0i, "BFu8s_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu0ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu0s_BFu0ll) C1{ Fs:8 Fs:0 FL:0}



static void Test_BFu8s_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu0ll");
    static BFu8s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu0ll(Test_BFu8s_BFu0s_BFu0ll, "BFu8s_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu0s  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu0s_BFu0s) C1{ Fs:8 Fs:0 Fs:0}



static void Test_BFu8s_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu0s");
    static BFu8s_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu0s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu0s(Test_BFu8s_BFu0s_BFu0s, "BFu8s_BFu0s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu15i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu8s_BFu0s_BFu15i) C1{ Fs:8 Fs:0 Fi:15}



static void Test_BFu8s_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu15i");
    static BFu8s_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8s_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu15i(Test_BFu8s_BFu0s_BFu15i, "BFu8s_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu15ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu8s_BFu0s_BFu15ll) C1{ Fs:8 Fs:0 FL:15}



static void Test_BFu8s_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu15ll");
    static BFu8s_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu15ll(Test_BFu8s_BFu0s_BFu15ll, "BFu8s_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu15s  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu8s_BFu0s_BFu15s) C1{ Fs:8 Fs:0 Fs:15}



static void Test_BFu8s_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu15s");
    static BFu8s_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8s_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu15s(Test_BFu8s_BFu0s_BFu15s, "BFu8s_BFu0s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu16i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu8s_BFu0s_BFu16i) C1{ Fs:8 Fs:0 Fi:16}



static void Test_BFu8s_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu16i");
    static BFu8s_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8s_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu16i(Test_BFu8s_BFu0s_BFu16i, "BFu8s_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu16ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu8s_BFu0s_BFu16ll) C1{ Fs:8 Fs:0 FL:16}



static void Test_BFu8s_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu16ll");
    static BFu8s_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu16ll(Test_BFu8s_BFu0s_BFu16ll, "BFu8s_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu16s  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu8s_BFu0s_BFu16s) C1{ Fs:8 Fs:0 Fs:16}



static void Test_BFu8s_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu16s");
    static BFu8s_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8s_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu16s(Test_BFu8s_BFu0s_BFu16s, "BFu8s_BFu0s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu17i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu8s_BFu0s_BFu17i) C1{ Fs:8 Fs:0 Fi:17}



static void Test_BFu8s_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu17i");
    static BFu8s_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu8s_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu17i(Test_BFu8s_BFu0s_BFu17i, "BFu8s_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu17ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu8s_BFu0s_BFu17ll) C1{ Fs:8 Fs:0 FL:17}



static void Test_BFu8s_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu17ll");
    static BFu8s_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu8s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu17ll(Test_BFu8s_BFu0s_BFu17ll, "BFu8s_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu1c  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu8s_BFu0s_BFu1c) C1{ Fs:8 Fs:0 Fc:1}



static void Test_BFu8s_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu1c");
    static BFu8s_BFu0s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8s_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu1c(Test_BFu8s_BFu0s_BFu1c, "BFu8s_BFu0s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu1i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu8s_BFu0s_BFu1i) C1{ Fs:8 Fs:0 Fi:1}



static void Test_BFu8s_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu1i");
    static BFu8s_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8s_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu1i(Test_BFu8s_BFu0s_BFu1i, "BFu8s_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu1ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu8s_BFu0s_BFu1ll) C1{ Fs:8 Fs:0 FL:1}



static void Test_BFu8s_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu1ll");
    static BFu8s_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8s_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu1ll(Test_BFu8s_BFu0s_BFu1ll, "BFu8s_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu1s  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu8s_BFu0s_BFu1s) C1{ Fs:8 Fs:0 Fs:1}



static void Test_BFu8s_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu1s");
    static BFu8s_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu8s_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu1s(Test_BFu8s_BFu0s_BFu1s, "BFu8s_BFu0s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu31i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu8s_BFu0s_BFu31i) C1{ Fs:8 Fs:0 Fi:31}



static void Test_BFu8s_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu31i");
    static BFu8s_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8s_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu31i(Test_BFu8s_BFu0s_BFu31i, "BFu8s_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu31ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu8s_BFu0s_BFu31ll) C1{ Fs:8 Fs:0 FL:31}



static void Test_BFu8s_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu31ll");
    static BFu8s_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu8s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu31ll(Test_BFu8s_BFu0s_BFu31ll, "BFu8s_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu32i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu8s_BFu0s_BFu32i) C1{ Fs:8 Fs:0 Fi:32}



static void Test_BFu8s_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu32i");
    static BFu8s_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8s_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu32i(Test_BFu8s_BFu0s_BFu32i, "BFu8s_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu32ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu8s_BFu0s_BFu32ll) C1{ Fs:8 Fs:0 FL:32}



static void Test_BFu8s_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu32ll");
    static BFu8s_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu8s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu32ll(Test_BFu8s_BFu0s_BFu32ll, "BFu8s_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu33  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu8s_BFu0s_BFu33) C1{ Fs:8 Fs:0 FL:33}



static void Test_BFu8s_BFu0s_BFu33()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu33");
    static BFu8s_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu8s_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu8s_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu33(Test_BFu8s_BFu0s_BFu33, "BFu8s_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu7c  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu8s_BFu0s_BFu7c) C1{ Fs:8 Fs:0 Fc:7}



static void Test_BFu8s_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu7c");
    static BFu8s_BFu0s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8s_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu7c(Test_BFu8s_BFu0s_BFu7c, "BFu8s_BFu0s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu7i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu8s_BFu0s_BFu7i) C1{ Fs:8 Fs:0 Fi:7}



static void Test_BFu8s_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu7i");
    static BFu8s_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8s_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu7i(Test_BFu8s_BFu0s_BFu7i, "BFu8s_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu7ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu8s_BFu0s_BFu7ll) C1{ Fs:8 Fs:0 FL:7}



static void Test_BFu8s_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu7ll");
    static BFu8s_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu7ll(Test_BFu8s_BFu0s_BFu7ll, "BFu8s_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu7s  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu8s_BFu0s_BFu7s) C1{ Fs:8 Fs:0 Fs:7}



static void Test_BFu8s_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu7s");
    static BFu8s_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu8s_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu7s(Test_BFu8s_BFu0s_BFu7s, "BFu8s_BFu0s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu8c  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu8s_BFu0s_BFu8c) C1{ Fs:8 Fs:0 Fc:8}



static void Test_BFu8s_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu8c");
    static BFu8s_BFu0s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8s_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu8c(Test_BFu8s_BFu0s_BFu8c, "BFu8s_BFu0s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu8i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu8s_BFu0s_BFu8i) C1{ Fs:8 Fs:0 Fi:8}



static void Test_BFu8s_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu8i");
    static BFu8s_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8s_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu8i(Test_BFu8s_BFu0s_BFu8i, "BFu8s_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu8ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu8s_BFu0s_BFu8ll) C1{ Fs:8 Fs:0 FL:8}



static void Test_BFu8s_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu8ll");
    static BFu8s_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu8ll(Test_BFu8s_BFu0s_BFu8ll, "BFu8s_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu8s  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu8s_BFu0s_BFu8s) C1{ Fs:8 Fs:0 Fs:8}



static void Test_BFu8s_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu8s");
    static BFu8s_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu8s_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu8s(Test_BFu8s_BFu0s_BFu8s, "BFu8s_BFu0s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu9i  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu8s_BFu0s_BFu9i) C1{ Fs:8 Fs:0 Fi:9}



static void Test_BFu8s_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu9i");
    static BFu8s_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8s_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu9i(Test_BFu8s_BFu0s_BFu9i, "BFu8s_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu9ll  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu8s_BFu0s_BFu9ll) C1{ Fs:8 Fs:0 FL:9}



static void Test_BFu8s_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu9ll");
    static BFu8s_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu9ll(Test_BFu8s_BFu0s_BFu9ll, "BFu8s_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_BFu9s  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu8s_BFu0s_BFu9s) C1{ Fs:8 Fs:0 Fs:9}



static void Test_BFu8s_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu8s_BFu0s_BFu9s");
    static BFu8s_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8s_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_BFu9s(Test_BFu8s_BFu0s_BFu9s, "BFu8s_BFu0s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_C  {
  unsigned short v1:8;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu8s_BFu0s_C) C1{ Fs:8 Fs:0 Fc}



static void Test_BFu8s_BFu0s_C()
{
  {
    init_simple_test("BFu8s_BFu0s_C");
    static BFu8s_BFu0s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu8s_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_C(Test_BFu8s_BFu0s_C, "BFu8s_BFu0s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_D  {
  unsigned short v1:8;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu8s_BFu0s_D) C1{ Fs:8 Fs:0 FL}



static void Test_BFu8s_BFu0s_D()
{
  {
    init_simple_test("BFu8s_BFu0s_D");
    static BFu8s_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_D(Test_BFu8s_BFu0s_D, "BFu8s_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_F  {
  unsigned short v1:8;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu8s_BFu0s_F) C1{ Fs:8 Fs:0 Fi}



static void Test_BFu8s_BFu0s_F()
{
  {
    init_simple_test("BFu8s_BFu0s_F");
    static BFu8s_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_F(Test_BFu8s_BFu0s_F, "BFu8s_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_I  {
  unsigned short v1:8;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu8s_BFu0s_I) C1{ Fs:8 Fs:0 Fi}



static void Test_BFu8s_BFu0s_I()
{
  {
    init_simple_test("BFu8s_BFu0s_I");
    static BFu8s_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_I(Test_BFu8s_BFu0s_I, "BFu8s_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_Ip  {
  unsigned short v1:8;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu8s_BFu0s_Ip) C1{ Fs:8 Fs:0 Fp}



static void Test_BFu8s_BFu0s_Ip()
{
  {
    init_simple_test("BFu8s_BFu0s_Ip");
    static BFu8s_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_Ip(Test_BFu8s_BFu0s_Ip, "BFu8s_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_L  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu8s_BFu0s_L) C1{ Fs:8 Fs:0 FL}



static void Test_BFu8s_BFu0s_L()
{
  {
    init_simple_test("BFu8s_BFu0s_L");
    static BFu8s_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_L(Test_BFu8s_BFu0s_L, "BFu8s_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_S  {
  unsigned short v1:8;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu8s_BFu0s_S) C1{ Fs:8 Fs:0 Fs}



static void Test_BFu8s_BFu0s_S()
{
  {
    init_simple_test("BFu8s_BFu0s_S");
    static BFu8s_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu8s_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_S(Test_BFu8s_BFu0s_S, "BFu8s_BFu0s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_Uc  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu8s_BFu0s_Uc) C1{ Fs:8 Fs:0 Fc}



static void Test_BFu8s_BFu0s_Uc()
{
  {
    init_simple_test("BFu8s_BFu0s_Uc");
    static BFu8s_BFu0s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu8s_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_Uc(Test_BFu8s_BFu0s_Uc, "BFu8s_BFu0s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_Ui  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu8s_BFu0s_Ui) C1{ Fs:8 Fs:0 Fi}



static void Test_BFu8s_BFu0s_Ui()
{
  {
    init_simple_test("BFu8s_BFu0s_Ui");
    static BFu8s_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu8s_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_Ui(Test_BFu8s_BFu0s_Ui, "BFu8s_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_Ul  {
  unsigned short v1:8;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu8s_BFu0s_Ul) C1{ Fs:8 Fs:0 FL}



static void Test_BFu8s_BFu0s_Ul()
{
  {
    init_simple_test("BFu8s_BFu0s_Ul");
    static BFu8s_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_Ul(Test_BFu8s_BFu0s_Ul, "BFu8s_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_Us  {
  unsigned short v1:8;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu8s_BFu0s_Us) C1{ Fs:8 Fs:0 Fs}



static void Test_BFu8s_BFu0s_Us()
{
  {
    init_simple_test("BFu8s_BFu0s_Us");
    static BFu8s_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu8s_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_Us(Test_BFu8s_BFu0s_Us, "BFu8s_BFu0s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu0s_Vp  {
  unsigned short v1:8;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu8s_BFu0s_Vp) C1{ Fs:8 Fs:0 Fp}



static void Test_BFu8s_BFu0s_Vp()
{
  {
    init_simple_test("BFu8s_BFu0s_Vp");
    static BFu8s_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu0s_Vp(Test_BFu8s_BFu0s_Vp, "BFu8s_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15i_BFu0c  {
  unsigned short v1:8;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu15i_BFu0c) C1{ Fs:8 Fi:15 Fc:0}



static void Test_BFu8s_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu15i_BFu0c");
    static BFu8s_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15i_BFu0c(Test_BFu8s_BFu15i_BFu0c, "BFu8s_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15i_BFu0i  {
  unsigned short v1:8;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu15i_BFu0i) C1{ Fs:8 Fi:15 Fi:0}



static void Test_BFu8s_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu15i_BFu0i");
    static BFu8s_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15i_BFu0i(Test_BFu8s_BFu15i_BFu0i, "BFu8s_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15i_BFu0ll  {
  unsigned short v1:8;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu15i_BFu0ll) C1{ Fs:8 Fi:15 FL:0}



static void Test_BFu8s_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu15i_BFu0ll");
    static BFu8s_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15i_BFu0ll(Test_BFu8s_BFu15i_BFu0ll, "BFu8s_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15i_BFu0s  {
  unsigned short v1:8;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu15i_BFu0s) C1{ Fs:8 Fi:15 Fs:0}



static void Test_BFu8s_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu15i_BFu0s");
    static BFu8s_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15i_BFu0s(Test_BFu8s_BFu15i_BFu0s, "BFu8s_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15ll_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu15ll_BFu0c) C1{ Fs:8 FL:15 Fc:0}



static void Test_BFu8s_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu15ll_BFu0c");
    static BFu8s_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15ll_BFu0c(Test_BFu8s_BFu15ll_BFu0c, "BFu8s_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15ll_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu15ll_BFu0i) C1{ Fs:8 FL:15 Fi:0}



static void Test_BFu8s_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu15ll_BFu0i");
    static BFu8s_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15ll_BFu0i(Test_BFu8s_BFu15ll_BFu0i, "BFu8s_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu15ll_BFu0ll) C1{ Fs:8 FL:15 FL:0}



static void Test_BFu8s_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu15ll_BFu0ll");
    static BFu8s_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15ll_BFu0ll(Test_BFu8s_BFu15ll_BFu0ll, "BFu8s_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15ll_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu15ll_BFu0s) C1{ Fs:8 FL:15 Fs:0}



static void Test_BFu8s_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu15ll_BFu0s");
    static BFu8s_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "BFu8s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15ll_BFu0s(Test_BFu8s_BFu15ll_BFu0s, "BFu8s_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15s_BFu0c  {
  unsigned short v1:8;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu15s_BFu0c) C1{ Fs:8 Fs:15 Fc:0}



static void Test_BFu8s_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu15s_BFu0c");
    static BFu8s_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8s_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15s_BFu0c(Test_BFu8s_BFu15s_BFu0c, "BFu8s_BFu15s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15s_BFu0i  {
  unsigned short v1:8;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu15s_BFu0i) C1{ Fs:8 Fs:15 Fi:0}



static void Test_BFu8s_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu15s_BFu0i");
    static BFu8s_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8s_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15s_BFu0i(Test_BFu8s_BFu15s_BFu0i, "BFu8s_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15s_BFu0ll  {
  unsigned short v1:8;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu15s_BFu0ll) C1{ Fs:8 Fs:15 FL:0}



static void Test_BFu8s_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu15s_BFu0ll");
    static BFu8s_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15s_BFu0ll(Test_BFu8s_BFu15s_BFu0ll, "BFu8s_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu15s_BFu0s  {
  unsigned short v1:8;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu15s_BFu0s) C1{ Fs:8 Fs:15 Fs:0}



static void Test_BFu8s_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu15s_BFu0s");
    static BFu8s_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu8s_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu8s_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu15s_BFu0s(Test_BFu8s_BFu15s_BFu0s, "BFu8s_BFu15s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16i_BFu0c  {
  unsigned short v1:8;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu16i_BFu0c) C1{ Fs:8 Fi:16 Fc:0}



static void Test_BFu8s_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu16i_BFu0c");
    static BFu8s_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16i_BFu0c(Test_BFu8s_BFu16i_BFu0c, "BFu8s_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16i_BFu0i  {
  unsigned short v1:8;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu16i_BFu0i) C1{ Fs:8 Fi:16 Fi:0}



static void Test_BFu8s_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu16i_BFu0i");
    static BFu8s_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16i_BFu0i(Test_BFu8s_BFu16i_BFu0i, "BFu8s_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16i_BFu0ll  {
  unsigned short v1:8;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu16i_BFu0ll) C1{ Fs:8 Fi:16 FL:0}



static void Test_BFu8s_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu16i_BFu0ll");
    static BFu8s_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16i_BFu0ll(Test_BFu8s_BFu16i_BFu0ll, "BFu8s_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16i_BFu0s  {
  unsigned short v1:8;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu16i_BFu0s) C1{ Fs:8 Fi:16 Fs:0}



static void Test_BFu8s_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu16i_BFu0s");
    static BFu8s_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16i_BFu0s(Test_BFu8s_BFu16i_BFu0s, "BFu8s_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16ll_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu16ll_BFu0c) C1{ Fs:8 FL:16 Fc:0}



static void Test_BFu8s_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu16ll_BFu0c");
    static BFu8s_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16ll_BFu0c(Test_BFu8s_BFu16ll_BFu0c, "BFu8s_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16ll_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu16ll_BFu0i) C1{ Fs:8 FL:16 Fi:0}



static void Test_BFu8s_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu16ll_BFu0i");
    static BFu8s_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16ll_BFu0i(Test_BFu8s_BFu16ll_BFu0i, "BFu8s_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu16ll_BFu0ll) C1{ Fs:8 FL:16 FL:0}



static void Test_BFu8s_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu16ll_BFu0ll");
    static BFu8s_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16ll_BFu0ll(Test_BFu8s_BFu16ll_BFu0ll, "BFu8s_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16ll_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu16ll_BFu0s) C1{ Fs:8 FL:16 Fs:0}



static void Test_BFu8s_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu16ll_BFu0s");
    static BFu8s_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "BFu8s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16ll_BFu0s(Test_BFu8s_BFu16ll_BFu0s, "BFu8s_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16s_BFu0c  {
  unsigned short v1:8;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu16s_BFu0c) C1{ Fs:8 Fs:16 Fc:0}



static void Test_BFu8s_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu16s_BFu0c");
    static BFu8s_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8s_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16s_BFu0c(Test_BFu8s_BFu16s_BFu0c, "BFu8s_BFu16s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16s_BFu0i  {
  unsigned short v1:8;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu16s_BFu0i) C1{ Fs:8 Fs:16 Fi:0}



static void Test_BFu8s_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu16s_BFu0i");
    static BFu8s_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8s_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16s_BFu0i(Test_BFu8s_BFu16s_BFu0i, "BFu8s_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16s_BFu0ll  {
  unsigned short v1:8;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu16s_BFu0ll) C1{ Fs:8 Fs:16 FL:0}



static void Test_BFu8s_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu16s_BFu0ll");
    static BFu8s_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16s_BFu0ll(Test_BFu8s_BFu16s_BFu0ll, "BFu8s_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu16s_BFu0s  {
  unsigned short v1:8;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu16s_BFu0s) C1{ Fs:8 Fs:16 Fs:0}



static void Test_BFu8s_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu16s_BFu0s");
    static BFu8s_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu8s_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu8s_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu16s_BFu0s(Test_BFu8s_BFu16s_BFu0s, "BFu8s_BFu16s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu17i_BFu0c  {
  unsigned short v1:8;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu17i_BFu0c) C1{ Fs:8 Fi:17 Fc:0}



static void Test_BFu8s_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu17i_BFu0c");
    static BFu8s_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu17i_BFu0c(Test_BFu8s_BFu17i_BFu0c, "BFu8s_BFu17i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu17i_BFu0i  {
  unsigned short v1:8;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu17i_BFu0i) C1{ Fs:8 Fi:17 Fi:0}



static void Test_BFu8s_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu17i_BFu0i");
    static BFu8s_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu17i_BFu0i(Test_BFu8s_BFu17i_BFu0i, "BFu8s_BFu17i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu17i_BFu0ll  {
  unsigned short v1:8;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu17i_BFu0ll) C1{ Fs:8 Fi:17 FL:0}



static void Test_BFu8s_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu17i_BFu0ll");
    static BFu8s_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu17i_BFu0ll(Test_BFu8s_BFu17i_BFu0ll, "BFu8s_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu17i_BFu0s  {
  unsigned short v1:8;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu17i_BFu0s) C1{ Fs:8 Fi:17 Fs:0}



static void Test_BFu8s_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu17i_BFu0s");
    static BFu8s_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu17i_BFu0s(Test_BFu8s_BFu17i_BFu0s, "BFu8s_BFu17i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu17ll_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu17ll_BFu0c) C1{ Fs:8 FL:17 Fc:0}



static void Test_BFu8s_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu17ll_BFu0c");
    static BFu8s_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu17ll_BFu0c(Test_BFu8s_BFu17ll_BFu0c, "BFu8s_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu17ll_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu17ll_BFu0i) C1{ Fs:8 FL:17 Fi:0}



static void Test_BFu8s_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu17ll_BFu0i");
    static BFu8s_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu17ll_BFu0i(Test_BFu8s_BFu17ll_BFu0i, "BFu8s_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu17ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu17ll_BFu0ll) C1{ Fs:8 FL:17 FL:0}



static void Test_BFu8s_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu17ll_BFu0ll");
    static BFu8s_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu17ll_BFu0ll(Test_BFu8s_BFu17ll_BFu0ll, "BFu8s_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu17ll_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu17ll_BFu0s) C1{ Fs:8 FL:17 Fs:0}



static void Test_BFu8s_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu17ll_BFu0s");
    static BFu8s_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "BFu8s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "BFu8s_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu17ll_BFu0s(Test_BFu8s_BFu17ll_BFu0s, "BFu8s_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1c_BFu0c  {
  unsigned short v1:8;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu1c_BFu0c) C1{ Fs:8 Fc:1 Fc:0}



static void Test_BFu8s_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu1c_BFu0c");
    static BFu8s_BFu1c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu1c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1c_BFu0c(Test_BFu8s_BFu1c_BFu0c, "BFu8s_BFu1c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1c_BFu0i  {
  unsigned short v1:8;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu1c_BFu0i) C1{ Fs:8 Fc:1 Fi:0}



static void Test_BFu8s_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu1c_BFu0i");
    static BFu8s_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1c_BFu0i(Test_BFu8s_BFu1c_BFu0i, "BFu8s_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1c_BFu0ll  {
  unsigned short v1:8;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu1c_BFu0ll) C1{ Fs:8 Fc:1 FL:0}



static void Test_BFu8s_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu1c_BFu0ll");
    static BFu8s_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1c_BFu0ll(Test_BFu8s_BFu1c_BFu0ll, "BFu8s_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1c_BFu0s  {
  unsigned short v1:8;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu1c_BFu0s) C1{ Fs:8 Fc:1 Fs:0}



static void Test_BFu8s_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu1c_BFu0s");
    static BFu8s_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu1c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1c_BFu0s(Test_BFu8s_BFu1c_BFu0s, "BFu8s_BFu1c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1i_BFu0c  {
  unsigned short v1:8;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu1i_BFu0c) C1{ Fs:8 Fi:1 Fc:0}



static void Test_BFu8s_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu1i_BFu0c");
    static BFu8s_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1i_BFu0c(Test_BFu8s_BFu1i_BFu0c, "BFu8s_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1i_BFu0i  {
  unsigned short v1:8;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu1i_BFu0i) C1{ Fs:8 Fi:1 Fi:0}



static void Test_BFu8s_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu1i_BFu0i");
    static BFu8s_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1i_BFu0i(Test_BFu8s_BFu1i_BFu0i, "BFu8s_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1i_BFu0ll  {
  unsigned short v1:8;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu1i_BFu0ll) C1{ Fs:8 Fi:1 FL:0}



static void Test_BFu8s_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu1i_BFu0ll");
    static BFu8s_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1i_BFu0ll(Test_BFu8s_BFu1i_BFu0ll, "BFu8s_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1i_BFu0s  {
  unsigned short v1:8;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu1i_BFu0s) C1{ Fs:8 Fi:1 Fs:0}



static void Test_BFu8s_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu1i_BFu0s");
    static BFu8s_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1i_BFu0s(Test_BFu8s_BFu1i_BFu0s, "BFu8s_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1ll_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu1ll_BFu0c) C1{ Fs:8 FL:1 Fc:0}



static void Test_BFu8s_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu1ll_BFu0c");
    static BFu8s_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1ll_BFu0c(Test_BFu8s_BFu1ll_BFu0c, "BFu8s_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1ll_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu1ll_BFu0i) C1{ Fs:8 FL:1 Fi:0}



static void Test_BFu8s_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu1ll_BFu0i");
    static BFu8s_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1ll_BFu0i(Test_BFu8s_BFu1ll_BFu0i, "BFu8s_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu1ll_BFu0ll) C1{ Fs:8 FL:1 FL:0}



static void Test_BFu8s_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu1ll_BFu0ll");
    static BFu8s_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1ll_BFu0ll(Test_BFu8s_BFu1ll_BFu0ll, "BFu8s_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1ll_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu1ll_BFu0s) C1{ Fs:8 FL:1 Fs:0}



static void Test_BFu8s_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu1ll_BFu0s");
    static BFu8s_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1ll_BFu0s(Test_BFu8s_BFu1ll_BFu0s, "BFu8s_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1s_BFu0c  {
  unsigned short v1:8;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu1s_BFu0c) C1{ Fs:8 Fs:1 Fc:0}



static void Test_BFu8s_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu1s_BFu0c");
    static BFu8s_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1s_BFu0c(Test_BFu8s_BFu1s_BFu0c, "BFu8s_BFu1s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1s_BFu0i  {
  unsigned short v1:8;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu1s_BFu0i) C1{ Fs:8 Fs:1 Fi:0}



static void Test_BFu8s_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu1s_BFu0i");
    static BFu8s_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1s_BFu0i(Test_BFu8s_BFu1s_BFu0i, "BFu8s_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1s_BFu0ll  {
  unsigned short v1:8;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu1s_BFu0ll) C1{ Fs:8 Fs:1 FL:0}



static void Test_BFu8s_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu1s_BFu0ll");
    static BFu8s_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1s_BFu0ll(Test_BFu8s_BFu1s_BFu0ll, "BFu8s_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu1s_BFu0s  {
  unsigned short v1:8;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu1s_BFu0s) C1{ Fs:8 Fs:1 Fs:0}



static void Test_BFu8s_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu1s_BFu0s");
    static BFu8s_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "BFu8s_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu1s_BFu0s(Test_BFu8s_BFu1s_BFu0s, "BFu8s_BFu1s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu31i_BFu0c  {
  unsigned short v1:8;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu31i_BFu0c) C1{ Fs:8 Fi:31 Fc:0}



static void Test_BFu8s_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu31i_BFu0c");
    static BFu8s_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8s_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu31i_BFu0c(Test_BFu8s_BFu31i_BFu0c, "BFu8s_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu31i_BFu0i  {
  unsigned short v1:8;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu31i_BFu0i) C1{ Fs:8 Fi:31 Fi:0}



static void Test_BFu8s_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu31i_BFu0i");
    static BFu8s_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8s_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu31i_BFu0i(Test_BFu8s_BFu31i_BFu0i, "BFu8s_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu31i_BFu0ll  {
  unsigned short v1:8;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu31i_BFu0ll) C1{ Fs:8 Fi:31 FL:0}



static void Test_BFu8s_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu31i_BFu0ll");
    static BFu8s_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu31i_BFu0ll(Test_BFu8s_BFu31i_BFu0ll, "BFu8s_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu31i_BFu0s  {
  unsigned short v1:8;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu31i_BFu0s) C1{ Fs:8 Fi:31 Fs:0}



static void Test_BFu8s_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu31i_BFu0s");
    static BFu8s_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu8s_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu31i_BFu0s(Test_BFu8s_BFu31i_BFu0s, "BFu8s_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu31ll_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu31ll_BFu0c) C1{ Fs:8 FL:31 Fc:0}



static void Test_BFu8s_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu31ll_BFu0c");
    static BFu8s_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu31ll_BFu0c(Test_BFu8s_BFu31ll_BFu0c, "BFu8s_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu31ll_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu31ll_BFu0i) C1{ Fs:8 FL:31 Fi:0}



static void Test_BFu8s_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu31ll_BFu0i");
    static BFu8s_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu31ll_BFu0i(Test_BFu8s_BFu31ll_BFu0i, "BFu8s_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu31ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu31ll_BFu0ll) C1{ Fs:8 FL:31 FL:0}



static void Test_BFu8s_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu31ll_BFu0ll");
    static BFu8s_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu31ll_BFu0ll(Test_BFu8s_BFu31ll_BFu0ll, "BFu8s_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu31ll_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu31ll_BFu0s) C1{ Fs:8 FL:31 Fs:0}



static void Test_BFu8s_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu31ll_BFu0s");
    static BFu8s_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "BFu8s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "BFu8s_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu31ll_BFu0s(Test_BFu8s_BFu31ll_BFu0s, "BFu8s_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu32i_BFu0c  {
  unsigned short v1:8;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu32i_BFu0c) C1{ Fs:8 Fi:32 Fc:0}



static void Test_BFu8s_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu32i_BFu0c");
    static BFu8s_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8s_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu32i_BFu0c(Test_BFu8s_BFu32i_BFu0c, "BFu8s_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu32i_BFu0i  {
  unsigned short v1:8;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu32i_BFu0i) C1{ Fs:8 Fi:32 Fi:0}



static void Test_BFu8s_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu32i_BFu0i");
    static BFu8s_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8s_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu32i_BFu0i(Test_BFu8s_BFu32i_BFu0i, "BFu8s_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu32i_BFu0ll  {
  unsigned short v1:8;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu32i_BFu0ll) C1{ Fs:8 Fi:32 FL:0}



static void Test_BFu8s_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu32i_BFu0ll");
    static BFu8s_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu32i_BFu0ll(Test_BFu8s_BFu32i_BFu0ll, "BFu8s_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu32i_BFu0s  {
  unsigned short v1:8;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu32i_BFu0s) C1{ Fs:8 Fi:32 Fs:0}



static void Test_BFu8s_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu32i_BFu0s");
    static BFu8s_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu8s_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu32i_BFu0s(Test_BFu8s_BFu32i_BFu0s, "BFu8s_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu32ll_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu32ll_BFu0c) C1{ Fs:8 FL:32 Fc:0}



static void Test_BFu8s_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu32ll_BFu0c");
    static BFu8s_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu32ll_BFu0c(Test_BFu8s_BFu32ll_BFu0c, "BFu8s_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu32ll_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu32ll_BFu0i) C1{ Fs:8 FL:32 Fi:0}



static void Test_BFu8s_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu32ll_BFu0i");
    static BFu8s_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu32ll_BFu0i(Test_BFu8s_BFu32ll_BFu0i, "BFu8s_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu32ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu32ll_BFu0ll) C1{ Fs:8 FL:32 FL:0}



static void Test_BFu8s_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu32ll_BFu0ll");
    static BFu8s_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu32ll_BFu0ll(Test_BFu8s_BFu32ll_BFu0ll, "BFu8s_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu32ll_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu32ll_BFu0s) C1{ Fs:8 FL:32 Fs:0}



static void Test_BFu8s_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu32ll_BFu0s");
    static BFu8s_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "BFu8s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "BFu8s_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu32ll_BFu0s(Test_BFu8s_BFu32ll_BFu0s, "BFu8s_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu33_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu33_BFu0c) C1{ Fs:8 FL:33 Fc:0}



static void Test_BFu8s_BFu33_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu33_BFu0c");
    static BFu8s_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8s_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8s_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu33_BFu0c(Test_BFu8s_BFu33_BFu0c, "BFu8s_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu33_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu33_BFu0i) C1{ Fs:8 FL:33 Fi:0}



static void Test_BFu8s_BFu33_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu33_BFu0i");
    static BFu8s_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8s_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8s_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu33_BFu0i(Test_BFu8s_BFu33_BFu0i, "BFu8s_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu33_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu33_BFu0ll) C1{ Fs:8 FL:33 FL:0}



static void Test_BFu8s_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu33_BFu0ll");
    static BFu8s_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8s_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8s_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu33_BFu0ll(Test_BFu8s_BFu33_BFu0ll, "BFu8s_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu33_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu33_BFu0s) C1{ Fs:8 FL:33 Fs:0}



static void Test_BFu8s_BFu33_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu33_BFu0s");
    static BFu8s_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "BFu8s_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "BFu8s_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu33_BFu0s(Test_BFu8s_BFu33_BFu0s, "BFu8s_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7c_BFu0c  {
  unsigned short v1:8;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu7c_BFu0c) C1{ Fs:8 Fc:7 Fc:0}



static void Test_BFu8s_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu7c_BFu0c");
    static BFu8s_BFu7c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu7c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7c_BFu0c(Test_BFu8s_BFu7c_BFu0c, "BFu8s_BFu7c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7c_BFu0i  {
  unsigned short v1:8;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu7c_BFu0i) C1{ Fs:8 Fc:7 Fi:0}



static void Test_BFu8s_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu7c_BFu0i");
    static BFu8s_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7c_BFu0i(Test_BFu8s_BFu7c_BFu0i, "BFu8s_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7c_BFu0ll  {
  unsigned short v1:8;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu7c_BFu0ll) C1{ Fs:8 Fc:7 FL:0}



static void Test_BFu8s_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu7c_BFu0ll");
    static BFu8s_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7c_BFu0ll(Test_BFu8s_BFu7c_BFu0ll, "BFu8s_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7c_BFu0s  {
  unsigned short v1:8;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu7c_BFu0s) C1{ Fs:8 Fc:7 Fs:0}



static void Test_BFu8s_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu7c_BFu0s");
    static BFu8s_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu7c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7c_BFu0s(Test_BFu8s_BFu7c_BFu0s, "BFu8s_BFu7c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7i_BFu0c  {
  unsigned short v1:8;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu7i_BFu0c) C1{ Fs:8 Fi:7 Fc:0}



static void Test_BFu8s_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu7i_BFu0c");
    static BFu8s_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7i_BFu0c(Test_BFu8s_BFu7i_BFu0c, "BFu8s_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7i_BFu0i  {
  unsigned short v1:8;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu7i_BFu0i) C1{ Fs:8 Fi:7 Fi:0}



static void Test_BFu8s_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu7i_BFu0i");
    static BFu8s_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7i_BFu0i(Test_BFu8s_BFu7i_BFu0i, "BFu8s_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7i_BFu0ll  {
  unsigned short v1:8;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu7i_BFu0ll) C1{ Fs:8 Fi:7 FL:0}



static void Test_BFu8s_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu7i_BFu0ll");
    static BFu8s_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7i_BFu0ll(Test_BFu8s_BFu7i_BFu0ll, "BFu8s_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7i_BFu0s  {
  unsigned short v1:8;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu7i_BFu0s) C1{ Fs:8 Fi:7 Fs:0}



static void Test_BFu8s_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu7i_BFu0s");
    static BFu8s_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7i_BFu0s(Test_BFu8s_BFu7i_BFu0s, "BFu8s_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7ll_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu7ll_BFu0c) C1{ Fs:8 FL:7 Fc:0}



static void Test_BFu8s_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu7ll_BFu0c");
    static BFu8s_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7ll_BFu0c(Test_BFu8s_BFu7ll_BFu0c, "BFu8s_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7ll_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu7ll_BFu0i) C1{ Fs:8 FL:7 Fi:0}



static void Test_BFu8s_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu7ll_BFu0i");
    static BFu8s_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7ll_BFu0i(Test_BFu8s_BFu7ll_BFu0i, "BFu8s_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu7ll_BFu0ll) C1{ Fs:8 FL:7 FL:0}



static void Test_BFu8s_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu7ll_BFu0ll");
    static BFu8s_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7ll_BFu0ll(Test_BFu8s_BFu7ll_BFu0ll, "BFu8s_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7ll_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu7ll_BFu0s) C1{ Fs:8 FL:7 Fs:0}



static void Test_BFu8s_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu7ll_BFu0s");
    static BFu8s_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7ll_BFu0s(Test_BFu8s_BFu7ll_BFu0s, "BFu8s_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7s_BFu0c  {
  unsigned short v1:8;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu7s_BFu0c) C1{ Fs:8 Fs:7 Fc:0}



static void Test_BFu8s_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu7s_BFu0c");
    static BFu8s_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7s_BFu0c(Test_BFu8s_BFu7s_BFu0c, "BFu8s_BFu7s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7s_BFu0i  {
  unsigned short v1:8;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu7s_BFu0i) C1{ Fs:8 Fs:7 Fi:0}



static void Test_BFu8s_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu7s_BFu0i");
    static BFu8s_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7s_BFu0i(Test_BFu8s_BFu7s_BFu0i, "BFu8s_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7s_BFu0ll  {
  unsigned short v1:8;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu7s_BFu0ll) C1{ Fs:8 Fs:7 FL:0}



static void Test_BFu8s_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu7s_BFu0ll");
    static BFu8s_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7s_BFu0ll(Test_BFu8s_BFu7s_BFu0ll, "BFu8s_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu7s_BFu0s  {
  unsigned short v1:8;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu7s_BFu0s) C1{ Fs:8 Fs:7 Fs:0}



static void Test_BFu8s_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu7s_BFu0s");
    static BFu8s_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu8s_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu8s_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu7s_BFu0s(Test_BFu8s_BFu7s_BFu0s, "BFu8s_BFu7s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8c_BFu0c  {
  unsigned short v1:8;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu8c_BFu0c) C1{ Fs:8 Fc:8 Fc:0}



static void Test_BFu8s_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu8c_BFu0c");
    static BFu8s_BFu8c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu8c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8c_BFu0c(Test_BFu8s_BFu8c_BFu0c, "BFu8s_BFu8c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8c_BFu0i  {
  unsigned short v1:8;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu8c_BFu0i) C1{ Fs:8 Fc:8 Fi:0}



static void Test_BFu8s_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu8c_BFu0i");
    static BFu8s_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8c_BFu0i(Test_BFu8s_BFu8c_BFu0i, "BFu8s_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8c_BFu0ll  {
  unsigned short v1:8;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu8c_BFu0ll) C1{ Fs:8 Fc:8 FL:0}



static void Test_BFu8s_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu8c_BFu0ll");
    static BFu8s_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8c_BFu0ll(Test_BFu8s_BFu8c_BFu0ll, "BFu8s_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8c_BFu0s  {
  unsigned short v1:8;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu8c_BFu0s) C1{ Fs:8 Fc:8 Fs:0}



static void Test_BFu8s_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu8c_BFu0s");
    static BFu8s_BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu8c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8c_BFu0s(Test_BFu8s_BFu8c_BFu0s, "BFu8s_BFu8c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8i_BFu0c  {
  unsigned short v1:8;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu8i_BFu0c) C1{ Fs:8 Fi:8 Fc:0}



static void Test_BFu8s_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu8i_BFu0c");
    static BFu8s_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8i_BFu0c(Test_BFu8s_BFu8i_BFu0c, "BFu8s_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8i_BFu0i  {
  unsigned short v1:8;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu8i_BFu0i) C1{ Fs:8 Fi:8 Fi:0}



static void Test_BFu8s_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu8i_BFu0i");
    static BFu8s_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8i_BFu0i(Test_BFu8s_BFu8i_BFu0i, "BFu8s_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8i_BFu0ll  {
  unsigned short v1:8;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu8i_BFu0ll) C1{ Fs:8 Fi:8 FL:0}



static void Test_BFu8s_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu8i_BFu0ll");
    static BFu8s_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8i_BFu0ll(Test_BFu8s_BFu8i_BFu0ll, "BFu8s_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8i_BFu0s  {
  unsigned short v1:8;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu8i_BFu0s) C1{ Fs:8 Fi:8 Fs:0}



static void Test_BFu8s_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu8i_BFu0s");
    static BFu8s_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8i_BFu0s(Test_BFu8s_BFu8i_BFu0s, "BFu8s_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8ll_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu8ll_BFu0c) C1{ Fs:8 FL:8 Fc:0}



static void Test_BFu8s_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu8ll_BFu0c");
    static BFu8s_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8ll_BFu0c(Test_BFu8s_BFu8ll_BFu0c, "BFu8s_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8ll_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu8ll_BFu0i) C1{ Fs:8 FL:8 Fi:0}



static void Test_BFu8s_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu8ll_BFu0i");
    static BFu8s_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8ll_BFu0i(Test_BFu8s_BFu8ll_BFu0i, "BFu8s_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu8ll_BFu0ll) C1{ Fs:8 FL:8 FL:0}



static void Test_BFu8s_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu8ll_BFu0ll");
    static BFu8s_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8ll_BFu0ll(Test_BFu8s_BFu8ll_BFu0ll, "BFu8s_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8ll_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu8ll_BFu0s) C1{ Fs:8 FL:8 Fs:0}



static void Test_BFu8s_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu8ll_BFu0s");
    static BFu8s_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8ll_BFu0s(Test_BFu8s_BFu8ll_BFu0s, "BFu8s_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8s_BFu0c  {
  unsigned short v1:8;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu8s_BFu0c) C1{ Fs:8 Fs:8 Fc:0}



static void Test_BFu8s_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu8s_BFu0c");
    static BFu8s_BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8s_BFu0c(Test_BFu8s_BFu8s_BFu0c, "BFu8s_BFu8s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8s_BFu0i  {
  unsigned short v1:8;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu8s_BFu0i) C1{ Fs:8 Fs:8 Fi:0}



static void Test_BFu8s_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu8s_BFu0i");
    static BFu8s_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8s_BFu0i(Test_BFu8s_BFu8s_BFu0i, "BFu8s_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8s_BFu0ll  {
  unsigned short v1:8;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu8s_BFu0ll) C1{ Fs:8 Fs:8 FL:0}



static void Test_BFu8s_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu8s_BFu0ll");
    static BFu8s_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8s_BFu0ll(Test_BFu8s_BFu8s_BFu0ll, "BFu8s_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu8s_BFu0s  {
  unsigned short v1:8;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu8s_BFu0s) C1{ Fs:8 Fs:8 Fs:0}



static void Test_BFu8s_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu8s_BFu0s");
    static BFu8s_BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu8s_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu8s_BFu0s(Test_BFu8s_BFu8s_BFu0s, "BFu8s_BFu8s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9i_BFu0c  {
  unsigned short v1:8;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu9i_BFu0c) C1{ Fs:8 Fi:9 Fc:0}



static void Test_BFu8s_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu9i_BFu0c");
    static BFu8s_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9i_BFu0c(Test_BFu8s_BFu9i_BFu0c, "BFu8s_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9i_BFu0i  {
  unsigned short v1:8;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu9i_BFu0i) C1{ Fs:8 Fi:9 Fi:0}



static void Test_BFu8s_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu9i_BFu0i");
    static BFu8s_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9i_BFu0i(Test_BFu8s_BFu9i_BFu0i, "BFu8s_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9i_BFu0ll  {
  unsigned short v1:8;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu9i_BFu0ll) C1{ Fs:8 Fi:9 FL:0}



static void Test_BFu8s_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu9i_BFu0ll");
    static BFu8s_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9i_BFu0ll(Test_BFu8s_BFu9i_BFu0ll, "BFu8s_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9i_BFu0s  {
  unsigned short v1:8;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu9i_BFu0s) C1{ Fs:8 Fi:9 Fs:0}



static void Test_BFu8s_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu9i_BFu0s");
    static BFu8s_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9i_BFu0s(Test_BFu8s_BFu9i_BFu0s, "BFu8s_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9ll_BFu0c  {
  unsigned short v1:8;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu9ll_BFu0c) C1{ Fs:8 FL:9 Fc:0}



static void Test_BFu8s_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu9ll_BFu0c");
    static BFu8s_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9ll_BFu0c(Test_BFu8s_BFu9ll_BFu0c, "BFu8s_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9ll_BFu0i  {
  unsigned short v1:8;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu9ll_BFu0i) C1{ Fs:8 FL:9 Fi:0}



static void Test_BFu8s_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu9ll_BFu0i");
    static BFu8s_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9ll_BFu0i(Test_BFu8s_BFu9ll_BFu0i, "BFu8s_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9ll_BFu0ll  {
  unsigned short v1:8;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu9ll_BFu0ll) C1{ Fs:8 FL:9 FL:0}



static void Test_BFu8s_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu9ll_BFu0ll");
    static BFu8s_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9ll_BFu0ll(Test_BFu8s_BFu9ll_BFu0ll, "BFu8s_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9ll_BFu0s  {
  unsigned short v1:8;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu9ll_BFu0s) C1{ Fs:8 FL:9 Fs:0}



static void Test_BFu8s_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu9ll_BFu0s");
    static BFu8s_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "BFu8s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9ll_BFu0s(Test_BFu8s_BFu9ll_BFu0s, "BFu8s_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9s_BFu0c  {
  unsigned short v1:8;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu8s_BFu9s_BFu0c) C1{ Fs:8 Fs:9 Fc:0}



static void Test_BFu8s_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu8s_BFu9s_BFu0c");
    static BFu8s_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8s_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9s_BFu0c(Test_BFu8s_BFu9s_BFu0c, "BFu8s_BFu9s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9s_BFu0i  {
  unsigned short v1:8;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu8s_BFu9s_BFu0i) C1{ Fs:8 Fs:9 Fi:0}



static void Test_BFu8s_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu8s_BFu9s_BFu0i");
    static BFu8s_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8s_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9s_BFu0i(Test_BFu8s_BFu9s_BFu0i, "BFu8s_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9s_BFu0ll  {
  unsigned short v1:8;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu8s_BFu9s_BFu0ll) C1{ Fs:8 Fs:9 FL:0}



static void Test_BFu8s_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu8s_BFu9s_BFu0ll");
    static BFu8s_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9s_BFu0ll(Test_BFu8s_BFu9s_BFu0ll, "BFu8s_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_BFu9s_BFu0s  {
  unsigned short v1:8;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu8s_BFu9s_BFu0s) C1{ Fs:8 Fs:9 Fs:0}



static void Test_BFu8s_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu8s_BFu9s_BFu0s");
    static BFu8s_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu8s_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu8s_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vBFu8s_BFu9s_BFu0s(Test_BFu8s_BFu9s_BFu0s, "BFu8s_BFu9s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_C_BFu0c  {
  unsigned short v1:8;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu8s_C_BFu0c) C1{ Fs:8 Fc Fc:0}



static void Test_BFu8s_C_BFu0c()
{
  {
    init_simple_test("BFu8s_C_BFu0c");
    static BFu8s_C_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_C_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_C_BFu0c");
    check_field_offset(lv, v2, 1, "BFu8s_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_C_BFu0c(Test_BFu8s_C_BFu0c, "BFu8s_C_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_C_BFu0i  {
  unsigned short v1:8;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu8s_C_BFu0i) C1{ Fs:8 Fc Fi:0}



static void Test_BFu8s_C_BFu0i()
{
  {
    init_simple_test("BFu8s_C_BFu0i");
    static BFu8s_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_C_BFu0i");
    check_field_offset(lv, v2, 1, "BFu8s_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_C_BFu0i(Test_BFu8s_C_BFu0i, "BFu8s_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_C_BFu0ll  {
  unsigned short v1:8;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu8s_C_BFu0ll) C1{ Fs:8 Fc FL:0}



static void Test_BFu8s_C_BFu0ll()
{
  {
    init_simple_test("BFu8s_C_BFu0ll");
    static BFu8s_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_C_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu8s_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_C_BFu0ll(Test_BFu8s_C_BFu0ll, "BFu8s_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_C_BFu0s  {
  unsigned short v1:8;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu8s_C_BFu0s) C1{ Fs:8 Fc Fs:0}



static void Test_BFu8s_C_BFu0s()
{
  {
    init_simple_test("BFu8s_C_BFu0s");
    static BFu8s_C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_C_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_C_BFu0s");
    check_field_offset(lv, v2, 1, "BFu8s_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_C_BFu0s(Test_BFu8s_C_BFu0s, "BFu8s_C_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_D_BFu0c  {
  unsigned short v1:8;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu8s_D_BFu0c) C1{ Fs:8 FL Fc:0}



static void Test_BFu8s_D_BFu0c()
{
  {
    init_simple_test("BFu8s_D_BFu0c");
    static BFu8s_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_D_BFu0c(Test_BFu8s_D_BFu0c, "BFu8s_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_D_BFu0i  {
  unsigned short v1:8;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu8s_D_BFu0i) C1{ Fs:8 FL Fi:0}



static void Test_BFu8s_D_BFu0i()
{
  {
    init_simple_test("BFu8s_D_BFu0i");
    static BFu8s_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_D_BFu0i(Test_BFu8s_D_BFu0i, "BFu8s_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_D_BFu0ll  {
  unsigned short v1:8;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu8s_D_BFu0ll) C1{ Fs:8 FL FL:0}



static void Test_BFu8s_D_BFu0ll()
{
  {
    init_simple_test("BFu8s_D_BFu0ll");
    static BFu8s_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_D_BFu0ll(Test_BFu8s_D_BFu0ll, "BFu8s_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_D_BFu0s  {
  unsigned short v1:8;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu8s_D_BFu0s) C1{ Fs:8 FL Fs:0}



static void Test_BFu8s_D_BFu0s()
{
  {
    init_simple_test("BFu8s_D_BFu0s");
    static BFu8s_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_D_BFu0s(Test_BFu8s_D_BFu0s, "BFu8s_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_F_BFu0c  {
  unsigned short v1:8;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu8s_F_BFu0c) C1{ Fs:8 Fi Fc:0}



static void Test_BFu8s_F_BFu0c()
{
  {
    init_simple_test("BFu8s_F_BFu0c");
    static BFu8s_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8s_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_F_BFu0c(Test_BFu8s_F_BFu0c, "BFu8s_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_F_BFu0i  {
  unsigned short v1:8;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu8s_F_BFu0i) C1{ Fs:8 Fi Fi:0}



static void Test_BFu8s_F_BFu0i()
{
  {
    init_simple_test("BFu8s_F_BFu0i");
    static BFu8s_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8s_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_F_BFu0i(Test_BFu8s_F_BFu0i, "BFu8s_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_F_BFu0ll  {
  unsigned short v1:8;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu8s_F_BFu0ll) C1{ Fs:8 Fi FL:0}



static void Test_BFu8s_F_BFu0ll()
{
  {
    init_simple_test("BFu8s_F_BFu0ll");
    static BFu8s_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8s_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_F_BFu0ll(Test_BFu8s_F_BFu0ll, "BFu8s_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_F_BFu0s  {
  unsigned short v1:8;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu8s_F_BFu0s) C1{ Fs:8 Fi Fs:0}



static void Test_BFu8s_F_BFu0s()
{
  {
    init_simple_test("BFu8s_F_BFu0s");
    static BFu8s_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8s_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_F_BFu0s(Test_BFu8s_F_BFu0s, "BFu8s_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_I_BFu0c  {
  unsigned short v1:8;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu8s_I_BFu0c) C1{ Fs:8 Fi Fc:0}



static void Test_BFu8s_I_BFu0c()
{
  {
    init_simple_test("BFu8s_I_BFu0c");
    static BFu8s_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu8s_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_I_BFu0c(Test_BFu8s_I_BFu0c, "BFu8s_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_I_BFu0i  {
  unsigned short v1:8;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu8s_I_BFu0i) C1{ Fs:8 Fi Fi:0}



static void Test_BFu8s_I_BFu0i()
{
  {
    init_simple_test("BFu8s_I_BFu0i");
    static BFu8s_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu8s_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_I_BFu0i(Test_BFu8s_I_BFu0i, "BFu8s_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_I_BFu0ll  {
  unsigned short v1:8;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu8s_I_BFu0ll) C1{ Fs:8 Fi FL:0}



static void Test_BFu8s_I_BFu0ll()
{
  {
    init_simple_test("BFu8s_I_BFu0ll");
    static BFu8s_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu8s_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu8s_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_I_BFu0ll(Test_BFu8s_I_BFu0ll, "BFu8s_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_I_BFu0s  {
  unsigned short v1:8;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu8s_I_BFu0s) C1{ Fs:8 Fi Fs:0}



static void Test_BFu8s_I_BFu0s()
{
  {
    init_simple_test("BFu8s_I_BFu0s");
    static BFu8s_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu8s_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu8s_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu8s_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_I_BFu0s(Test_BFu8s_I_BFu0s, "BFu8s_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_Ip_BFu0c  {
  unsigned short v1:8;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu8s_Ip_BFu0c) C1{ Fs:8 Fp Fc:0}



static void Test_BFu8s_Ip_BFu0c()
{
  {
    init_simple_test("BFu8s_Ip_BFu0c");
    static BFu8s_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_Ip_BFu0c(Test_BFu8s_Ip_BFu0c, "BFu8s_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_Ip_BFu0i  {
  unsigned short v1:8;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu8s_Ip_BFu0i) C1{ Fs:8 Fp Fi:0}



static void Test_BFu8s_Ip_BFu0i()
{
  {
    init_simple_test("BFu8s_Ip_BFu0i");
    static BFu8s_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_Ip_BFu0i(Test_BFu8s_Ip_BFu0i, "BFu8s_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_Ip_BFu0ll  {
  unsigned short v1:8;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu8s_Ip_BFu0ll) C1{ Fs:8 Fp FL:0}



static void Test_BFu8s_Ip_BFu0ll()
{
  {
    init_simple_test("BFu8s_Ip_BFu0ll");
    static BFu8s_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_Ip_BFu0ll(Test_BFu8s_Ip_BFu0ll, "BFu8s_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_Ip_BFu0s  {
  unsigned short v1:8;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu8s_Ip_BFu0s) C1{ Fs:8 Fp Fs:0}



static void Test_BFu8s_Ip_BFu0s()
{
  {
    init_simple_test("BFu8s_Ip_BFu0s");
    static BFu8s_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu8s_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_Ip_BFu0s(Test_BFu8s_Ip_BFu0s, "BFu8s_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_L_BFu0c  {
  unsigned short v1:8;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu8s_L_BFu0c) C1{ Fs:8 FL Fc:0}



static void Test_BFu8s_L_BFu0c()
{
  {
    init_simple_test("BFu8s_L_BFu0c");
    static BFu8s_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_L_BFu0c(Test_BFu8s_L_BFu0c, "BFu8s_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_L_BFu0i  {
  unsigned short v1:8;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu8s_L_BFu0i) C1{ Fs:8 FL Fi:0}



static void Test_BFu8s_L_BFu0i()
{
  {
    init_simple_test("BFu8s_L_BFu0i");
    static BFu8s_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_L_BFu0i(Test_BFu8s_L_BFu0i, "BFu8s_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_L_BFu0ll  {
  unsigned short v1:8;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu8s_L_BFu0ll) C1{ Fs:8 FL FL:0}



static void Test_BFu8s_L_BFu0ll()
{
  {
    init_simple_test("BFu8s_L_BFu0ll");
    static BFu8s_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_L_BFu0ll(Test_BFu8s_L_BFu0ll, "BFu8s_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_L_BFu0s  {
  unsigned short v1:8;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu8s_L_BFu0s) C1{ Fs:8 FL Fs:0}



static void Test_BFu8s_L_BFu0s()
{
  {
    init_simple_test("BFu8s_L_BFu0s");
    static BFu8s_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu8s_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu8s_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu8s_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_L_BFu0s(Test_BFu8s_L_BFu0s, "BFu8s_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_S_BFu0c  {
  unsigned short v1:8;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu8s_S_BFu0c) C1{ Fs:8 Fs Fc:0}



static void Test_BFu8s_S_BFu0c()
{
  {
    init_simple_test("BFu8s_S_BFu0c");
    static BFu8s_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu8s_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_S_BFu0c(Test_BFu8s_S_BFu0c, "BFu8s_S_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_S_BFu0i  {
  unsigned short v1:8;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu8s_S_BFu0i) C1{ Fs:8 Fs Fi:0}



static void Test_BFu8s_S_BFu0i()
{
  {
    init_simple_test("BFu8s_S_BFu0i");
    static BFu8s_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu8s_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_S_BFu0i(Test_BFu8s_S_BFu0i, "BFu8s_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_S_BFu0ll  {
  unsigned short v1:8;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu8s_S_BFu0ll) C1{ Fs:8 Fs FL:0}



static void Test_BFu8s_S_BFu0ll()
{
  {
    init_simple_test("BFu8s_S_BFu0ll");
    static BFu8s_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu8s_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_S_BFu0ll(Test_BFu8s_S_BFu0ll, "BFu8s_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_S_BFu0s  {
  unsigned short v1:8;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu8s_S_BFu0s) C1{ Fs:8 Fs Fs:0}



static void Test_BFu8s_S_BFu0s()
{
  {
    init_simple_test("BFu8s_S_BFu0s");
    static BFu8s_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu8s_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_S_BFu0s(Test_BFu8s_S_BFu0s, "BFu8s_S_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_Uc_BFu0c  {
  unsigned short v1:8;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu8s_Uc_BFu0c) C1{ Fs:8 Fc Fc:0}



static void Test_BFu8s_Uc_BFu0c()
{
  {
    init_simple_test("BFu8s_Uc_BFu0c");
    static BFu8s_Uc_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_Uc_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_Uc_BFu0c");
    check_field_offset(lv, v2, 1, "BFu8s_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_Uc_BFu0c(Test_BFu8s_Uc_BFu0c, "BFu8s_Uc_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_Uc_BFu0i  {
  unsigned short v1:8;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu8s_Uc_BFu0i) C1{ Fs:8 Fc Fi:0}



static void Test_BFu8s_Uc_BFu0i()
{
  {
    init_simple_test("BFu8s_Uc_BFu0i");
    static BFu8s_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu8s_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_Uc_BFu0i");
    check_field_offset(lv, v2, 1, "BFu8s_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_Uc_BFu0i(Test_BFu8s_Uc_BFu0i, "BFu8s_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_Uc_BFu0ll  {
  unsigned short v1:8;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu8s_Uc_BFu0ll) C1{ Fs:8 Fc FL:0}



static void Test_BFu8s_Uc_BFu0ll()
{
  {
    init_simple_test("BFu8s_Uc_BFu0ll");
    static BFu8s_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu8s_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu8s_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_Uc_BFu0ll");
    check_field_offset(lv, v2, 1, "BFu8s_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_Uc_BFu0ll(Test_BFu8s_Uc_BFu0ll, "BFu8s_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu8s_Uc_BFu0s  {
  unsigned short v1:8;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu8s_Uc_BFu0s) C1{ Fs:8 Fc Fs:0}



static void Test_BFu8s_Uc_BFu0s()
{
  {
    init_simple_test("BFu8s_Uc_BFu0s");
    static BFu8s_Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu8s_Uc_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu8s_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFu8s_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_ull(1LL<<7), "BFu8s_Uc_BFu0s");
    check_field_offset(lv, v2, 1, "BFu8s_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vBFu8s_Uc_BFu0s(Test_BFu8s_Uc_BFu0s, "BFu8s_Uc_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

