// This file is distributed under the University of Illinois Open Source License.
// See LICENSE.TXT for details.
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: 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  L_BFu8c_BFu0c  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 L_BFu8c_BFu0c) C1{ FL Fc:8 Fc:0}



static void Test_L_BFu8c_BFu0c()
{
  {
    init_simple_test("L_BFu8c_BFu0c");
    static L_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vL_BFu8c_BFu0c(Test_L_BFu8c_BFu0c, "L_BFu8c_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8c_BFu0i  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 L_BFu8c_BFu0i) C1{ FL Fc:8 Fi:0}



static void Test_L_BFu8c_BFu0i()
{
  {
    init_simple_test("L_BFu8c_BFu0i");
    static L_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vL_BFu8c_BFu0i(Test_L_BFu8c_BFu0i, "L_BFu8c_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8c_BFu0ll  {
  __tsi64 v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 L_BFu8c_BFu0ll) C1{ FL Fc:8 FL:0}



static void Test_L_BFu8c_BFu0ll()
{
  {
    init_simple_test("L_BFu8c_BFu0ll");
    static L_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vL_BFu8c_BFu0ll(Test_L_BFu8c_BFu0ll, "L_BFu8c_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8c_BFu0s  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 L_BFu8c_BFu0s) C1{ FL Fc:8 Fs:0}



static void Test_L_BFu8c_BFu0s()
{
  {
    init_simple_test("L_BFu8c_BFu0s");
    static L_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vL_BFu8c_BFu0s(Test_L_BFu8c_BFu0s, "L_BFu8c_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8i_BFu0c  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 L_BFu8i_BFu0c) C1{ FL Fi:8 Fc:0}



static void Test_L_BFu8i_BFu0c()
{
  {
    init_simple_test("L_BFu8i_BFu0c");
    static L_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vL_BFu8i_BFu0c(Test_L_BFu8i_BFu0c, "L_BFu8i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8i_BFu0i  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 L_BFu8i_BFu0i) C1{ FL Fi:8 Fi:0}



static void Test_L_BFu8i_BFu0i()
{
  {
    init_simple_test("L_BFu8i_BFu0i");
    static L_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vL_BFu8i_BFu0i(Test_L_BFu8i_BFu0i, "L_BFu8i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8i_BFu0ll  {
  __tsi64 v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 L_BFu8i_BFu0ll) C1{ FL Fi:8 FL:0}



static void Test_L_BFu8i_BFu0ll()
{
  {
    init_simple_test("L_BFu8i_BFu0ll");
    static L_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vL_BFu8i_BFu0ll(Test_L_BFu8i_BFu0ll, "L_BFu8i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8i_BFu0s  {
  __tsi64 v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 L_BFu8i_BFu0s) C1{ FL Fi:8 Fs:0}



static void Test_L_BFu8i_BFu0s()
{
  {
    init_simple_test("L_BFu8i_BFu0s");
    static L_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vL_BFu8i_BFu0s(Test_L_BFu8i_BFu0s, "L_BFu8i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8ll_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 L_BFu8ll_BFu0c) C1{ FL FL:8 Fc:0}



static void Test_L_BFu8ll_BFu0c()
{
  {
    init_simple_test("L_BFu8ll_BFu0c");
    static L_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vL_BFu8ll_BFu0c(Test_L_BFu8ll_BFu0c, "L_BFu8ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8ll_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 L_BFu8ll_BFu0i) C1{ FL FL:8 Fi:0}



static void Test_L_BFu8ll_BFu0i()
{
  {
    init_simple_test("L_BFu8ll_BFu0i");
    static L_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vL_BFu8ll_BFu0i(Test_L_BFu8ll_BFu0i, "L_BFu8ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8ll_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 L_BFu8ll_BFu0ll) C1{ FL FL:8 FL:0}



static void Test_L_BFu8ll_BFu0ll()
{
  {
    init_simple_test("L_BFu8ll_BFu0ll");
    static L_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vL_BFu8ll_BFu0ll(Test_L_BFu8ll_BFu0ll, "L_BFu8ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8ll_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 L_BFu8ll_BFu0s) C1{ FL FL:8 Fs:0}



static void Test_L_BFu8ll_BFu0s()
{
  {
    init_simple_test("L_BFu8ll_BFu0s");
    static L_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vL_BFu8ll_BFu0s(Test_L_BFu8ll_BFu0s, "L_BFu8ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8s_BFu0c  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 L_BFu8s_BFu0c) C1{ FL Fs:8 Fc:0}



static void Test_L_BFu8s_BFu0c()
{
  {
    init_simple_test("L_BFu8s_BFu0c");
    static L_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vL_BFu8s_BFu0c(Test_L_BFu8s_BFu0c, "L_BFu8s_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8s_BFu0i  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 L_BFu8s_BFu0i) C1{ FL Fs:8 Fi:0}



static void Test_L_BFu8s_BFu0i()
{
  {
    init_simple_test("L_BFu8s_BFu0i");
    static L_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vL_BFu8s_BFu0i(Test_L_BFu8s_BFu0i, "L_BFu8s_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8s_BFu0ll  {
  __tsi64 v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 L_BFu8s_BFu0ll) C1{ FL Fs:8 FL:0}



static void Test_L_BFu8s_BFu0ll()
{
  {
    init_simple_test("L_BFu8s_BFu0ll");
    static L_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vL_BFu8s_BFu0ll(Test_L_BFu8s_BFu0ll, "L_BFu8s_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu8s_BFu0s  {
  __tsi64 v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 L_BFu8s_BFu0s) C1{ FL Fs:8 Fs:0}



static void Test_L_BFu8s_BFu0s()
{
  {
    init_simple_test("L_BFu8s_BFu0s");
    static L_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vL_BFu8s_BFu0s(Test_L_BFu8s_BFu0s, "L_BFu8s_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9i_BFu0c  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 L_BFu9i_BFu0c) C1{ FL Fi:9 Fc:0}



static void Test_L_BFu9i_BFu0c()
{
  {
    init_simple_test("L_BFu9i_BFu0c");
    static L_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vL_BFu9i_BFu0c(Test_L_BFu9i_BFu0c, "L_BFu9i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9i_BFu0i  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 L_BFu9i_BFu0i) C1{ FL Fi:9 Fi:0}



static void Test_L_BFu9i_BFu0i()
{
  {
    init_simple_test("L_BFu9i_BFu0i");
    static L_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vL_BFu9i_BFu0i(Test_L_BFu9i_BFu0i, "L_BFu9i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9i_BFu0ll  {
  __tsi64 v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 L_BFu9i_BFu0ll) C1{ FL Fi:9 FL:0}



static void Test_L_BFu9i_BFu0ll()
{
  {
    init_simple_test("L_BFu9i_BFu0ll");
    static L_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vL_BFu9i_BFu0ll(Test_L_BFu9i_BFu0ll, "L_BFu9i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9i_BFu0s  {
  __tsi64 v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 L_BFu9i_BFu0s) C1{ FL Fi:9 Fs:0}



static void Test_L_BFu9i_BFu0s()
{
  {
    init_simple_test("L_BFu9i_BFu0s");
    static L_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vL_BFu9i_BFu0s(Test_L_BFu9i_BFu0s, "L_BFu9i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9ll_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 L_BFu9ll_BFu0c) C1{ FL FL:9 Fc:0}



static void Test_L_BFu9ll_BFu0c()
{
  {
    init_simple_test("L_BFu9ll_BFu0c");
    static L_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vL_BFu9ll_BFu0c(Test_L_BFu9ll_BFu0c, "L_BFu9ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9ll_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 L_BFu9ll_BFu0i) C1{ FL FL:9 Fi:0}



static void Test_L_BFu9ll_BFu0i()
{
  {
    init_simple_test("L_BFu9ll_BFu0i");
    static L_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vL_BFu9ll_BFu0i(Test_L_BFu9ll_BFu0i, "L_BFu9ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9ll_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 L_BFu9ll_BFu0ll) C1{ FL FL:9 FL:0}



static void Test_L_BFu9ll_BFu0ll()
{
  {
    init_simple_test("L_BFu9ll_BFu0ll");
    static L_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vL_BFu9ll_BFu0ll(Test_L_BFu9ll_BFu0ll, "L_BFu9ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9ll_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 L_BFu9ll_BFu0s) C1{ FL FL:9 Fs:0}



static void Test_L_BFu9ll_BFu0s()
{
  {
    init_simple_test("L_BFu9ll_BFu0s");
    static L_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vL_BFu9ll_BFu0s(Test_L_BFu9ll_BFu0s, "L_BFu9ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9s_BFu0c  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 L_BFu9s_BFu0c) C1{ FL Fs:9 Fc:0}



static void Test_L_BFu9s_BFu0c()
{
  {
    init_simple_test("L_BFu9s_BFu0c");
    static L_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vL_BFu9s_BFu0c(Test_L_BFu9s_BFu0c, "L_BFu9s_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9s_BFu0i  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 L_BFu9s_BFu0i) C1{ FL Fs:9 Fi:0}



static void Test_L_BFu9s_BFu0i()
{
  {
    init_simple_test("L_BFu9s_BFu0i");
    static L_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vL_BFu9s_BFu0i(Test_L_BFu9s_BFu0i, "L_BFu9s_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9s_BFu0ll  {
  __tsi64 v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 L_BFu9s_BFu0ll) C1{ FL Fs:9 FL:0}



static void Test_L_BFu9s_BFu0ll()
{
  {
    init_simple_test("L_BFu9s_BFu0ll");
    static L_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vL_BFu9s_BFu0ll(Test_L_BFu9s_BFu0ll, "L_BFu9s_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_BFu9s_BFu0s  {
  __tsi64 v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 L_BFu9s_BFu0s) C1{ FL Fs:9 Fs:0}



static void Test_L_BFu9s_BFu0s()
{
  {
    init_simple_test("L_BFu9s_BFu0s");
    static L_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vL_BFu9s_BFu0s(Test_L_BFu9s_BFu0s, "L_BFu9s_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_C_BFu0c  {
  __tsi64 v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 L_C_BFu0c) C1{ FL Fc Fc:0}



static void Test_L_C_BFu0c()
{
  {
    init_simple_test("L_C_BFu0c");
    static L_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu0c)");
    check_field_offset(lv, v1, 0, "L_C_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_C_BFu0c(Test_L_C_BFu0c, "L_C_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_C_BFu0i  {
  __tsi64 v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 L_C_BFu0i) C1{ FL Fc Fi:0}



static void Test_L_C_BFu0i()
{
  {
    init_simple_test("L_C_BFu0i");
    static L_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu0i)");
    check_field_offset(lv, v1, 0, "L_C_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_C_BFu0i(Test_L_C_BFu0i, "L_C_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_C_BFu0ll  {
  __tsi64 v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 L_C_BFu0ll) C1{ FL Fc FL:0}



static void Test_L_C_BFu0ll()
{
  {
    init_simple_test("L_C_BFu0ll");
    static L_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_C_BFu0ll(Test_L_C_BFu0ll, "L_C_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_C_BFu0s  {
  __tsi64 v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 L_C_BFu0s) C1{ FL Fc Fs:0}



static void Test_L_C_BFu0s()
{
  {
    init_simple_test("L_C_BFu0s");
    static L_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu0s)");
    check_field_offset(lv, v1, 0, "L_C_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_C_BFu0s(Test_L_C_BFu0s, "L_C_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_D_BFu0c  {
  __tsi64 v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 L_D_BFu0c) C1{ FL[2] Fc:0}



static void Test_L_D_BFu0c()
{
  {
    init_simple_test("L_D_BFu0c");
    static L_D_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(L_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu0c)");
    check_field_offset(lv, v1, 0, "L_D_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_D_BFu0c(Test_L_D_BFu0c, "L_D_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_D_BFu0i  {
  __tsi64 v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 L_D_BFu0i) C1{ FL[2] Fi:0}



static void Test_L_D_BFu0i()
{
  {
    init_simple_test("L_D_BFu0i");
    static L_D_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(L_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu0i)");
    check_field_offset(lv, v1, 0, "L_D_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_D_BFu0i(Test_L_D_BFu0i, "L_D_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_D_BFu0ll  {
  __tsi64 v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 L_D_BFu0ll) C1{ FL[2] FL:0}



static void Test_L_D_BFu0ll()
{
  {
    init_simple_test("L_D_BFu0ll");
    static L_D_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(L_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_D_BFu0ll(Test_L_D_BFu0ll, "L_D_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_D_BFu0s  {
  __tsi64 v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 L_D_BFu0s) C1{ FL[2] Fs:0}



static void Test_L_D_BFu0s()
{
  {
    init_simple_test("L_D_BFu0s");
    static L_D_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(L_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu0s)");
    check_field_offset(lv, v1, 0, "L_D_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_D_BFu0s(Test_L_D_BFu0s, "L_D_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_F_BFu0c  {
  __tsi64 v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 L_F_BFu0c) C1{ FL Fi Fc:0}



static void Test_L_F_BFu0c()
{
  {
    init_simple_test("L_F_BFu0c");
    static L_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu0c)");
    check_field_offset(lv, v1, 0, "L_F_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_F_BFu0c(Test_L_F_BFu0c, "L_F_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_F_BFu0i  {
  __tsi64 v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 L_F_BFu0i) C1{ FL Fi Fi:0}



static void Test_L_F_BFu0i()
{
  {
    init_simple_test("L_F_BFu0i");
    static L_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu0i)");
    check_field_offset(lv, v1, 0, "L_F_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_F_BFu0i(Test_L_F_BFu0i, "L_F_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_F_BFu0ll  {
  __tsi64 v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 L_F_BFu0ll) C1{ FL Fi FL:0}



static void Test_L_F_BFu0ll()
{
  {
    init_simple_test("L_F_BFu0ll");
    static L_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_F_BFu0ll(Test_L_F_BFu0ll, "L_F_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_F_BFu0s  {
  __tsi64 v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 L_F_BFu0s) C1{ FL Fi Fs:0}



static void Test_L_F_BFu0s()
{
  {
    init_simple_test("L_F_BFu0s");
    static L_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu0s)");
    check_field_offset(lv, v1, 0, "L_F_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_F_BFu0s(Test_L_F_BFu0s, "L_F_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_I_BFu0c  {
  __tsi64 v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 L_I_BFu0c) C1{ FL Fi Fc:0}



static void Test_L_I_BFu0c()
{
  {
    init_simple_test("L_I_BFu0c");
    static L_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu0c)");
    check_field_offset(lv, v1, 0, "L_I_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_I_BFu0c(Test_L_I_BFu0c, "L_I_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_I_BFu0i  {
  __tsi64 v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 L_I_BFu0i) C1{ FL Fi Fi:0}



static void Test_L_I_BFu0i()
{
  {
    init_simple_test("L_I_BFu0i");
    static L_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu0i)");
    check_field_offset(lv, v1, 0, "L_I_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_I_BFu0i(Test_L_I_BFu0i, "L_I_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_I_BFu0ll  {
  __tsi64 v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 L_I_BFu0ll) C1{ FL Fi FL:0}



static void Test_L_I_BFu0ll()
{
  {
    init_simple_test("L_I_BFu0ll");
    static L_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_I_BFu0ll(Test_L_I_BFu0ll, "L_I_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_I_BFu0s  {
  __tsi64 v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 L_I_BFu0s) C1{ FL Fi Fs:0}



static void Test_L_I_BFu0s()
{
  {
    init_simple_test("L_I_BFu0s");
    static L_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu0s)");
    check_field_offset(lv, v1, 0, "L_I_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_I_BFu0s(Test_L_I_BFu0s, "L_I_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ip_BFu0c  {
  __tsi64 v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 L_Ip_BFu0c) C1{ FL Fp Fc:0}



static void Test_L_Ip_BFu0c()
{
  {
    init_simple_test("L_Ip_BFu0c");
    static L_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_Ip_BFu0c(Test_L_Ip_BFu0c, "L_Ip_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ip_BFu0i  {
  __tsi64 v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 L_Ip_BFu0i) C1{ FL Fp Fi:0}



static void Test_L_Ip_BFu0i()
{
  {
    init_simple_test("L_Ip_BFu0i");
    static L_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_Ip_BFu0i(Test_L_Ip_BFu0i, "L_Ip_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ip_BFu0ll  {
  __tsi64 v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 L_Ip_BFu0ll) C1{ FL Fp FL:0}



static void Test_L_Ip_BFu0ll()
{
  {
    init_simple_test("L_Ip_BFu0ll");
    static L_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_Ip_BFu0ll(Test_L_Ip_BFu0ll, "L_Ip_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ip_BFu0s  {
  __tsi64 v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 L_Ip_BFu0s) C1{ FL Fp Fs:0}



static void Test_L_Ip_BFu0s()
{
  {
    init_simple_test("L_Ip_BFu0s");
    static L_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_Ip_BFu0s(Test_L_Ip_BFu0s, "L_Ip_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_L_BFu0c  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 L_L_BFu0c) C1{ FL[2] Fc:0}



static void Test_L_L_BFu0c()
{
  {
    init_simple_test("L_L_BFu0c");
    static L_L_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(L_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu0c)");
    check_field_offset(lv, v1, 0, "L_L_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_L_BFu0c(Test_L_L_BFu0c, "L_L_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_L_BFu0i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 L_L_BFu0i) C1{ FL[2] Fi:0}



static void Test_L_L_BFu0i()
{
  {
    init_simple_test("L_L_BFu0i");
    static L_L_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(L_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu0i)");
    check_field_offset(lv, v1, 0, "L_L_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_L_BFu0i(Test_L_L_BFu0i, "L_L_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_L_BFu0ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 L_L_BFu0ll) C1{ FL[2] FL:0}



static void Test_L_L_BFu0ll()
{
  {
    init_simple_test("L_L_BFu0ll");
    static L_L_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(L_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_L_BFu0ll(Test_L_L_BFu0ll, "L_L_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_L_BFu0s  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 L_L_BFu0s) C1{ FL[2] Fs:0}



static void Test_L_L_BFu0s()
{
  {
    init_simple_test("L_L_BFu0s");
    static L_L_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(L_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu0s)");
    check_field_offset(lv, v1, 0, "L_L_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_L_BFu0s(Test_L_L_BFu0s, "L_L_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_S_BFu0c  {
  __tsi64 v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 L_S_BFu0c) C1{ FL Fs Fc:0}



static void Test_L_S_BFu0c()
{
  {
    init_simple_test("L_S_BFu0c");
    static L_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu0c)");
    check_field_offset(lv, v1, 0, "L_S_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_S_BFu0c(Test_L_S_BFu0c, "L_S_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_S_BFu0i  {
  __tsi64 v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 L_S_BFu0i) C1{ FL Fs Fi:0}



static void Test_L_S_BFu0i()
{
  {
    init_simple_test("L_S_BFu0i");
    static L_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu0i)");
    check_field_offset(lv, v1, 0, "L_S_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_S_BFu0i(Test_L_S_BFu0i, "L_S_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_S_BFu0ll  {
  __tsi64 v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 L_S_BFu0ll) C1{ FL Fs FL:0}



static void Test_L_S_BFu0ll()
{
  {
    init_simple_test("L_S_BFu0ll");
    static L_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_S_BFu0ll(Test_L_S_BFu0ll, "L_S_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_S_BFu0s  {
  __tsi64 v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 L_S_BFu0s) C1{ FL Fs Fs:0}



static void Test_L_S_BFu0s()
{
  {
    init_simple_test("L_S_BFu0s");
    static L_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu0s)");
    check_field_offset(lv, v1, 0, "L_S_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_S_BFu0s(Test_L_S_BFu0s, "L_S_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Uc_BFu0c  {
  __tsi64 v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 L_Uc_BFu0c) C1{ FL Fc Fc:0}



static void Test_L_Uc_BFu0c()
{
  {
    init_simple_test("L_Uc_BFu0c");
    static L_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_Uc_BFu0c(Test_L_Uc_BFu0c, "L_Uc_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Uc_BFu0i  {
  __tsi64 v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 L_Uc_BFu0i) C1{ FL Fc Fi:0}



static void Test_L_Uc_BFu0i()
{
  {
    init_simple_test("L_Uc_BFu0i");
    static L_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_Uc_BFu0i(Test_L_Uc_BFu0i, "L_Uc_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Uc_BFu0ll  {
  __tsi64 v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 L_Uc_BFu0ll) C1{ FL Fc FL:0}



static void Test_L_Uc_BFu0ll()
{
  {
    init_simple_test("L_Uc_BFu0ll");
    static L_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_Uc_BFu0ll(Test_L_Uc_BFu0ll, "L_Uc_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Uc_BFu0s  {
  __tsi64 v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 L_Uc_BFu0s) C1{ FL Fc Fs:0}



static void Test_L_Uc_BFu0s()
{
  {
    init_simple_test("L_Uc_BFu0s");
    static L_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_Uc_BFu0s(Test_L_Uc_BFu0s, "L_Uc_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ui_BFu0c  {
  __tsi64 v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 L_Ui_BFu0c) C1{ FL Fi Fc:0}



static void Test_L_Ui_BFu0c()
{
  {
    init_simple_test("L_Ui_BFu0c");
    static L_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_Ui_BFu0c(Test_L_Ui_BFu0c, "L_Ui_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ui_BFu0i  {
  __tsi64 v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 L_Ui_BFu0i) C1{ FL Fi Fi:0}



static void Test_L_Ui_BFu0i()
{
  {
    init_simple_test("L_Ui_BFu0i");
    static L_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_Ui_BFu0i(Test_L_Ui_BFu0i, "L_Ui_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ui_BFu0ll  {
  __tsi64 v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 L_Ui_BFu0ll) C1{ FL Fi FL:0}



static void Test_L_Ui_BFu0ll()
{
  {
    init_simple_test("L_Ui_BFu0ll");
    static L_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_Ui_BFu0ll(Test_L_Ui_BFu0ll, "L_Ui_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ui_BFu0s  {
  __tsi64 v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 L_Ui_BFu0s) C1{ FL Fi Fs:0}



static void Test_L_Ui_BFu0s()
{
  {
    init_simple_test("L_Ui_BFu0s");
    static L_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_Ui_BFu0s(Test_L_Ui_BFu0s, "L_Ui_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ul_BFu0c  {
  __tsi64 v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 L_Ul_BFu0c) C1{ FL[2] Fc:0}



static void Test_L_Ul_BFu0c()
{
  {
    init_simple_test("L_Ul_BFu0c");
    static L_Ul_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(L_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Ul_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_Ul_BFu0c(Test_L_Ul_BFu0c, "L_Ul_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ul_BFu0i  {
  __tsi64 v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 L_Ul_BFu0i) C1{ FL[2] Fi:0}



static void Test_L_Ul_BFu0i()
{
  {
    init_simple_test("L_Ul_BFu0i");
    static L_Ul_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(L_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Ul_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_Ul_BFu0i(Test_L_Ul_BFu0i, "L_Ul_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ul_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 L_Ul_BFu0ll) C1{ FL[2] FL:0}



static void Test_L_Ul_BFu0ll()
{
  {
    init_simple_test("L_Ul_BFu0ll");
    static L_Ul_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(L_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_Ul_BFu0ll(Test_L_Ul_BFu0ll, "L_Ul_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Ul_BFu0s  {
  __tsi64 v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 L_Ul_BFu0s) C1{ FL[2] Fs:0}



static void Test_L_Ul_BFu0s()
{
  {
    init_simple_test("L_Ul_BFu0s");
    static L_Ul_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(L_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Ul_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_Ul_BFu0s(Test_L_Ul_BFu0s, "L_Ul_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Us_BFu0c  {
  __tsi64 v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 L_Us_BFu0c) C1{ FL Fs Fc:0}



static void Test_L_Us_BFu0c()
{
  {
    init_simple_test("L_Us_BFu0c");
    static L_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Us_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_Us_BFu0c(Test_L_Us_BFu0c, "L_Us_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Us_BFu0i  {
  __tsi64 v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 L_Us_BFu0i) C1{ FL Fs Fi:0}



static void Test_L_Us_BFu0i()
{
  {
    init_simple_test("L_Us_BFu0i");
    static L_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Us_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_Us_BFu0i(Test_L_Us_BFu0i, "L_Us_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Us_BFu0ll  {
  __tsi64 v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 L_Us_BFu0ll) C1{ FL Fs FL:0}



static void Test_L_Us_BFu0ll()
{
  {
    init_simple_test("L_Us_BFu0ll");
    static L_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_Us_BFu0ll(Test_L_Us_BFu0ll, "L_Us_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Us_BFu0s  {
  __tsi64 v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 L_Us_BFu0s) C1{ FL Fs Fs:0}



static void Test_L_Us_BFu0s()
{
  {
    init_simple_test("L_Us_BFu0s");
    static L_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Us_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_Us_BFu0s(Test_L_Us_BFu0s, "L_Us_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Vp_BFu0c  {
  __tsi64 v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 L_Vp_BFu0c) C1{ FL Fp Fc:0}



static void Test_L_Vp_BFu0c()
{
  {
    init_simple_test("L_Vp_BFu0c");
    static L_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Vp_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vL_Vp_BFu0c(Test_L_Vp_BFu0c, "L_Vp_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Vp_BFu0i  {
  __tsi64 v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 L_Vp_BFu0i) C1{ FL Fp Fi:0}



static void Test_L_Vp_BFu0i()
{
  {
    init_simple_test("L_Vp_BFu0i");
    static L_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Vp_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vL_Vp_BFu0i(Test_L_Vp_BFu0i, "L_Vp_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Vp_BFu0ll  {
  __tsi64 v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 L_Vp_BFu0ll) C1{ FL Fp FL:0}



static void Test_L_Vp_BFu0ll()
{
  {
    init_simple_test("L_Vp_BFu0ll");
    static L_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vL_Vp_BFu0ll(Test_L_Vp_BFu0ll, "L_Vp_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  L_Vp_BFu0s  {
  __tsi64 v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 L_Vp_BFu0s) C1{ FL Fp Fs:0}



static void Test_L_Vp_BFu0s()
{
  {
    init_simple_test("L_Vp_BFu0s");
    static L_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Vp_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vL_Vp_BFu0s(Test_L_Vp_BFu0s, "L_Vp_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c  {
  short v1;
  unsigned char  :0;
};
//SIG(1 S_BFu0c) C1{ Fs Fc:0}



static void Test_S_BFu0c()
{
  {
    init_simple_test("S_BFu0c");
    static S_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0c(Test_S_BFu0c, "S_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu0c  {
  short v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 S_BFu0c_BFu0c) C1{ Fs Fc:0 Fc:0}



static void Test_S_BFu0c_BFu0c()
{
  {
    init_simple_test("S_BFu0c_BFu0c");
    static S_BFu0c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu0c(Test_S_BFu0c_BFu0c, "S_BFu0c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu0i  {
  short v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 S_BFu0c_BFu0i) C1{ Fs Fc:0 Fi:0}



static void Test_S_BFu0c_BFu0i()
{
  {
    init_simple_test("S_BFu0c_BFu0i");
    static S_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu0i(Test_S_BFu0c_BFu0i, "S_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu0ll  {
  short v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 S_BFu0c_BFu0ll) C1{ Fs Fc:0 FL:0}



static void Test_S_BFu0c_BFu0ll()
{
  {
    init_simple_test("S_BFu0c_BFu0ll");
    static S_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu0ll(Test_S_BFu0c_BFu0ll, "S_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu0s  {
  short v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 S_BFu0c_BFu0s) C1{ Fs Fc:0 Fs:0}



static void Test_S_BFu0c_BFu0s()
{
  {
    init_simple_test("S_BFu0c_BFu0s");
    static S_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu0s(Test_S_BFu0c_BFu0s, "S_BFu0c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu15i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 S_BFu0c_BFu15i) C1{ Fs Fc:0 Fi:15}



static void Test_S_BFu0c_BFu15i()
{
  {
    init_simple_test("S_BFu0c_BFu15i");
    static S_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu15i(Test_S_BFu0c_BFu15i, "S_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu15ll  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 S_BFu0c_BFu15ll) C1{ Fs Fc:0 FL:15}



static void Test_S_BFu0c_BFu15ll()
{
  {
    init_simple_test("S_BFu0c_BFu15ll");
    static S_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu15ll(Test_S_BFu0c_BFu15ll, "S_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu15s  {
  short v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 S_BFu0c_BFu15s) C1{ Fs Fc:0 Fs:15}



static void Test_S_BFu0c_BFu15s()
{
  {
    init_simple_test("S_BFu0c_BFu15s");
    static S_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu15s(Test_S_BFu0c_BFu15s, "S_BFu0c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu16i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 S_BFu0c_BFu16i) C1{ Fs Fc:0 Fi:16}



static void Test_S_BFu0c_BFu16i()
{
  {
    init_simple_test("S_BFu0c_BFu16i");
    static S_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu16i(Test_S_BFu0c_BFu16i, "S_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu16ll  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 S_BFu0c_BFu16ll) C1{ Fs Fc:0 FL:16}



static void Test_S_BFu0c_BFu16ll()
{
  {
    init_simple_test("S_BFu0c_BFu16ll");
    static S_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu16ll(Test_S_BFu0c_BFu16ll, "S_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu16s  {
  short v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 S_BFu0c_BFu16s) C1{ Fs Fc:0 Fs:16}



static void Test_S_BFu0c_BFu16s()
{
  {
    init_simple_test("S_BFu0c_BFu16s");
    static S_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu16s(Test_S_BFu0c_BFu16s, "S_BFu0c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu17i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 S_BFu0c_BFu17i) C1{ Fs Fc:0 Fi:17}



static void Test_S_BFu0c_BFu17i()
{
  {
    init_simple_test("S_BFu0c_BFu17i");
    static S_BFu0c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "S_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "S_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu17i(Test_S_BFu0c_BFu17i, "S_BFu0c_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu17ll  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 S_BFu0c_BFu17ll) C1{ Fs Fc:0 FL:17}



static void Test_S_BFu0c_BFu17ll()
{
  {
    init_simple_test("S_BFu0c_BFu17ll");
    static S_BFu0c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "S_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "S_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu17ll(Test_S_BFu0c_BFu17ll, "S_BFu0c_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu1c  {
  short v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 S_BFu0c_BFu1c) C1{ Fs Fc:0 Fc:1}



static void Test_S_BFu0c_BFu1c()
{
  {
    init_simple_test("S_BFu0c_BFu1c");
    static S_BFu0c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu1c(Test_S_BFu0c_BFu1c, "S_BFu0c_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu1i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 S_BFu0c_BFu1i) C1{ Fs Fc:0 Fi:1}



static void Test_S_BFu0c_BFu1i()
{
  {
    init_simple_test("S_BFu0c_BFu1i");
    static S_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu1i(Test_S_BFu0c_BFu1i, "S_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu1ll  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 S_BFu0c_BFu1ll) C1{ Fs Fc:0 FL:1}



static void Test_S_BFu0c_BFu1ll()
{
  {
    init_simple_test("S_BFu0c_BFu1ll");
    static S_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu1ll(Test_S_BFu0c_BFu1ll, "S_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu1s  {
  short v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 S_BFu0c_BFu1s) C1{ Fs Fc:0 Fs:1}



static void Test_S_BFu0c_BFu1s()
{
  {
    init_simple_test("S_BFu0c_BFu1s");
    static S_BFu0c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu1s(Test_S_BFu0c_BFu1s, "S_BFu0c_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu31i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 S_BFu0c_BFu31i) C1{ Fs Fc:0 Fi:31}



static void Test_S_BFu0c_BFu31i()
{
  {
    init_simple_test("S_BFu0c_BFu31i");
    static S_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "S_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "S_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu31i(Test_S_BFu0c_BFu31i, "S_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu31ll  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 S_BFu0c_BFu31ll) C1{ Fs Fc:0 FL:31}



static void Test_S_BFu0c_BFu31ll()
{
  {
    init_simple_test("S_BFu0c_BFu31ll");
    static S_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "S_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "S_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu31ll(Test_S_BFu0c_BFu31ll, "S_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu32i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 S_BFu0c_BFu32i) C1{ Fs Fc:0 Fi:32}



static void Test_S_BFu0c_BFu32i()
{
  {
    init_simple_test("S_BFu0c_BFu32i");
    static S_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "S_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "S_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu32i(Test_S_BFu0c_BFu32i, "S_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu32ll  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 S_BFu0c_BFu32ll) C1{ Fs Fc:0 FL:32}



static void Test_S_BFu0c_BFu32ll()
{
  {
    init_simple_test("S_BFu0c_BFu32ll");
    static S_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "S_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "S_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu32ll(Test_S_BFu0c_BFu32ll, "S_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu33  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 S_BFu0c_BFu33) C1{ Fs Fc:0 FL:33}



static void Test_S_BFu0c_BFu33()
{
  {
    init_simple_test("S_BFu0c_BFu33");
    static S_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "S_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "S_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu33(Test_S_BFu0c_BFu33, "S_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu7c  {
  short v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 S_BFu0c_BFu7c) C1{ Fs Fc:0 Fc:7}



static void Test_S_BFu0c_BFu7c()
{
  {
    init_simple_test("S_BFu0c_BFu7c");
    static S_BFu0c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu7c(Test_S_BFu0c_BFu7c, "S_BFu0c_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu7i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 S_BFu0c_BFu7i) C1{ Fs Fc:0 Fi:7}



static void Test_S_BFu0c_BFu7i()
{
  {
    init_simple_test("S_BFu0c_BFu7i");
    static S_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu7i(Test_S_BFu0c_BFu7i, "S_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu7ll  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 S_BFu0c_BFu7ll) C1{ Fs Fc:0 FL:7}



static void Test_S_BFu0c_BFu7ll()
{
  {
    init_simple_test("S_BFu0c_BFu7ll");
    static S_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu7ll(Test_S_BFu0c_BFu7ll, "S_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu7s  {
  short v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 S_BFu0c_BFu7s) C1{ Fs Fc:0 Fs:7}



static void Test_S_BFu0c_BFu7s()
{
  {
    init_simple_test("S_BFu0c_BFu7s");
    static S_BFu0c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu7s(Test_S_BFu0c_BFu7s, "S_BFu0c_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu8c  {
  short v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 S_BFu0c_BFu8c) C1{ Fs Fc:0 Fc:8}



static void Test_S_BFu0c_BFu8c()
{
  {
    init_simple_test("S_BFu0c_BFu8c");
    static S_BFu0c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu8c(Test_S_BFu0c_BFu8c, "S_BFu0c_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu8i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 S_BFu0c_BFu8i) C1{ Fs Fc:0 Fi:8}



static void Test_S_BFu0c_BFu8i()
{
  {
    init_simple_test("S_BFu0c_BFu8i");
    static S_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu8i(Test_S_BFu0c_BFu8i, "S_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu8ll  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 S_BFu0c_BFu8ll) C1{ Fs Fc:0 FL:8}



static void Test_S_BFu0c_BFu8ll()
{
  {
    init_simple_test("S_BFu0c_BFu8ll");
    static S_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu8ll(Test_S_BFu0c_BFu8ll, "S_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu8s  {
  short v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 S_BFu0c_BFu8s) C1{ Fs Fc:0 Fs:8}



static void Test_S_BFu0c_BFu8s()
{
  {
    init_simple_test("S_BFu0c_BFu8s");
    static S_BFu0c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu8s(Test_S_BFu0c_BFu8s, "S_BFu0c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu9i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 S_BFu0c_BFu9i) C1{ Fs Fc:0 Fi:9}



static void Test_S_BFu0c_BFu9i()
{
  {
    init_simple_test("S_BFu0c_BFu9i");
    static S_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu9i(Test_S_BFu0c_BFu9i, "S_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu9ll  {
  short v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 S_BFu0c_BFu9ll) C1{ Fs Fc:0 FL:9}



static void Test_S_BFu0c_BFu9ll()
{
  {
    init_simple_test("S_BFu0c_BFu9ll");
    static S_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu9ll(Test_S_BFu0c_BFu9ll, "S_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_BFu9s  {
  short v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 S_BFu0c_BFu9s) C1{ Fs Fc:0 Fs:9}



static void Test_S_BFu0c_BFu9s()
{
  {
    init_simple_test("S_BFu0c_BFu9s");
    static S_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vS_BFu0c_BFu9s(Test_S_BFu0c_BFu9s, "S_BFu0c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_C  {
  short v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 S_BFu0c_C) C1{ Fs Fc:0 Fc}



static void Test_S_BFu0c_C()
{
  {
    init_simple_test("S_BFu0c_C");
    static S_BFu0c_C lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_C)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_C)");
    check_field_offset(lv, v1, 0, "S_BFu0c_C.v1");
    check_field_offset(lv, v2, 2, "S_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_C(Test_S_BFu0c_C, "S_BFu0c_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_D  {
  short v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 S_BFu0c_D) C1{ Fs Fc:0 FL}



static void Test_S_BFu0c_D()
{
  {
    init_simple_test("S_BFu0c_D");
    static S_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_D)");
    check_field_offset(lv, v1, 0, "S_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_D(Test_S_BFu0c_D, "S_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_F  {
  short v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 S_BFu0c_F) C1{ Fs Fc:0 Fi}



static void Test_S_BFu0c_F()
{
  {
    init_simple_test("S_BFu0c_F");
    static S_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_F)");
    check_field_offset(lv, v1, 0, "S_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "S_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_F(Test_S_BFu0c_F, "S_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_I  {
  short v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 S_BFu0c_I) C1{ Fs Fc:0 Fi}



static void Test_S_BFu0c_I()
{
  {
    init_simple_test("S_BFu0c_I");
    static S_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_I)");
    check_field_offset(lv, v1, 0, "S_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "S_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_I(Test_S_BFu0c_I, "S_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_Ip  {
  short v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 S_BFu0c_Ip) C1{ Fs Fc:0 Fp}



static void Test_S_BFu0c_Ip()
{
  {
    init_simple_test("S_BFu0c_Ip");
    static S_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_Ip(Test_S_BFu0c_Ip, "S_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_L  {
  short v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 S_BFu0c_L) C1{ Fs Fc:0 FL}



static void Test_S_BFu0c_L()
{
  {
    init_simple_test("S_BFu0c_L");
    static S_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_L)");
    check_field_offset(lv, v1, 0, "S_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_L(Test_S_BFu0c_L, "S_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_S  {
  short v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 S_BFu0c_S) C1{ Fs Fc:0 Fs}



static void Test_S_BFu0c_S()
{
  {
    init_simple_test("S_BFu0c_S");
    static S_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_S)");
    check_field_offset(lv, v1, 0, "S_BFu0c_S.v1");
    check_field_offset(lv, v2, 2, "S_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_S(Test_S_BFu0c_S, "S_BFu0c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_Uc  {
  short v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 S_BFu0c_Uc) C1{ Fs Fc:0 Fc}



static void Test_S_BFu0c_Uc()
{
  {
    init_simple_test("S_BFu0c_Uc");
    static S_BFu0c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 2, "S_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_Uc(Test_S_BFu0c_Uc, "S_BFu0c_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_Ui  {
  short v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 S_BFu0c_Ui) C1{ Fs Fc:0 Fi}



static void Test_S_BFu0c_Ui()
{
  {
    init_simple_test("S_BFu0c_Ui");
    static S_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "S_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_Ui(Test_S_BFu0c_Ui, "S_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_Ul  {
  short v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 S_BFu0c_Ul) C1{ Fs Fc:0 FL}



static void Test_S_BFu0c_Ul()
{
  {
    init_simple_test("S_BFu0c_Ul");
    static S_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_Ul(Test_S_BFu0c_Ul, "S_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_Us  {
  short v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 S_BFu0c_Us) C1{ Fs Fc:0 Fs}



static void Test_S_BFu0c_Us()
{
  {
    init_simple_test("S_BFu0c_Us");
    static S_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Us.v1");
    check_field_offset(lv, v2, 2, "S_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_Us(Test_S_BFu0c_Us, "S_BFu0c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0c_Vp  {
  short v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 S_BFu0c_Vp) C1{ Fs Fc:0 Fp}



static void Test_S_BFu0c_Vp()
{
  {
    init_simple_test("S_BFu0c_Vp");
    static S_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0c_Vp(Test_S_BFu0c_Vp, "S_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i  {
  short v1;
  unsigned int  :0;
};
//SIG(1 S_BFu0i) C1{ Fs Fi:0}



static void Test_S_BFu0i()
{
  {
    init_simple_test("S_BFu0i");
    static S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0i(Test_S_BFu0i, "S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu0c  {
  short v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 S_BFu0i_BFu0c) C1{ Fs Fi:0 Fc:0}



static void Test_S_BFu0i_BFu0c()
{
  {
    init_simple_test("S_BFu0i_BFu0c");
    static S_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu0c(Test_S_BFu0i_BFu0c, "S_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu0i  {
  short v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 S_BFu0i_BFu0i) C1{ Fs Fi:0 Fi:0}



static void Test_S_BFu0i_BFu0i()
{
  {
    init_simple_test("S_BFu0i_BFu0i");
    static S_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu0i(Test_S_BFu0i_BFu0i, "S_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu0ll  {
  short v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 S_BFu0i_BFu0ll) C1{ Fs Fi:0 FL:0}



static void Test_S_BFu0i_BFu0ll()
{
  {
    init_simple_test("S_BFu0i_BFu0ll");
    static S_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu0ll(Test_S_BFu0i_BFu0ll, "S_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu0s  {
  short v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 S_BFu0i_BFu0s) C1{ Fs Fi:0 Fs:0}



static void Test_S_BFu0i_BFu0s()
{
  {
    init_simple_test("S_BFu0i_BFu0s");
    static S_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu0s(Test_S_BFu0i_BFu0s, "S_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu15i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 S_BFu0i_BFu15i) C1{ Fs Fi:0 Fi:15}



static void Test_S_BFu0i_BFu15i()
{
  {
    init_simple_test("S_BFu0i_BFu15i");
    static S_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "S_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "S_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu15i(Test_S_BFu0i_BFu15i, "S_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu15ll  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 S_BFu0i_BFu15ll) C1{ Fs Fi:0 FL:15}



static void Test_S_BFu0i_BFu15ll()
{
  {
    init_simple_test("S_BFu0i_BFu15ll");
    static S_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "S_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "S_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu15ll(Test_S_BFu0i_BFu15ll, "S_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu15s  {
  short v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 S_BFu0i_BFu15s) C1{ Fs Fi:0 Fs:15}



static void Test_S_BFu0i_BFu15s()
{
  {
    init_simple_test("S_BFu0i_BFu15s");
    static S_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "S_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "S_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu15s(Test_S_BFu0i_BFu15s, "S_BFu0i_BFu15s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu16i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 S_BFu0i_BFu16i) C1{ Fs Fi:0 Fi:16}



static void Test_S_BFu0i_BFu16i()
{
  {
    init_simple_test("S_BFu0i_BFu16i");
    static S_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "S_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "S_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu16i(Test_S_BFu0i_BFu16i, "S_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu16ll  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 S_BFu0i_BFu16ll) C1{ Fs Fi:0 FL:16}



static void Test_S_BFu0i_BFu16ll()
{
  {
    init_simple_test("S_BFu0i_BFu16ll");
    static S_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "S_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "S_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu16ll(Test_S_BFu0i_BFu16ll, "S_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu16s  {
  short v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 S_BFu0i_BFu16s) C1{ Fs Fi:0 Fs:16}



static void Test_S_BFu0i_BFu16s()
{
  {
    init_simple_test("S_BFu0i_BFu16s");
    static S_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "S_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "S_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu16s(Test_S_BFu0i_BFu16s, "S_BFu0i_BFu16s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu17i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 S_BFu0i_BFu17i) C1{ Fs Fi:0 Fi:17}



static void Test_S_BFu0i_BFu17i()
{
  {
    init_simple_test("S_BFu0i_BFu17i");
    static S_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "S_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "S_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu17i(Test_S_BFu0i_BFu17i, "S_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu17ll  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 S_BFu0i_BFu17ll) C1{ Fs Fi:0 FL:17}



static void Test_S_BFu0i_BFu17ll()
{
  {
    init_simple_test("S_BFu0i_BFu17ll");
    static S_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "S_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "S_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu17ll(Test_S_BFu0i_BFu17ll, "S_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu1c  {
  short v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 S_BFu0i_BFu1c) C1{ Fs Fi:0 Fc:1}



static void Test_S_BFu0i_BFu1c()
{
  {
    init_simple_test("S_BFu0i_BFu1c");
    static S_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "S_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu1c(Test_S_BFu0i_BFu1c, "S_BFu0i_BFu1c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu1i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 S_BFu0i_BFu1i) C1{ Fs Fi:0 Fi:1}



static void Test_S_BFu0i_BFu1i()
{
  {
    init_simple_test("S_BFu0i_BFu1i");
    static S_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "S_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu1i(Test_S_BFu0i_BFu1i, "S_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu1ll  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 S_BFu0i_BFu1ll) C1{ Fs Fi:0 FL:1}



static void Test_S_BFu0i_BFu1ll()
{
  {
    init_simple_test("S_BFu0i_BFu1ll");
    static S_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "S_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu1ll(Test_S_BFu0i_BFu1ll, "S_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu1s  {
  short v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 S_BFu0i_BFu1s) C1{ Fs Fi:0 Fs:1}



static void Test_S_BFu0i_BFu1s()
{
  {
    init_simple_test("S_BFu0i_BFu1s");
    static S_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "S_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu1s(Test_S_BFu0i_BFu1s, "S_BFu0i_BFu1s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu31i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 S_BFu0i_BFu31i) C1{ Fs Fi:0 Fi:31}



static void Test_S_BFu0i_BFu31i()
{
  {
    init_simple_test("S_BFu0i_BFu31i");
    static S_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "S_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "S_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu31i(Test_S_BFu0i_BFu31i, "S_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu31ll  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 S_BFu0i_BFu31ll) C1{ Fs Fi:0 FL:31}



static void Test_S_BFu0i_BFu31ll()
{
  {
    init_simple_test("S_BFu0i_BFu31ll");
    static S_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "S_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "S_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu31ll(Test_S_BFu0i_BFu31ll, "S_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu32i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 S_BFu0i_BFu32i) C1{ Fs Fi:0 Fi:32}



static void Test_S_BFu0i_BFu32i()
{
  {
    init_simple_test("S_BFu0i_BFu32i");
    static S_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "S_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "S_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu32i(Test_S_BFu0i_BFu32i, "S_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu32ll  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 S_BFu0i_BFu32ll) C1{ Fs Fi:0 FL:32}



static void Test_S_BFu0i_BFu32ll()
{
  {
    init_simple_test("S_BFu0i_BFu32ll");
    static S_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "S_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "S_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu32ll(Test_S_BFu0i_BFu32ll, "S_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu33  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 S_BFu0i_BFu33) C1{ Fs Fi:0 FL:33}



static void Test_S_BFu0i_BFu33()
{
  {
    init_simple_test("S_BFu0i_BFu33");
    static S_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "S_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "S_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu33(Test_S_BFu0i_BFu33, "S_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu7c  {
  short v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 S_BFu0i_BFu7c) C1{ Fs Fi:0 Fc:7}



static void Test_S_BFu0i_BFu7c()
{
  {
    init_simple_test("S_BFu0i_BFu7c");
    static S_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "S_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "S_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu7c(Test_S_BFu0i_BFu7c, "S_BFu0i_BFu7c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu7i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 S_BFu0i_BFu7i) C1{ Fs Fi:0 Fi:7}



static void Test_S_BFu0i_BFu7i()
{
  {
    init_simple_test("S_BFu0i_BFu7i");
    static S_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "S_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "S_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu7i(Test_S_BFu0i_BFu7i, "S_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu7ll  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 S_BFu0i_BFu7ll) C1{ Fs Fi:0 FL:7}



static void Test_S_BFu0i_BFu7ll()
{
  {
    init_simple_test("S_BFu0i_BFu7ll");
    static S_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "S_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "S_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu7ll(Test_S_BFu0i_BFu7ll, "S_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu7s  {
  short v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 S_BFu0i_BFu7s) C1{ Fs Fi:0 Fs:7}



static void Test_S_BFu0i_BFu7s()
{
  {
    init_simple_test("S_BFu0i_BFu7s");
    static S_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "S_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "S_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu7s(Test_S_BFu0i_BFu7s, "S_BFu0i_BFu7s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu8c  {
  short v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 S_BFu0i_BFu8c) C1{ Fs Fi:0 Fc:8}



static void Test_S_BFu0i_BFu8c()
{
  {
    init_simple_test("S_BFu0i_BFu8c");
    static S_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "S_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "S_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu8c(Test_S_BFu0i_BFu8c, "S_BFu0i_BFu8c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu8i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 S_BFu0i_BFu8i) C1{ Fs Fi:0 Fi:8}



static void Test_S_BFu0i_BFu8i()
{
  {
    init_simple_test("S_BFu0i_BFu8i");
    static S_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "S_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "S_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu8i(Test_S_BFu0i_BFu8i, "S_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu8ll  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 S_BFu0i_BFu8ll) C1{ Fs Fi:0 FL:8}



static void Test_S_BFu0i_BFu8ll()
{
  {
    init_simple_test("S_BFu0i_BFu8ll");
    static S_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "S_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "S_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu8ll(Test_S_BFu0i_BFu8ll, "S_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu8s  {
  short v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 S_BFu0i_BFu8s) C1{ Fs Fi:0 Fs:8}



static void Test_S_BFu0i_BFu8s()
{
  {
    init_simple_test("S_BFu0i_BFu8s");
    static S_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "S_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "S_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu8s(Test_S_BFu0i_BFu8s, "S_BFu0i_BFu8s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu9i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 S_BFu0i_BFu9i) C1{ Fs Fi:0 Fi:9}



static void Test_S_BFu0i_BFu9i()
{
  {
    init_simple_test("S_BFu0i_BFu9i");
    static S_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "S_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "S_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu9i(Test_S_BFu0i_BFu9i, "S_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu9ll  {
  short v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 S_BFu0i_BFu9ll) C1{ Fs Fi:0 FL:9}



static void Test_S_BFu0i_BFu9ll()
{
  {
    init_simple_test("S_BFu0i_BFu9ll");
    static S_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "S_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "S_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu9ll(Test_S_BFu0i_BFu9ll, "S_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_BFu9s  {
  short v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 S_BFu0i_BFu9s) C1{ Fs Fi:0 Fs:9}



static void Test_S_BFu0i_BFu9s()
{
  {
    init_simple_test("S_BFu0i_BFu9s");
    static S_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "S_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "S_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vS_BFu0i_BFu9s(Test_S_BFu0i_BFu9s, "S_BFu0i_BFu9s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_C  {
  short v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 S_BFu0i_C) C1{ Fs Fi:0 Fc}



static void Test_S_BFu0i_C()
{
  {
    init_simple_test("S_BFu0i_C");
    static S_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_C)");
    check_field_offset(lv, v1, 0, "S_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_C(Test_S_BFu0i_C, "S_BFu0i_C", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_D  {
  short v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 S_BFu0i_D) C1{ Fs Fi:0 FL}



static void Test_S_BFu0i_D()
{
  {
    init_simple_test("S_BFu0i_D");
    static S_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_D)");
    check_field_offset(lv, v1, 0, "S_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_D(Test_S_BFu0i_D, "S_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_F  {
  short v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 S_BFu0i_F) C1{ Fs Fi:0 Fi}



static void Test_S_BFu0i_F()
{
  {
    init_simple_test("S_BFu0i_F");
    static S_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_F)");
    check_field_offset(lv, v1, 0, "S_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_F(Test_S_BFu0i_F, "S_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_I  {
  short v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 S_BFu0i_I) C1{ Fs Fi:0 Fi}



static void Test_S_BFu0i_I()
{
  {
    init_simple_test("S_BFu0i_I");
    static S_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_I)");
    check_field_offset(lv, v1, 0, "S_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_I(Test_S_BFu0i_I, "S_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_Ip  {
  short v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 S_BFu0i_Ip) C1{ Fs Fi:0 Fp}



static void Test_S_BFu0i_Ip()
{
  {
    init_simple_test("S_BFu0i_Ip");
    static S_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_Ip(Test_S_BFu0i_Ip, "S_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_L  {
  short v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 S_BFu0i_L) C1{ Fs Fi:0 FL}



static void Test_S_BFu0i_L()
{
  {
    init_simple_test("S_BFu0i_L");
    static S_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_L)");
    check_field_offset(lv, v1, 0, "S_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_L(Test_S_BFu0i_L, "S_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_S  {
  short v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 S_BFu0i_S) C1{ Fs Fi:0 Fs}



static void Test_S_BFu0i_S()
{
  {
    init_simple_test("S_BFu0i_S");
    static S_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_S)");
    check_field_offset(lv, v1, 0, "S_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_S(Test_S_BFu0i_S, "S_BFu0i_S", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_Uc  {
  short v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 S_BFu0i_Uc) C1{ Fs Fi:0 Fc}



static void Test_S_BFu0i_Uc()
{
  {
    init_simple_test("S_BFu0i_Uc");
    static S_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_Uc(Test_S_BFu0i_Uc, "S_BFu0i_Uc", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_Ui  {
  short v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 S_BFu0i_Ui) C1{ Fs Fi:0 Fi}



static void Test_S_BFu0i_Ui()
{
  {
    init_simple_test("S_BFu0i_Ui");
    static S_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_Ui(Test_S_BFu0i_Ui, "S_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_Ul  {
  short v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 S_BFu0i_Ul) C1{ Fs Fi:0 FL}



static void Test_S_BFu0i_Ul()
{
  {
    init_simple_test("S_BFu0i_Ul");
    static S_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_Ul(Test_S_BFu0i_Ul, "S_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_Us  {
  short v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 S_BFu0i_Us) C1{ Fs Fi:0 Fs}



static void Test_S_BFu0i_Us()
{
  {
    init_simple_test("S_BFu0i_Us");
    static S_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_Us(Test_S_BFu0i_Us, "S_BFu0i_Us", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0i_Vp  {
  short v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 S_BFu0i_Vp) C1{ Fs Fi:0 Fp}



static void Test_S_BFu0i_Vp()
{
  {
    init_simple_test("S_BFu0i_Vp");
    static S_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0i_Vp(Test_S_BFu0i_Vp, "S_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll  {
  short v1;
  __tsu64  :0;
};
//SIG(1 S_BFu0ll) C1{ Fs FL:0}



static void Test_S_BFu0ll()
{
  {
    init_simple_test("S_BFu0ll");
    static S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0ll(Test_S_BFu0ll, "S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu0c  {
  short v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 S_BFu0ll_BFu0c) C1{ Fs FL:0 Fc:0}



static void Test_S_BFu0ll_BFu0c()
{
  {
    init_simple_test("S_BFu0ll_BFu0c");
    static S_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu0c(Test_S_BFu0ll_BFu0c, "S_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu0i  {
  short v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 S_BFu0ll_BFu0i) C1{ Fs FL:0 Fi:0}



static void Test_S_BFu0ll_BFu0i()
{
  {
    init_simple_test("S_BFu0ll_BFu0i");
    static S_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu0i(Test_S_BFu0ll_BFu0i, "S_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu0ll  {
  short v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 S_BFu0ll_BFu0ll) C1{ Fs FL:0 FL:0}



static void Test_S_BFu0ll_BFu0ll()
{
  {
    init_simple_test("S_BFu0ll_BFu0ll");
    static S_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu0ll(Test_S_BFu0ll_BFu0ll, "S_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu0s  {
  short v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 S_BFu0ll_BFu0s) C1{ Fs FL:0 Fs:0}



static void Test_S_BFu0ll_BFu0s()
{
  {
    init_simple_test("S_BFu0ll_BFu0s");
    static S_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu0s(Test_S_BFu0ll_BFu0s, "S_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu15i  {
  short v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 S_BFu0ll_BFu15i) C1{ Fs FL:0 Fi:15}



static void Test_S_BFu0ll_BFu15i()
{
  {
    init_simple_test("S_BFu0ll_BFu15i");
    static S_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "S_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "S_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu15i(Test_S_BFu0ll_BFu15i, "S_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu15ll  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 S_BFu0ll_BFu15ll) C1{ Fs FL:0 FL:15}



static void Test_S_BFu0ll_BFu15ll()
{
  {
    init_simple_test("S_BFu0ll_BFu15ll");
    static S_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "S_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "S_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu15ll(Test_S_BFu0ll_BFu15ll, "S_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu15s  {
  short v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 S_BFu0ll_BFu15s) C1{ Fs FL:0 Fs:15}



static void Test_S_BFu0ll_BFu15s()
{
  {
    init_simple_test("S_BFu0ll_BFu15s");
    static S_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "S_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "S_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu15s(Test_S_BFu0ll_BFu15s, "S_BFu0ll_BFu15s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu16i  {
  short v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 S_BFu0ll_BFu16i) C1{ Fs FL:0 Fi:16}



static void Test_S_BFu0ll_BFu16i()
{
  {
    init_simple_test("S_BFu0ll_BFu16i");
    static S_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "S_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "S_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu16i(Test_S_BFu0ll_BFu16i, "S_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu16ll  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 S_BFu0ll_BFu16ll) C1{ Fs FL:0 FL:16}



static void Test_S_BFu0ll_BFu16ll()
{
  {
    init_simple_test("S_BFu0ll_BFu16ll");
    static S_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "S_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "S_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu16ll(Test_S_BFu0ll_BFu16ll, "S_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu16s  {
  short v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 S_BFu0ll_BFu16s) C1{ Fs FL:0 Fs:16}



static void Test_S_BFu0ll_BFu16s()
{
  {
    init_simple_test("S_BFu0ll_BFu16s");
    static S_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "S_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "S_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu16s(Test_S_BFu0ll_BFu16s, "S_BFu0ll_BFu16s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu17i  {
  short v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 S_BFu0ll_BFu17i) C1{ Fs FL:0 Fi:17}



static void Test_S_BFu0ll_BFu17i()
{
  {
    init_simple_test("S_BFu0ll_BFu17i");
    static S_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "S_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "S_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu17i(Test_S_BFu0ll_BFu17i, "S_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu17ll  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 S_BFu0ll_BFu17ll) C1{ Fs FL:0 FL:17}



static void Test_S_BFu0ll_BFu17ll()
{
  {
    init_simple_test("S_BFu0ll_BFu17ll");
    static S_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "S_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "S_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu17ll(Test_S_BFu0ll_BFu17ll, "S_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu1c  {
  short v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 S_BFu0ll_BFu1c) C1{ Fs FL:0 Fc:1}



static void Test_S_BFu0ll_BFu1c()
{
  {
    init_simple_test("S_BFu0ll_BFu1c");
    static S_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "S_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu1c(Test_S_BFu0ll_BFu1c, "S_BFu0ll_BFu1c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu1i  {
  short v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 S_BFu0ll_BFu1i) C1{ Fs FL:0 Fi:1}



static void Test_S_BFu0ll_BFu1i()
{
  {
    init_simple_test("S_BFu0ll_BFu1i");
    static S_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "S_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu1i(Test_S_BFu0ll_BFu1i, "S_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu1ll  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 S_BFu0ll_BFu1ll) C1{ Fs FL:0 FL:1}



static void Test_S_BFu0ll_BFu1ll()
{
  {
    init_simple_test("S_BFu0ll_BFu1ll");
    static S_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "S_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu1ll(Test_S_BFu0ll_BFu1ll, "S_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu1s  {
  short v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 S_BFu0ll_BFu1s) C1{ Fs FL:0 Fs:1}



static void Test_S_BFu0ll_BFu1s()
{
  {
    init_simple_test("S_BFu0ll_BFu1s");
    static S_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "S_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu1s(Test_S_BFu0ll_BFu1s, "S_BFu0ll_BFu1s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu31i  {
  short v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 S_BFu0ll_BFu31i) C1{ Fs FL:0 Fi:31}



static void Test_S_BFu0ll_BFu31i()
{
  {
    init_simple_test("S_BFu0ll_BFu31i");
    static S_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "S_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "S_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu31i(Test_S_BFu0ll_BFu31i, "S_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu31ll  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 S_BFu0ll_BFu31ll) C1{ Fs FL:0 FL:31}



static void Test_S_BFu0ll_BFu31ll()
{
  {
    init_simple_test("S_BFu0ll_BFu31ll");
    static S_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "S_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "S_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu31ll(Test_S_BFu0ll_BFu31ll, "S_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu32i  {
  short v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 S_BFu0ll_BFu32i) C1{ Fs FL:0 Fi:32}



static void Test_S_BFu0ll_BFu32i()
{
  {
    init_simple_test("S_BFu0ll_BFu32i");
    static S_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "S_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "S_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu32i(Test_S_BFu0ll_BFu32i, "S_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu32ll  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 S_BFu0ll_BFu32ll) C1{ Fs FL:0 FL:32}



static void Test_S_BFu0ll_BFu32ll()
{
  {
    init_simple_test("S_BFu0ll_BFu32ll");
    static S_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "S_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "S_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu32ll(Test_S_BFu0ll_BFu32ll, "S_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu33  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 S_BFu0ll_BFu33) C1{ Fs FL:0 FL:33}



static void Test_S_BFu0ll_BFu33()
{
  {
    init_simple_test("S_BFu0ll_BFu33");
    static S_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "S_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "S_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu33(Test_S_BFu0ll_BFu33, "S_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu7c  {
  short v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 S_BFu0ll_BFu7c) C1{ Fs FL:0 Fc:7}



static void Test_S_BFu0ll_BFu7c()
{
  {
    init_simple_test("S_BFu0ll_BFu7c");
    static S_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "S_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "S_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu7c(Test_S_BFu0ll_BFu7c, "S_BFu0ll_BFu7c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu7i  {
  short v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 S_BFu0ll_BFu7i) C1{ Fs FL:0 Fi:7}



static void Test_S_BFu0ll_BFu7i()
{
  {
    init_simple_test("S_BFu0ll_BFu7i");
    static S_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "S_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "S_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu7i(Test_S_BFu0ll_BFu7i, "S_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu7ll  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 S_BFu0ll_BFu7ll) C1{ Fs FL:0 FL:7}



static void Test_S_BFu0ll_BFu7ll()
{
  {
    init_simple_test("S_BFu0ll_BFu7ll");
    static S_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "S_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "S_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu7ll(Test_S_BFu0ll_BFu7ll, "S_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu7s  {
  short v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 S_BFu0ll_BFu7s) C1{ Fs FL:0 Fs:7}



static void Test_S_BFu0ll_BFu7s()
{
  {
    init_simple_test("S_BFu0ll_BFu7s");
    static S_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "S_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "S_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu7s(Test_S_BFu0ll_BFu7s, "S_BFu0ll_BFu7s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu8c  {
  short v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 S_BFu0ll_BFu8c) C1{ Fs FL:0 Fc:8}



static void Test_S_BFu0ll_BFu8c()
{
  {
    init_simple_test("S_BFu0ll_BFu8c");
    static S_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "S_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "S_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu8c(Test_S_BFu0ll_BFu8c, "S_BFu0ll_BFu8c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu8i  {
  short v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 S_BFu0ll_BFu8i) C1{ Fs FL:0 Fi:8}



static void Test_S_BFu0ll_BFu8i()
{
  {
    init_simple_test("S_BFu0ll_BFu8i");
    static S_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "S_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "S_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu8i(Test_S_BFu0ll_BFu8i, "S_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu8ll  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 S_BFu0ll_BFu8ll) C1{ Fs FL:0 FL:8}



static void Test_S_BFu0ll_BFu8ll()
{
  {
    init_simple_test("S_BFu0ll_BFu8ll");
    static S_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "S_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "S_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu8ll(Test_S_BFu0ll_BFu8ll, "S_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu8s  {
  short v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 S_BFu0ll_BFu8s) C1{ Fs FL:0 Fs:8}



static void Test_S_BFu0ll_BFu8s()
{
  {
    init_simple_test("S_BFu0ll_BFu8s");
    static S_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "S_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "S_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu8s(Test_S_BFu0ll_BFu8s, "S_BFu0ll_BFu8s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu9i  {
  short v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 S_BFu0ll_BFu9i) C1{ Fs FL:0 Fi:9}



static void Test_S_BFu0ll_BFu9i()
{
  {
    init_simple_test("S_BFu0ll_BFu9i");
    static S_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "S_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "S_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu9i(Test_S_BFu0ll_BFu9i, "S_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu9ll  {
  short v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 S_BFu0ll_BFu9ll) C1{ Fs FL:0 FL:9}



static void Test_S_BFu0ll_BFu9ll()
{
  {
    init_simple_test("S_BFu0ll_BFu9ll");
    static S_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "S_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "S_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu9ll(Test_S_BFu0ll_BFu9ll, "S_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_BFu9s  {
  short v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 S_BFu0ll_BFu9s) C1{ Fs FL:0 Fs:9}



static void Test_S_BFu0ll_BFu9s()
{
  {
    init_simple_test("S_BFu0ll_BFu9s");
    static S_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "S_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "S_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_BFu9s(Test_S_BFu0ll_BFu9s, "S_BFu0ll_BFu9s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_C  {
  short v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 S_BFu0ll_C) C1{ Fs FL:0 Fc}



static void Test_S_BFu0ll_C()
{
  {
    init_simple_test("S_BFu0ll_C");
    static S_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_C(Test_S_BFu0ll_C, "S_BFu0ll_C", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_D  {
  short v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 S_BFu0ll_D) C1{ Fs FL:0 FL}



static void Test_S_BFu0ll_D()
{
  {
    init_simple_test("S_BFu0ll_D");
    static S_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_D(Test_S_BFu0ll_D, "S_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_F  {
  short v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 S_BFu0ll_F) C1{ Fs FL:0 Fi}



static void Test_S_BFu0ll_F()
{
  {
    init_simple_test("S_BFu0ll_F");
    static S_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_F(Test_S_BFu0ll_F, "S_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_I  {
  short v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 S_BFu0ll_I) C1{ Fs FL:0 Fi}



static void Test_S_BFu0ll_I()
{
  {
    init_simple_test("S_BFu0ll_I");
    static S_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_I(Test_S_BFu0ll_I, "S_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_Ip  {
  short v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 S_BFu0ll_Ip) C1{ Fs FL:0 Fp}



static void Test_S_BFu0ll_Ip()
{
  {
    init_simple_test("S_BFu0ll_Ip");
    static S_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_Ip(Test_S_BFu0ll_Ip, "S_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_L  {
  short v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 S_BFu0ll_L) C1{ Fs FL:0 FL}



static void Test_S_BFu0ll_L()
{
  {
    init_simple_test("S_BFu0ll_L");
    static S_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_L(Test_S_BFu0ll_L, "S_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_S  {
  short v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 S_BFu0ll_S) C1{ Fs FL:0 Fs}



static void Test_S_BFu0ll_S()
{
  {
    init_simple_test("S_BFu0ll_S");
    static S_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_S(Test_S_BFu0ll_S, "S_BFu0ll_S", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_Uc  {
  short v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 S_BFu0ll_Uc) C1{ Fs FL:0 Fc}



static void Test_S_BFu0ll_Uc()
{
  {
    init_simple_test("S_BFu0ll_Uc");
    static S_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_Uc(Test_S_BFu0ll_Uc, "S_BFu0ll_Uc", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_Ui  {
  short v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 S_BFu0ll_Ui) C1{ Fs FL:0 Fi}



static void Test_S_BFu0ll_Ui()
{
  {
    init_simple_test("S_BFu0ll_Ui");
    static S_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_Ui(Test_S_BFu0ll_Ui, "S_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_Ul  {
  short v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 S_BFu0ll_Ul) C1{ Fs FL:0 FL}



static void Test_S_BFu0ll_Ul()
{
  {
    init_simple_test("S_BFu0ll_Ul");
    static S_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_Ul(Test_S_BFu0ll_Ul, "S_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_Us  {
  short v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 S_BFu0ll_Us) C1{ Fs FL:0 Fs}



static void Test_S_BFu0ll_Us()
{
  {
    init_simple_test("S_BFu0ll_Us");
    static S_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_Us(Test_S_BFu0ll_Us, "S_BFu0ll_Us", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0ll_Vp  {
  short v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 S_BFu0ll_Vp) C1{ Fs FL:0 Fp}



static void Test_S_BFu0ll_Vp()
{
  {
    init_simple_test("S_BFu0ll_Vp");
    static S_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0ll_Vp(Test_S_BFu0ll_Vp, "S_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s  {
  short v1;
  unsigned short  :0;
};
//SIG(1 S_BFu0s) C1{ Fs Fs:0}



static void Test_S_BFu0s()
{
  {
    init_simple_test("S_BFu0s");
    static S_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0s(Test_S_BFu0s, "S_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu0c  {
  short v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 S_BFu0s_BFu0c) C1{ Fs Fs:0 Fc:0}



static void Test_S_BFu0s_BFu0c()
{
  {
    init_simple_test("S_BFu0s_BFu0c");
    static S_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu0c(Test_S_BFu0s_BFu0c, "S_BFu0s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu0i  {
  short v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 S_BFu0s_BFu0i) C1{ Fs Fs:0 Fi:0}



static void Test_S_BFu0s_BFu0i()
{
  {
    init_simple_test("S_BFu0s_BFu0i");
    static S_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu0i(Test_S_BFu0s_BFu0i, "S_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu0ll  {
  short v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 S_BFu0s_BFu0ll) C1{ Fs Fs:0 FL:0}



static void Test_S_BFu0s_BFu0ll()
{
  {
    init_simple_test("S_BFu0s_BFu0ll");
    static S_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu0ll(Test_S_BFu0s_BFu0ll, "S_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu0s  {
  short v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 S_BFu0s_BFu0s) C1{ Fs Fs:0 Fs:0}



static void Test_S_BFu0s_BFu0s()
{
  {
    init_simple_test("S_BFu0s_BFu0s");
    static S_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu0s(Test_S_BFu0s_BFu0s, "S_BFu0s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu15i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 S_BFu0s_BFu15i) C1{ Fs Fs:0 Fi:15}



static void Test_S_BFu0s_BFu15i()
{
  {
    init_simple_test("S_BFu0s_BFu15i");
    static S_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu15i(Test_S_BFu0s_BFu15i, "S_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu15ll  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 S_BFu0s_BFu15ll) C1{ Fs Fs:0 FL:15}



static void Test_S_BFu0s_BFu15ll()
{
  {
    init_simple_test("S_BFu0s_BFu15ll");
    static S_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu15ll(Test_S_BFu0s_BFu15ll, "S_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu15s  {
  short v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 S_BFu0s_BFu15s) C1{ Fs Fs:0 Fs:15}



static void Test_S_BFu0s_BFu15s()
{
  {
    init_simple_test("S_BFu0s_BFu15s");
    static S_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu15s(Test_S_BFu0s_BFu15s, "S_BFu0s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu16i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 S_BFu0s_BFu16i) C1{ Fs Fs:0 Fi:16}



static void Test_S_BFu0s_BFu16i()
{
  {
    init_simple_test("S_BFu0s_BFu16i");
    static S_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu16i(Test_S_BFu0s_BFu16i, "S_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu16ll  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 S_BFu0s_BFu16ll) C1{ Fs Fs:0 FL:16}



static void Test_S_BFu0s_BFu16ll()
{
  {
    init_simple_test("S_BFu0s_BFu16ll");
    static S_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu16ll(Test_S_BFu0s_BFu16ll, "S_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu16s  {
  short v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 S_BFu0s_BFu16s) C1{ Fs Fs:0 Fs:16}



static void Test_S_BFu0s_BFu16s()
{
  {
    init_simple_test("S_BFu0s_BFu16s");
    static S_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu16s(Test_S_BFu0s_BFu16s, "S_BFu0s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu17i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 S_BFu0s_BFu17i) C1{ Fs Fs:0 Fi:17}



static void Test_S_BFu0s_BFu17i()
{
  {
    init_simple_test("S_BFu0s_BFu17i");
    static S_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "S_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "S_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu17i(Test_S_BFu0s_BFu17i, "S_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu17ll  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 S_BFu0s_BFu17ll) C1{ Fs Fs:0 FL:17}



static void Test_S_BFu0s_BFu17ll()
{
  {
    init_simple_test("S_BFu0s_BFu17ll");
    static S_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "S_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "S_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu17ll(Test_S_BFu0s_BFu17ll, "S_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu1c  {
  short v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 S_BFu0s_BFu1c) C1{ Fs Fs:0 Fc:1}



static void Test_S_BFu0s_BFu1c()
{
  {
    init_simple_test("S_BFu0s_BFu1c");
    static S_BFu0s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu1c(Test_S_BFu0s_BFu1c, "S_BFu0s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu1i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 S_BFu0s_BFu1i) C1{ Fs Fs:0 Fi:1}



static void Test_S_BFu0s_BFu1i()
{
  {
    init_simple_test("S_BFu0s_BFu1i");
    static S_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu1i(Test_S_BFu0s_BFu1i, "S_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu1ll  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 S_BFu0s_BFu1ll) C1{ Fs Fs:0 FL:1}



static void Test_S_BFu0s_BFu1ll()
{
  {
    init_simple_test("S_BFu0s_BFu1ll");
    static S_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu1ll(Test_S_BFu0s_BFu1ll, "S_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu1s  {
  short v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 S_BFu0s_BFu1s) C1{ Fs Fs:0 Fs:1}



static void Test_S_BFu0s_BFu1s()
{
  {
    init_simple_test("S_BFu0s_BFu1s");
    static S_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu1s(Test_S_BFu0s_BFu1s, "S_BFu0s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu31i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 S_BFu0s_BFu31i) C1{ Fs Fs:0 Fi:31}



static void Test_S_BFu0s_BFu31i()
{
  {
    init_simple_test("S_BFu0s_BFu31i");
    static S_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "S_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "S_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu31i(Test_S_BFu0s_BFu31i, "S_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu31ll  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 S_BFu0s_BFu31ll) C1{ Fs Fs:0 FL:31}



static void Test_S_BFu0s_BFu31ll()
{
  {
    init_simple_test("S_BFu0s_BFu31ll");
    static S_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "S_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "S_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu31ll(Test_S_BFu0s_BFu31ll, "S_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu32i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 S_BFu0s_BFu32i) C1{ Fs Fs:0 Fi:32}



static void Test_S_BFu0s_BFu32i()
{
  {
    init_simple_test("S_BFu0s_BFu32i");
    static S_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "S_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "S_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu32i(Test_S_BFu0s_BFu32i, "S_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu32ll  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 S_BFu0s_BFu32ll) C1{ Fs Fs:0 FL:32}



static void Test_S_BFu0s_BFu32ll()
{
  {
    init_simple_test("S_BFu0s_BFu32ll");
    static S_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "S_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "S_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu32ll(Test_S_BFu0s_BFu32ll, "S_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu33  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 S_BFu0s_BFu33) C1{ Fs Fs:0 FL:33}



static void Test_S_BFu0s_BFu33()
{
  {
    init_simple_test("S_BFu0s_BFu33");
    static S_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "S_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "S_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu33(Test_S_BFu0s_BFu33, "S_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu7c  {
  short v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 S_BFu0s_BFu7c) C1{ Fs Fs:0 Fc:7}



static void Test_S_BFu0s_BFu7c()
{
  {
    init_simple_test("S_BFu0s_BFu7c");
    static S_BFu0s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu7c(Test_S_BFu0s_BFu7c, "S_BFu0s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu7i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 S_BFu0s_BFu7i) C1{ Fs Fs:0 Fi:7}



static void Test_S_BFu0s_BFu7i()
{
  {
    init_simple_test("S_BFu0s_BFu7i");
    static S_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu7i(Test_S_BFu0s_BFu7i, "S_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu7ll  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 S_BFu0s_BFu7ll) C1{ Fs Fs:0 FL:7}



static void Test_S_BFu0s_BFu7ll()
{
  {
    init_simple_test("S_BFu0s_BFu7ll");
    static S_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu7ll(Test_S_BFu0s_BFu7ll, "S_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu7s  {
  short v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 S_BFu0s_BFu7s) C1{ Fs Fs:0 Fs:7}



static void Test_S_BFu0s_BFu7s()
{
  {
    init_simple_test("S_BFu0s_BFu7s");
    static S_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu7s(Test_S_BFu0s_BFu7s, "S_BFu0s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu8c  {
  short v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 S_BFu0s_BFu8c) C1{ Fs Fs:0 Fc:8}



static void Test_S_BFu0s_BFu8c()
{
  {
    init_simple_test("S_BFu0s_BFu8c");
    static S_BFu0s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu8c(Test_S_BFu0s_BFu8c, "S_BFu0s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu8i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 S_BFu0s_BFu8i) C1{ Fs Fs:0 Fi:8}



static void Test_S_BFu0s_BFu8i()
{
  {
    init_simple_test("S_BFu0s_BFu8i");
    static S_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu8i(Test_S_BFu0s_BFu8i, "S_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu8ll  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 S_BFu0s_BFu8ll) C1{ Fs Fs:0 FL:8}



static void Test_S_BFu0s_BFu8ll()
{
  {
    init_simple_test("S_BFu0s_BFu8ll");
    static S_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu8ll(Test_S_BFu0s_BFu8ll, "S_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu8s  {
  short v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 S_BFu0s_BFu8s) C1{ Fs Fs:0 Fs:8}



static void Test_S_BFu0s_BFu8s()
{
  {
    init_simple_test("S_BFu0s_BFu8s");
    static S_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu8s(Test_S_BFu0s_BFu8s, "S_BFu0s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu9i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 S_BFu0s_BFu9i) C1{ Fs Fs:0 Fi:9}



static void Test_S_BFu0s_BFu9i()
{
  {
    init_simple_test("S_BFu0s_BFu9i");
    static S_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu9i(Test_S_BFu0s_BFu9i, "S_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu9ll  {
  short v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 S_BFu0s_BFu9ll) C1{ Fs Fs:0 FL:9}



static void Test_S_BFu0s_BFu9ll()
{
  {
    init_simple_test("S_BFu0s_BFu9ll");
    static S_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu9ll(Test_S_BFu0s_BFu9ll, "S_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_BFu9s  {
  short v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 S_BFu0s_BFu9s) C1{ Fs Fs:0 Fs:9}



static void Test_S_BFu0s_BFu9s()
{
  {
    init_simple_test("S_BFu0s_BFu9s");
    static S_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vS_BFu0s_BFu9s(Test_S_BFu0s_BFu9s, "S_BFu0s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_C  {
  short v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 S_BFu0s_C) C1{ Fs Fs:0 Fc}



static void Test_S_BFu0s_C()
{
  {
    init_simple_test("S_BFu0s_C");
    static S_BFu0s_C lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_C)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_C)");
    check_field_offset(lv, v1, 0, "S_BFu0s_C.v1");
    check_field_offset(lv, v2, 2, "S_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_C(Test_S_BFu0s_C, "S_BFu0s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_D  {
  short v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 S_BFu0s_D) C1{ Fs Fs:0 FL}



static void Test_S_BFu0s_D()
{
  {
    init_simple_test("S_BFu0s_D");
    static S_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_D)");
    check_field_offset(lv, v1, 0, "S_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_D(Test_S_BFu0s_D, "S_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_F  {
  short v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 S_BFu0s_F) C1{ Fs Fs:0 Fi}



static void Test_S_BFu0s_F()
{
  {
    init_simple_test("S_BFu0s_F");
    static S_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_F)");
    check_field_offset(lv, v1, 0, "S_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "S_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_F(Test_S_BFu0s_F, "S_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_I  {
  short v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 S_BFu0s_I) C1{ Fs Fs:0 Fi}



static void Test_S_BFu0s_I()
{
  {
    init_simple_test("S_BFu0s_I");
    static S_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_I)");
    check_field_offset(lv, v1, 0, "S_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "S_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_I(Test_S_BFu0s_I, "S_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_Ip  {
  short v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 S_BFu0s_Ip) C1{ Fs Fs:0 Fp}



static void Test_S_BFu0s_Ip()
{
  {
    init_simple_test("S_BFu0s_Ip");
    static S_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_Ip(Test_S_BFu0s_Ip, "S_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_L  {
  short v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 S_BFu0s_L) C1{ Fs Fs:0 FL}



static void Test_S_BFu0s_L()
{
  {
    init_simple_test("S_BFu0s_L");
    static S_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_L)");
    check_field_offset(lv, v1, 0, "S_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_L(Test_S_BFu0s_L, "S_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_S  {
  short v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 S_BFu0s_S) C1{ Fs Fs:0 Fs}



static void Test_S_BFu0s_S()
{
  {
    init_simple_test("S_BFu0s_S");
    static S_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_S)");
    check_field_offset(lv, v1, 0, "S_BFu0s_S.v1");
    check_field_offset(lv, v2, 2, "S_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_S(Test_S_BFu0s_S, "S_BFu0s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_Uc  {
  short v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 S_BFu0s_Uc) C1{ Fs Fs:0 Fc}



static void Test_S_BFu0s_Uc()
{
  {
    init_simple_test("S_BFu0s_Uc");
    static S_BFu0s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 2, "S_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_Uc(Test_S_BFu0s_Uc, "S_BFu0s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_Ui  {
  short v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 S_BFu0s_Ui) C1{ Fs Fs:0 Fi}



static void Test_S_BFu0s_Ui()
{
  {
    init_simple_test("S_BFu0s_Ui");
    static S_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "S_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_Ui(Test_S_BFu0s_Ui, "S_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_Ul  {
  short v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 S_BFu0s_Ul) C1{ Fs Fs:0 FL}



static void Test_S_BFu0s_Ul()
{
  {
    init_simple_test("S_BFu0s_Ul");
    static S_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_Ul(Test_S_BFu0s_Ul, "S_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_Us  {
  short v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 S_BFu0s_Us) C1{ Fs Fs:0 Fs}



static void Test_S_BFu0s_Us()
{
  {
    init_simple_test("S_BFu0s_Us");
    static S_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Us.v1");
    check_field_offset(lv, v2, 2, "S_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_Us(Test_S_BFu0s_Us, "S_BFu0s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu0s_Vp  {
  short v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 S_BFu0s_Vp) C1{ Fs Fs:0 Fp}



static void Test_S_BFu0s_Vp()
{
  {
    init_simple_test("S_BFu0s_Vp");
    static S_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vS_BFu0s_Vp(Test_S_BFu0s_Vp, "S_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15i_BFu0c  {
  short v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 S_BFu15i_BFu0c) C1{ Fs Fi:15 Fc:0}



static void Test_S_BFu15i_BFu0c()
{
  {
    init_simple_test("S_BFu15i_BFu0c");
    static S_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu15i_BFu0c(Test_S_BFu15i_BFu0c, "S_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15i_BFu0i  {
  short v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 S_BFu15i_BFu0i) C1{ Fs Fi:15 Fi:0}



static void Test_S_BFu15i_BFu0i()
{
  {
    init_simple_test("S_BFu15i_BFu0i");
    static S_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu15i_BFu0i(Test_S_BFu15i_BFu0i, "S_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15i_BFu0ll  {
  short v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 S_BFu15i_BFu0ll) C1{ Fs Fi:15 FL:0}



static void Test_S_BFu15i_BFu0ll()
{
  {
    init_simple_test("S_BFu15i_BFu0ll");
    static S_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu15i_BFu0ll(Test_S_BFu15i_BFu0ll, "S_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15i_BFu0s  {
  short v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 S_BFu15i_BFu0s) C1{ Fs Fi:15 Fs:0}



static void Test_S_BFu15i_BFu0s()
{
  {
    init_simple_test("S_BFu15i_BFu0s");
    static S_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu15i_BFu0s(Test_S_BFu15i_BFu0s, "S_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15ll_BFu0c  {
  short v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 S_BFu15ll_BFu0c) C1{ Fs FL:15 Fc:0}



static void Test_S_BFu15ll_BFu0c()
{
  {
    init_simple_test("S_BFu15ll_BFu0c");
    static S_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu15ll_BFu0c(Test_S_BFu15ll_BFu0c, "S_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15ll_BFu0i  {
  short v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 S_BFu15ll_BFu0i) C1{ Fs FL:15 Fi:0}



static void Test_S_BFu15ll_BFu0i()
{
  {
    init_simple_test("S_BFu15ll_BFu0i");
    static S_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu15ll_BFu0i(Test_S_BFu15ll_BFu0i, "S_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15ll_BFu0ll  {
  short v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 S_BFu15ll_BFu0ll) C1{ Fs FL:15 FL:0}



static void Test_S_BFu15ll_BFu0ll()
{
  {
    init_simple_test("S_BFu15ll_BFu0ll");
    static S_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu15ll_BFu0ll(Test_S_BFu15ll_BFu0ll, "S_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15ll_BFu0s  {
  short v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 S_BFu15ll_BFu0s) C1{ Fs FL:15 Fs:0}



static void Test_S_BFu15ll_BFu0s()
{
  {
    init_simple_test("S_BFu15ll_BFu0s");
    static S_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu15ll_BFu0s(Test_S_BFu15ll_BFu0s, "S_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15s_BFu0c  {
  short v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 S_BFu15s_BFu0c) C1{ Fs Fs:15 Fc:0}



static void Test_S_BFu15s_BFu0c()
{
  {
    init_simple_test("S_BFu15s_BFu0c");
    static S_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu15s_BFu0c(Test_S_BFu15s_BFu0c, "S_BFu15s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15s_BFu0i  {
  short v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 S_BFu15s_BFu0i) C1{ Fs Fs:15 Fi:0}



static void Test_S_BFu15s_BFu0i()
{
  {
    init_simple_test("S_BFu15s_BFu0i");
    static S_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu15s_BFu0i(Test_S_BFu15s_BFu0i, "S_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15s_BFu0ll  {
  short v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 S_BFu15s_BFu0ll) C1{ Fs Fs:15 FL:0}



static void Test_S_BFu15s_BFu0ll()
{
  {
    init_simple_test("S_BFu15s_BFu0ll");
    static S_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu15s_BFu0ll(Test_S_BFu15s_BFu0ll, "S_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu15s_BFu0s  {
  short v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 S_BFu15s_BFu0s) C1{ Fs Fs:15 Fs:0}



static void Test_S_BFu15s_BFu0s()
{
  {
    init_simple_test("S_BFu15s_BFu0s");
    static S_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu15s_BFu0s(Test_S_BFu15s_BFu0s, "S_BFu15s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16i_BFu0c  {
  short v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 S_BFu16i_BFu0c) C1{ Fs Fi:16 Fc:0}



static void Test_S_BFu16i_BFu0c()
{
  {
    init_simple_test("S_BFu16i_BFu0c");
    static S_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu16i_BFu0c(Test_S_BFu16i_BFu0c, "S_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16i_BFu0i  {
  short v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 S_BFu16i_BFu0i) C1{ Fs Fi:16 Fi:0}



static void Test_S_BFu16i_BFu0i()
{
  {
    init_simple_test("S_BFu16i_BFu0i");
    static S_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu16i_BFu0i(Test_S_BFu16i_BFu0i, "S_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16i_BFu0ll  {
  short v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 S_BFu16i_BFu0ll) C1{ Fs Fi:16 FL:0}



static void Test_S_BFu16i_BFu0ll()
{
  {
    init_simple_test("S_BFu16i_BFu0ll");
    static S_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu16i_BFu0ll(Test_S_BFu16i_BFu0ll, "S_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16i_BFu0s  {
  short v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 S_BFu16i_BFu0s) C1{ Fs Fi:16 Fs:0}



static void Test_S_BFu16i_BFu0s()
{
  {
    init_simple_test("S_BFu16i_BFu0s");
    static S_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu16i_BFu0s(Test_S_BFu16i_BFu0s, "S_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16ll_BFu0c  {
  short v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 S_BFu16ll_BFu0c) C1{ Fs FL:16 Fc:0}



static void Test_S_BFu16ll_BFu0c()
{
  {
    init_simple_test("S_BFu16ll_BFu0c");
    static S_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu16ll_BFu0c(Test_S_BFu16ll_BFu0c, "S_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16ll_BFu0i  {
  short v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 S_BFu16ll_BFu0i) C1{ Fs FL:16 Fi:0}



static void Test_S_BFu16ll_BFu0i()
{
  {
    init_simple_test("S_BFu16ll_BFu0i");
    static S_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu16ll_BFu0i(Test_S_BFu16ll_BFu0i, "S_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16ll_BFu0ll  {
  short v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 S_BFu16ll_BFu0ll) C1{ Fs FL:16 FL:0}



static void Test_S_BFu16ll_BFu0ll()
{
  {
    init_simple_test("S_BFu16ll_BFu0ll");
    static S_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu16ll_BFu0ll(Test_S_BFu16ll_BFu0ll, "S_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16ll_BFu0s  {
  short v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 S_BFu16ll_BFu0s) C1{ Fs FL:16 Fs:0}



static void Test_S_BFu16ll_BFu0s()
{
  {
    init_simple_test("S_BFu16ll_BFu0s");
    static S_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu16ll_BFu0s(Test_S_BFu16ll_BFu0s, "S_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16s_BFu0c  {
  short v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 S_BFu16s_BFu0c) C1{ Fs Fs:16 Fc:0}



static void Test_S_BFu16s_BFu0c()
{
  {
    init_simple_test("S_BFu16s_BFu0c");
    static S_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu16s_BFu0c(Test_S_BFu16s_BFu0c, "S_BFu16s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16s_BFu0i  {
  short v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 S_BFu16s_BFu0i) C1{ Fs Fs:16 Fi:0}



static void Test_S_BFu16s_BFu0i()
{
  {
    init_simple_test("S_BFu16s_BFu0i");
    static S_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu16s_BFu0i(Test_S_BFu16s_BFu0i, "S_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16s_BFu0ll  {
  short v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 S_BFu16s_BFu0ll) C1{ Fs Fs:16 FL:0}



static void Test_S_BFu16s_BFu0ll()
{
  {
    init_simple_test("S_BFu16s_BFu0ll");
    static S_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu16s_BFu0ll(Test_S_BFu16s_BFu0ll, "S_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu16s_BFu0s  {
  short v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 S_BFu16s_BFu0s) C1{ Fs Fs:16 Fs:0}



static void Test_S_BFu16s_BFu0s()
{
  {
    init_simple_test("S_BFu16s_BFu0s");
    static S_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "S_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "S_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu16s_BFu0s(Test_S_BFu16s_BFu0s, "S_BFu16s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu17i_BFu0c  {
  short v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 S_BFu17i_BFu0c) C1{ Fs Fi:17 Fc:0}



static void Test_S_BFu17i_BFu0c()
{
  {
    init_simple_test("S_BFu17i_BFu0c");
    static S_BFu17i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "S_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "S_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu17i_BFu0c(Test_S_BFu17i_BFu0c, "S_BFu17i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu17i_BFu0i  {
  short v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 S_BFu17i_BFu0i) C1{ Fs Fi:17 Fi:0}



static void Test_S_BFu17i_BFu0i()
{
  {
    init_simple_test("S_BFu17i_BFu0i");
    static S_BFu17i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "S_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "S_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu17i_BFu0i(Test_S_BFu17i_BFu0i, "S_BFu17i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu17i_BFu0ll  {
  short v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 S_BFu17i_BFu0ll) C1{ Fs Fi:17 FL:0}



static void Test_S_BFu17i_BFu0ll()
{
  {
    init_simple_test("S_BFu17i_BFu0ll");
    static S_BFu17i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "S_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "S_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu17i_BFu0ll(Test_S_BFu17i_BFu0ll, "S_BFu17i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu17i_BFu0s  {
  short v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 S_BFu17i_BFu0s) C1{ Fs Fi:17 Fs:0}



static void Test_S_BFu17i_BFu0s()
{
  {
    init_simple_test("S_BFu17i_BFu0s");
    static S_BFu17i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "S_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "S_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu17i_BFu0s(Test_S_BFu17i_BFu0s, "S_BFu17i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu17ll_BFu0c  {
  short v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 S_BFu17ll_BFu0c) C1{ Fs FL:17 Fc:0}



static void Test_S_BFu17ll_BFu0c()
{
  {
    init_simple_test("S_BFu17ll_BFu0c");
    static S_BFu17ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "S_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "S_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu17ll_BFu0c(Test_S_BFu17ll_BFu0c, "S_BFu17ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu17ll_BFu0i  {
  short v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 S_BFu17ll_BFu0i) C1{ Fs FL:17 Fi:0}



static void Test_S_BFu17ll_BFu0i()
{
  {
    init_simple_test("S_BFu17ll_BFu0i");
    static S_BFu17ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "S_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "S_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu17ll_BFu0i(Test_S_BFu17ll_BFu0i, "S_BFu17ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu17ll_BFu0ll  {
  short v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 S_BFu17ll_BFu0ll) C1{ Fs FL:17 FL:0}



static void Test_S_BFu17ll_BFu0ll()
{
  {
    init_simple_test("S_BFu17ll_BFu0ll");
    static S_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "S_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "S_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu17ll_BFu0ll(Test_S_BFu17ll_BFu0ll, "S_BFu17ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu17ll_BFu0s  {
  short v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 S_BFu17ll_BFu0s) C1{ Fs FL:17 Fs:0}



static void Test_S_BFu17ll_BFu0s()
{
  {
    init_simple_test("S_BFu17ll_BFu0s");
    static S_BFu17ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "S_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "S_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu17ll_BFu0s(Test_S_BFu17ll_BFu0s, "S_BFu17ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1c_BFu0c  {
  short v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 S_BFu1c_BFu0c) C1{ Fs Fc:1 Fc:0}



static void Test_S_BFu1c_BFu0c()
{
  {
    init_simple_test("S_BFu1c_BFu0c");
    static S_BFu1c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu1c_BFu0c(Test_S_BFu1c_BFu0c, "S_BFu1c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1c_BFu0i  {
  short v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 S_BFu1c_BFu0i) C1{ Fs Fc:1 Fi:0}



static void Test_S_BFu1c_BFu0i()
{
  {
    init_simple_test("S_BFu1c_BFu0i");
    static S_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu1c_BFu0i(Test_S_BFu1c_BFu0i, "S_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1c_BFu0ll  {
  short v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 S_BFu1c_BFu0ll) C1{ Fs Fc:1 FL:0}



static void Test_S_BFu1c_BFu0ll()
{
  {
    init_simple_test("S_BFu1c_BFu0ll");
    static S_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu1c_BFu0ll(Test_S_BFu1c_BFu0ll, "S_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1c_BFu0s  {
  short v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 S_BFu1c_BFu0s) C1{ Fs Fc:1 Fs:0}



static void Test_S_BFu1c_BFu0s()
{
  {
    init_simple_test("S_BFu1c_BFu0s");
    static S_BFu1c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu1c_BFu0s(Test_S_BFu1c_BFu0s, "S_BFu1c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1i_BFu0c  {
  short v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 S_BFu1i_BFu0c) C1{ Fs Fi:1 Fc:0}



static void Test_S_BFu1i_BFu0c()
{
  {
    init_simple_test("S_BFu1i_BFu0c");
    static S_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu1i_BFu0c(Test_S_BFu1i_BFu0c, "S_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1i_BFu0i  {
  short v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 S_BFu1i_BFu0i) C1{ Fs Fi:1 Fi:0}



static void Test_S_BFu1i_BFu0i()
{
  {
    init_simple_test("S_BFu1i_BFu0i");
    static S_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu1i_BFu0i(Test_S_BFu1i_BFu0i, "S_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1i_BFu0ll  {
  short v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 S_BFu1i_BFu0ll) C1{ Fs Fi:1 FL:0}



static void Test_S_BFu1i_BFu0ll()
{
  {
    init_simple_test("S_BFu1i_BFu0ll");
    static S_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu1i_BFu0ll(Test_S_BFu1i_BFu0ll, "S_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1i_BFu0s  {
  short v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 S_BFu1i_BFu0s) C1{ Fs Fi:1 Fs:0}



static void Test_S_BFu1i_BFu0s()
{
  {
    init_simple_test("S_BFu1i_BFu0s");
    static S_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu1i_BFu0s(Test_S_BFu1i_BFu0s, "S_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1ll_BFu0c  {
  short v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 S_BFu1ll_BFu0c) C1{ Fs FL:1 Fc:0}



static void Test_S_BFu1ll_BFu0c()
{
  {
    init_simple_test("S_BFu1ll_BFu0c");
    static S_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu1ll_BFu0c(Test_S_BFu1ll_BFu0c, "S_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1ll_BFu0i  {
  short v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 S_BFu1ll_BFu0i) C1{ Fs FL:1 Fi:0}



static void Test_S_BFu1ll_BFu0i()
{
  {
    init_simple_test("S_BFu1ll_BFu0i");
    static S_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu1ll_BFu0i(Test_S_BFu1ll_BFu0i, "S_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1ll_BFu0ll  {
  short v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 S_BFu1ll_BFu0ll) C1{ Fs FL:1 FL:0}



static void Test_S_BFu1ll_BFu0ll()
{
  {
    init_simple_test("S_BFu1ll_BFu0ll");
    static S_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu1ll_BFu0ll(Test_S_BFu1ll_BFu0ll, "S_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1ll_BFu0s  {
  short v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 S_BFu1ll_BFu0s) C1{ Fs FL:1 Fs:0}



static void Test_S_BFu1ll_BFu0s()
{
  {
    init_simple_test("S_BFu1ll_BFu0s");
    static S_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu1ll_BFu0s(Test_S_BFu1ll_BFu0s, "S_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1s_BFu0c  {
  short v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 S_BFu1s_BFu0c) C1{ Fs Fs:1 Fc:0}



static void Test_S_BFu1s_BFu0c()
{
  {
    init_simple_test("S_BFu1s_BFu0c");
    static S_BFu1s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu1s_BFu0c(Test_S_BFu1s_BFu0c, "S_BFu1s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1s_BFu0i  {
  short v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 S_BFu1s_BFu0i) C1{ Fs Fs:1 Fi:0}



static void Test_S_BFu1s_BFu0i()
{
  {
    init_simple_test("S_BFu1s_BFu0i");
    static S_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu1s_BFu0i(Test_S_BFu1s_BFu0i, "S_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1s_BFu0ll  {
  short v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 S_BFu1s_BFu0ll) C1{ Fs Fs:1 FL:0}



static void Test_S_BFu1s_BFu0ll()
{
  {
    init_simple_test("S_BFu1s_BFu0ll");
    static S_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu1s_BFu0ll(Test_S_BFu1s_BFu0ll, "S_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu1s_BFu0s  {
  short v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 S_BFu1s_BFu0s) C1{ Fs Fs:1 Fs:0}



static void Test_S_BFu1s_BFu0s()
{
  {
    init_simple_test("S_BFu1s_BFu0s");
    static S_BFu1s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu1s_BFu0s(Test_S_BFu1s_BFu0s, "S_BFu1s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu31i_BFu0c  {
  short v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 S_BFu31i_BFu0c) C1{ Fs Fi:31 Fc:0}



static void Test_S_BFu31i_BFu0c()
{
  {
    init_simple_test("S_BFu31i_BFu0c");
    static S_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "S_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "S_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu31i_BFu0c(Test_S_BFu31i_BFu0c, "S_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu31i_BFu0i  {
  short v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 S_BFu31i_BFu0i) C1{ Fs Fi:31 Fi:0}



static void Test_S_BFu31i_BFu0i()
{
  {
    init_simple_test("S_BFu31i_BFu0i");
    static S_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "S_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "S_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu31i_BFu0i(Test_S_BFu31i_BFu0i, "S_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu31i_BFu0ll  {
  short v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 S_BFu31i_BFu0ll) C1{ Fs Fi:31 FL:0}



static void Test_S_BFu31i_BFu0ll()
{
  {
    init_simple_test("S_BFu31i_BFu0ll");
    static S_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "S_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "S_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu31i_BFu0ll(Test_S_BFu31i_BFu0ll, "S_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu31i_BFu0s  {
  short v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 S_BFu31i_BFu0s) C1{ Fs Fi:31 Fs:0}



static void Test_S_BFu31i_BFu0s()
{
  {
    init_simple_test("S_BFu31i_BFu0s");
    static S_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "S_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "S_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu31i_BFu0s(Test_S_BFu31i_BFu0s, "S_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu31ll_BFu0c  {
  short v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 S_BFu31ll_BFu0c) C1{ Fs FL:31 Fc:0}



static void Test_S_BFu31ll_BFu0c()
{
  {
    init_simple_test("S_BFu31ll_BFu0c");
    static S_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "S_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "S_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu31ll_BFu0c(Test_S_BFu31ll_BFu0c, "S_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu31ll_BFu0i  {
  short v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 S_BFu31ll_BFu0i) C1{ Fs FL:31 Fi:0}



static void Test_S_BFu31ll_BFu0i()
{
  {
    init_simple_test("S_BFu31ll_BFu0i");
    static S_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "S_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "S_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu31ll_BFu0i(Test_S_BFu31ll_BFu0i, "S_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu31ll_BFu0ll  {
  short v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 S_BFu31ll_BFu0ll) C1{ Fs FL:31 FL:0}



static void Test_S_BFu31ll_BFu0ll()
{
  {
    init_simple_test("S_BFu31ll_BFu0ll");
    static S_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "S_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "S_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu31ll_BFu0ll(Test_S_BFu31ll_BFu0ll, "S_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu31ll_BFu0s  {
  short v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 S_BFu31ll_BFu0s) C1{ Fs FL:31 Fs:0}



static void Test_S_BFu31ll_BFu0s()
{
  {
    init_simple_test("S_BFu31ll_BFu0s");
    static S_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "S_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "S_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu31ll_BFu0s(Test_S_BFu31ll_BFu0s, "S_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu32i_BFu0c  {
  short v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 S_BFu32i_BFu0c) C1{ Fs Fi:32 Fc:0}



static void Test_S_BFu32i_BFu0c()
{
  {
    init_simple_test("S_BFu32i_BFu0c");
    static S_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "S_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "S_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu32i_BFu0c(Test_S_BFu32i_BFu0c, "S_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu32i_BFu0i  {
  short v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 S_BFu32i_BFu0i) C1{ Fs Fi:32 Fi:0}



static void Test_S_BFu32i_BFu0i()
{
  {
    init_simple_test("S_BFu32i_BFu0i");
    static S_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "S_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "S_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu32i_BFu0i(Test_S_BFu32i_BFu0i, "S_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu32i_BFu0ll  {
  short v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 S_BFu32i_BFu0ll) C1{ Fs Fi:32 FL:0}



static void Test_S_BFu32i_BFu0ll()
{
  {
    init_simple_test("S_BFu32i_BFu0ll");
    static S_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "S_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "S_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu32i_BFu0ll(Test_S_BFu32i_BFu0ll, "S_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu32i_BFu0s  {
  short v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 S_BFu32i_BFu0s) C1{ Fs Fi:32 Fs:0}



static void Test_S_BFu32i_BFu0s()
{
  {
    init_simple_test("S_BFu32i_BFu0s");
    static S_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "S_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "S_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu32i_BFu0s(Test_S_BFu32i_BFu0s, "S_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu32ll_BFu0c  {
  short v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 S_BFu32ll_BFu0c) C1{ Fs FL:32 Fc:0}



static void Test_S_BFu32ll_BFu0c()
{
  {
    init_simple_test("S_BFu32ll_BFu0c");
    static S_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "S_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "S_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu32ll_BFu0c(Test_S_BFu32ll_BFu0c, "S_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu32ll_BFu0i  {
  short v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 S_BFu32ll_BFu0i) C1{ Fs FL:32 Fi:0}



static void Test_S_BFu32ll_BFu0i()
{
  {
    init_simple_test("S_BFu32ll_BFu0i");
    static S_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "S_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "S_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu32ll_BFu0i(Test_S_BFu32ll_BFu0i, "S_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu32ll_BFu0ll  {
  short v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 S_BFu32ll_BFu0ll) C1{ Fs FL:32 FL:0}



static void Test_S_BFu32ll_BFu0ll()
{
  {
    init_simple_test("S_BFu32ll_BFu0ll");
    static S_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "S_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "S_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu32ll_BFu0ll(Test_S_BFu32ll_BFu0ll, "S_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu32ll_BFu0s  {
  short v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 S_BFu32ll_BFu0s) C1{ Fs FL:32 Fs:0}



static void Test_S_BFu32ll_BFu0s()
{
  {
    init_simple_test("S_BFu32ll_BFu0s");
    static S_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "S_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "S_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu32ll_BFu0s(Test_S_BFu32ll_BFu0s, "S_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu33_BFu0c  {
  short v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 S_BFu33_BFu0c) C1{ Fs FL:33 Fc:0}



static void Test_S_BFu33_BFu0c()
{
  {
    init_simple_test("S_BFu33_BFu0c");
    static S_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "S_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "S_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu33_BFu0c(Test_S_BFu33_BFu0c, "S_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu33_BFu0i  {
  short v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 S_BFu33_BFu0i) C1{ Fs FL:33 Fi:0}



static void Test_S_BFu33_BFu0i()
{
  {
    init_simple_test("S_BFu33_BFu0i");
    static S_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "S_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "S_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu33_BFu0i(Test_S_BFu33_BFu0i, "S_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu33_BFu0ll  {
  short v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 S_BFu33_BFu0ll) C1{ Fs FL:33 FL:0}



static void Test_S_BFu33_BFu0ll()
{
  {
    init_simple_test("S_BFu33_BFu0ll");
    static S_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "S_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "S_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu33_BFu0ll(Test_S_BFu33_BFu0ll, "S_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu33_BFu0s  {
  short v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 S_BFu33_BFu0s) C1{ Fs FL:33 Fs:0}



static void Test_S_BFu33_BFu0s()
{
  {
    init_simple_test("S_BFu33_BFu0s");
    static S_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "S_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "S_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu33_BFu0s(Test_S_BFu33_BFu0s, "S_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7c_BFu0c  {
  short v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 S_BFu7c_BFu0c) C1{ Fs Fc:7 Fc:0}



static void Test_S_BFu7c_BFu0c()
{
  {
    init_simple_test("S_BFu7c_BFu0c");
    static S_BFu7c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu7c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu7c_BFu0c(Test_S_BFu7c_BFu0c, "S_BFu7c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7c_BFu0i  {
  short v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 S_BFu7c_BFu0i) C1{ Fs Fc:7 Fi:0}



static void Test_S_BFu7c_BFu0i()
{
  {
    init_simple_test("S_BFu7c_BFu0i");
    static S_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu7c_BFu0i(Test_S_BFu7c_BFu0i, "S_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7c_BFu0ll  {
  short v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 S_BFu7c_BFu0ll) C1{ Fs Fc:7 FL:0}



static void Test_S_BFu7c_BFu0ll()
{
  {
    init_simple_test("S_BFu7c_BFu0ll");
    static S_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu7c_BFu0ll(Test_S_BFu7c_BFu0ll, "S_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7c_BFu0s  {
  short v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 S_BFu7c_BFu0s) C1{ Fs Fc:7 Fs:0}



static void Test_S_BFu7c_BFu0s()
{
  {
    init_simple_test("S_BFu7c_BFu0s");
    static S_BFu7c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu7c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu7c_BFu0s(Test_S_BFu7c_BFu0s, "S_BFu7c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7i_BFu0c  {
  short v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 S_BFu7i_BFu0c) C1{ Fs Fi:7 Fc:0}



static void Test_S_BFu7i_BFu0c()
{
  {
    init_simple_test("S_BFu7i_BFu0c");
    static S_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu7i_BFu0c(Test_S_BFu7i_BFu0c, "S_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7i_BFu0i  {
  short v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 S_BFu7i_BFu0i) C1{ Fs Fi:7 Fi:0}



static void Test_S_BFu7i_BFu0i()
{
  {
    init_simple_test("S_BFu7i_BFu0i");
    static S_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu7i_BFu0i(Test_S_BFu7i_BFu0i, "S_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7i_BFu0ll  {
  short v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 S_BFu7i_BFu0ll) C1{ Fs Fi:7 FL:0}



static void Test_S_BFu7i_BFu0ll()
{
  {
    init_simple_test("S_BFu7i_BFu0ll");
    static S_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu7i_BFu0ll(Test_S_BFu7i_BFu0ll, "S_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7i_BFu0s  {
  short v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 S_BFu7i_BFu0s) C1{ Fs Fi:7 Fs:0}



static void Test_S_BFu7i_BFu0s()
{
  {
    init_simple_test("S_BFu7i_BFu0s");
    static S_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu7i_BFu0s(Test_S_BFu7i_BFu0s, "S_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7ll_BFu0c  {
  short v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 S_BFu7ll_BFu0c) C1{ Fs FL:7 Fc:0}



static void Test_S_BFu7ll_BFu0c()
{
  {
    init_simple_test("S_BFu7ll_BFu0c");
    static S_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu7ll_BFu0c(Test_S_BFu7ll_BFu0c, "S_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7ll_BFu0i  {
  short v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 S_BFu7ll_BFu0i) C1{ Fs FL:7 Fi:0}



static void Test_S_BFu7ll_BFu0i()
{
  {
    init_simple_test("S_BFu7ll_BFu0i");
    static S_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu7ll_BFu0i(Test_S_BFu7ll_BFu0i, "S_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7ll_BFu0ll  {
  short v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 S_BFu7ll_BFu0ll) C1{ Fs FL:7 FL:0}



static void Test_S_BFu7ll_BFu0ll()
{
  {
    init_simple_test("S_BFu7ll_BFu0ll");
    static S_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu7ll_BFu0ll(Test_S_BFu7ll_BFu0ll, "S_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7ll_BFu0s  {
  short v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 S_BFu7ll_BFu0s) C1{ Fs FL:7 Fs:0}



static void Test_S_BFu7ll_BFu0s()
{
  {
    init_simple_test("S_BFu7ll_BFu0s");
    static S_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu7ll_BFu0s(Test_S_BFu7ll_BFu0s, "S_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7s_BFu0c  {
  short v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 S_BFu7s_BFu0c) C1{ Fs Fs:7 Fc:0}



static void Test_S_BFu7s_BFu0c()
{
  {
    init_simple_test("S_BFu7s_BFu0c");
    static S_BFu7s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu7s_BFu0c(Test_S_BFu7s_BFu0c, "S_BFu7s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7s_BFu0i  {
  short v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 S_BFu7s_BFu0i) C1{ Fs Fs:7 Fi:0}



static void Test_S_BFu7s_BFu0i()
{
  {
    init_simple_test("S_BFu7s_BFu0i");
    static S_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu7s_BFu0i(Test_S_BFu7s_BFu0i, "S_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7s_BFu0ll  {
  short v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 S_BFu7s_BFu0ll) C1{ Fs Fs:7 FL:0}



static void Test_S_BFu7s_BFu0ll()
{
  {
    init_simple_test("S_BFu7s_BFu0ll");
    static S_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu7s_BFu0ll(Test_S_BFu7s_BFu0ll, "S_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu7s_BFu0s  {
  short v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 S_BFu7s_BFu0s) C1{ Fs Fs:7 Fs:0}



static void Test_S_BFu7s_BFu0s()
{
  {
    init_simple_test("S_BFu7s_BFu0s");
    static S_BFu7s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "S_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "S_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu7s_BFu0s(Test_S_BFu7s_BFu0s, "S_BFu7s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8c_BFu0c  {
  short v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 S_BFu8c_BFu0c) C1{ Fs Fc:8 Fc:0}



static void Test_S_BFu8c_BFu0c()
{
  {
    init_simple_test("S_BFu8c_BFu0c");
    static S_BFu8c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu8c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu8c_BFu0c(Test_S_BFu8c_BFu0c, "S_BFu8c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8c_BFu0i  {
  short v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 S_BFu8c_BFu0i) C1{ Fs Fc:8 Fi:0}



static void Test_S_BFu8c_BFu0i()
{
  {
    init_simple_test("S_BFu8c_BFu0i");
    static S_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu8c_BFu0i(Test_S_BFu8c_BFu0i, "S_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8c_BFu0ll  {
  short v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 S_BFu8c_BFu0ll) C1{ Fs Fc:8 FL:0}



static void Test_S_BFu8c_BFu0ll()
{
  {
    init_simple_test("S_BFu8c_BFu0ll");
    static S_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu8c_BFu0ll(Test_S_BFu8c_BFu0ll, "S_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8c_BFu0s  {
  short v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 S_BFu8c_BFu0s) C1{ Fs Fc:8 Fs:0}



static void Test_S_BFu8c_BFu0s()
{
  {
    init_simple_test("S_BFu8c_BFu0s");
    static S_BFu8c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu8c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu8c_BFu0s(Test_S_BFu8c_BFu0s, "S_BFu8c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8i_BFu0c  {
  short v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 S_BFu8i_BFu0c) C1{ Fs Fi:8 Fc:0}



static void Test_S_BFu8i_BFu0c()
{
  {
    init_simple_test("S_BFu8i_BFu0c");
    static S_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu8i_BFu0c(Test_S_BFu8i_BFu0c, "S_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8i_BFu0i  {
  short v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 S_BFu8i_BFu0i) C1{ Fs Fi:8 Fi:0}



static void Test_S_BFu8i_BFu0i()
{
  {
    init_simple_test("S_BFu8i_BFu0i");
    static S_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu8i_BFu0i(Test_S_BFu8i_BFu0i, "S_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8i_BFu0ll  {
  short v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 S_BFu8i_BFu0ll) C1{ Fs Fi:8 FL:0}



static void Test_S_BFu8i_BFu0ll()
{
  {
    init_simple_test("S_BFu8i_BFu0ll");
    static S_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu8i_BFu0ll(Test_S_BFu8i_BFu0ll, "S_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8i_BFu0s  {
  short v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 S_BFu8i_BFu0s) C1{ Fs Fi:8 Fs:0}



static void Test_S_BFu8i_BFu0s()
{
  {
    init_simple_test("S_BFu8i_BFu0s");
    static S_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu8i_BFu0s(Test_S_BFu8i_BFu0s, "S_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8ll_BFu0c  {
  short v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 S_BFu8ll_BFu0c) C1{ Fs FL:8 Fc:0}



static void Test_S_BFu8ll_BFu0c()
{
  {
    init_simple_test("S_BFu8ll_BFu0c");
    static S_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu8ll_BFu0c(Test_S_BFu8ll_BFu0c, "S_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8ll_BFu0i  {
  short v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 S_BFu8ll_BFu0i) C1{ Fs FL:8 Fi:0}



static void Test_S_BFu8ll_BFu0i()
{
  {
    init_simple_test("S_BFu8ll_BFu0i");
    static S_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu8ll_BFu0i(Test_S_BFu8ll_BFu0i, "S_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8ll_BFu0ll  {
  short v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 S_BFu8ll_BFu0ll) C1{ Fs FL:8 FL:0}



static void Test_S_BFu8ll_BFu0ll()
{
  {
    init_simple_test("S_BFu8ll_BFu0ll");
    static S_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu8ll_BFu0ll(Test_S_BFu8ll_BFu0ll, "S_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8ll_BFu0s  {
  short v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 S_BFu8ll_BFu0s) C1{ Fs FL:8 Fs:0}



static void Test_S_BFu8ll_BFu0s()
{
  {
    init_simple_test("S_BFu8ll_BFu0s");
    static S_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu8ll_BFu0s(Test_S_BFu8ll_BFu0s, "S_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8s_BFu0c  {
  short v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 S_BFu8s_BFu0c) C1{ Fs Fs:8 Fc:0}



static void Test_S_BFu8s_BFu0c()
{
  {
    init_simple_test("S_BFu8s_BFu0c");
    static S_BFu8s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu8s_BFu0c(Test_S_BFu8s_BFu0c, "S_BFu8s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8s_BFu0i  {
  short v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 S_BFu8s_BFu0i) C1{ Fs Fs:8 Fi:0}



static void Test_S_BFu8s_BFu0i()
{
  {
    init_simple_test("S_BFu8s_BFu0i");
    static S_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu8s_BFu0i(Test_S_BFu8s_BFu0i, "S_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8s_BFu0ll  {
  short v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 S_BFu8s_BFu0ll) C1{ Fs Fs:8 FL:0}



static void Test_S_BFu8s_BFu0ll()
{
  {
    init_simple_test("S_BFu8s_BFu0ll");
    static S_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu8s_BFu0ll(Test_S_BFu8s_BFu0ll, "S_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu8s_BFu0s  {
  short v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 S_BFu8s_BFu0s) C1{ Fs Fs:8 Fs:0}



static void Test_S_BFu8s_BFu0s()
{
  {
    init_simple_test("S_BFu8s_BFu0s");
    static S_BFu8s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "S_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "S_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu8s_BFu0s(Test_S_BFu8s_BFu0s, "S_BFu8s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9i_BFu0c  {
  short v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 S_BFu9i_BFu0c) C1{ Fs Fi:9 Fc:0}



static void Test_S_BFu9i_BFu0c()
{
  {
    init_simple_test("S_BFu9i_BFu0c");
    static S_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu9i_BFu0c(Test_S_BFu9i_BFu0c, "S_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9i_BFu0i  {
  short v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 S_BFu9i_BFu0i) C1{ Fs Fi:9 Fi:0}



static void Test_S_BFu9i_BFu0i()
{
  {
    init_simple_test("S_BFu9i_BFu0i");
    static S_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu9i_BFu0i(Test_S_BFu9i_BFu0i, "S_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9i_BFu0ll  {
  short v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 S_BFu9i_BFu0ll) C1{ Fs Fi:9 FL:0}



static void Test_S_BFu9i_BFu0ll()
{
  {
    init_simple_test("S_BFu9i_BFu0ll");
    static S_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu9i_BFu0ll(Test_S_BFu9i_BFu0ll, "S_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9i_BFu0s  {
  short v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 S_BFu9i_BFu0s) C1{ Fs Fi:9 Fs:0}



static void Test_S_BFu9i_BFu0s()
{
  {
    init_simple_test("S_BFu9i_BFu0s");
    static S_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu9i_BFu0s(Test_S_BFu9i_BFu0s, "S_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9ll_BFu0c  {
  short v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 S_BFu9ll_BFu0c) C1{ Fs FL:9 Fc:0}



static void Test_S_BFu9ll_BFu0c()
{
  {
    init_simple_test("S_BFu9ll_BFu0c");
    static S_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu9ll_BFu0c(Test_S_BFu9ll_BFu0c, "S_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9ll_BFu0i  {
  short v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 S_BFu9ll_BFu0i) C1{ Fs FL:9 Fi:0}



static void Test_S_BFu9ll_BFu0i()
{
  {
    init_simple_test("S_BFu9ll_BFu0i");
    static S_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu9ll_BFu0i(Test_S_BFu9ll_BFu0i, "S_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9ll_BFu0ll  {
  short v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 S_BFu9ll_BFu0ll) C1{ Fs FL:9 FL:0}



static void Test_S_BFu9ll_BFu0ll()
{
  {
    init_simple_test("S_BFu9ll_BFu0ll");
    static S_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu9ll_BFu0ll(Test_S_BFu9ll_BFu0ll, "S_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9ll_BFu0s  {
  short v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 S_BFu9ll_BFu0s) C1{ Fs FL:9 Fs:0}



static void Test_S_BFu9ll_BFu0s()
{
  {
    init_simple_test("S_BFu9ll_BFu0s");
    static S_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu9ll_BFu0s(Test_S_BFu9ll_BFu0s, "S_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9s_BFu0c  {
  short v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 S_BFu9s_BFu0c) C1{ Fs Fs:9 Fc:0}



static void Test_S_BFu9s_BFu0c()
{
  {
    init_simple_test("S_BFu9s_BFu0c");
    static S_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vS_BFu9s_BFu0c(Test_S_BFu9s_BFu0c, "S_BFu9s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9s_BFu0i  {
  short v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 S_BFu9s_BFu0i) C1{ Fs Fs:9 Fi:0}



static void Test_S_BFu9s_BFu0i()
{
  {
    init_simple_test("S_BFu9s_BFu0i");
    static S_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vS_BFu9s_BFu0i(Test_S_BFu9s_BFu0i, "S_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9s_BFu0ll  {
  short v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 S_BFu9s_BFu0ll) C1{ Fs Fs:9 FL:0}



static void Test_S_BFu9s_BFu0ll()
{
  {
    init_simple_test("S_BFu9s_BFu0ll");
    static S_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vS_BFu9s_BFu0ll(Test_S_BFu9s_BFu0ll, "S_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_BFu9s_BFu0s  {
  short v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 S_BFu9s_BFu0s) C1{ Fs Fs:9 Fs:0}



static void Test_S_BFu9s_BFu0s()
{
  {
    init_simple_test("S_BFu9s_BFu0s");
    static S_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "S_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "S_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vS_BFu9s_BFu0s(Test_S_BFu9s_BFu0s, "S_BFu9s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_C_BFu0c  {
  short v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 S_C_BFu0c) C1{ Fs Fc Fc:0}



static void Test_S_C_BFu0c()
{
  {
    init_simple_test("S_C_BFu0c");
    static S_C_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_C_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_C_BFu0c)");
    check_field_offset(lv, v1, 0, "S_C_BFu0c.v1");
    check_field_offset(lv, v2, 2, "S_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_C_BFu0c(Test_S_C_BFu0c, "S_C_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_C_BFu0i  {
  short v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 S_C_BFu0i) C1{ Fs Fc Fi:0}



static void Test_S_C_BFu0i()
{
  {
    init_simple_test("S_C_BFu0i");
    static S_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_C_BFu0i)");
    check_field_offset(lv, v1, 0, "S_C_BFu0i.v1");
    check_field_offset(lv, v2, 2, "S_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_C_BFu0i(Test_S_C_BFu0i, "S_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_C_BFu0ll  {
  short v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 S_C_BFu0ll) C1{ Fs Fc FL:0}



static void Test_S_C_BFu0ll()
{
  {
    init_simple_test("S_C_BFu0ll");
    static S_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_C_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "S_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_C_BFu0ll(Test_S_C_BFu0ll, "S_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_C_BFu0s  {
  short v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 S_C_BFu0s) C1{ Fs Fc Fs:0}



static void Test_S_C_BFu0s()
{
  {
    init_simple_test("S_C_BFu0s");
    static S_C_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_C_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_C_BFu0s)");
    check_field_offset(lv, v1, 0, "S_C_BFu0s.v1");
    check_field_offset(lv, v2, 2, "S_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_C_BFu0s(Test_S_C_BFu0s, "S_C_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_D_BFu0c  {
  short v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 S_D_BFu0c) C1{ Fs FL Fc:0}



static void Test_S_D_BFu0c()
{
  {
    init_simple_test("S_D_BFu0c");
    static S_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_D_BFu0c)");
    check_field_offset(lv, v1, 0, "S_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_D_BFu0c(Test_S_D_BFu0c, "S_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_D_BFu0i  {
  short v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 S_D_BFu0i) C1{ Fs FL Fi:0}



static void Test_S_D_BFu0i()
{
  {
    init_simple_test("S_D_BFu0i");
    static S_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_D_BFu0i)");
    check_field_offset(lv, v1, 0, "S_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_D_BFu0i(Test_S_D_BFu0i, "S_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_D_BFu0ll  {
  short v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 S_D_BFu0ll) C1{ Fs FL FL:0}



static void Test_S_D_BFu0ll()
{
  {
    init_simple_test("S_D_BFu0ll");
    static S_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_D_BFu0ll(Test_S_D_BFu0ll, "S_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_D_BFu0s  {
  short v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 S_D_BFu0s) C1{ Fs FL Fs:0}



static void Test_S_D_BFu0s()
{
  {
    init_simple_test("S_D_BFu0s");
    static S_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_D_BFu0s)");
    check_field_offset(lv, v1, 0, "S_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_D_BFu0s(Test_S_D_BFu0s, "S_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_F_BFu0c  {
  short v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 S_F_BFu0c) C1{ Fs Fi Fc:0}



static void Test_S_F_BFu0c()
{
  {
    init_simple_test("S_F_BFu0c");
    static S_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_F_BFu0c)");
    check_field_offset(lv, v1, 0, "S_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "S_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_F_BFu0c(Test_S_F_BFu0c, "S_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_F_BFu0i  {
  short v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 S_F_BFu0i) C1{ Fs Fi Fi:0}



static void Test_S_F_BFu0i()
{
  {
    init_simple_test("S_F_BFu0i");
    static S_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_F_BFu0i)");
    check_field_offset(lv, v1, 0, "S_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "S_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_F_BFu0i(Test_S_F_BFu0i, "S_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_F_BFu0ll  {
  short v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 S_F_BFu0ll) C1{ Fs Fi FL:0}



static void Test_S_F_BFu0ll()
{
  {
    init_simple_test("S_F_BFu0ll");
    static S_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "S_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_F_BFu0ll(Test_S_F_BFu0ll, "S_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_F_BFu0s  {
  short v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 S_F_BFu0s) C1{ Fs Fi Fs:0}



static void Test_S_F_BFu0s()
{
  {
    init_simple_test("S_F_BFu0s");
    static S_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_F_BFu0s)");
    check_field_offset(lv, v1, 0, "S_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "S_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_F_BFu0s(Test_S_F_BFu0s, "S_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_I_BFu0c  {
  short v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 S_I_BFu0c) C1{ Fs Fi Fc:0}



static void Test_S_I_BFu0c()
{
  {
    init_simple_test("S_I_BFu0c");
    static S_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_I_BFu0c)");
    check_field_offset(lv, v1, 0, "S_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "S_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_I_BFu0c(Test_S_I_BFu0c, "S_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_I_BFu0i  {
  short v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 S_I_BFu0i) C1{ Fs Fi Fi:0}



static void Test_S_I_BFu0i()
{
  {
    init_simple_test("S_I_BFu0i");
    static S_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_I_BFu0i)");
    check_field_offset(lv, v1, 0, "S_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "S_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_I_BFu0i(Test_S_I_BFu0i, "S_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_I_BFu0ll  {
  short v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 S_I_BFu0ll) C1{ Fs Fi FL:0}



static void Test_S_I_BFu0ll()
{
  {
    init_simple_test("S_I_BFu0ll");
    static S_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "S_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_I_BFu0ll(Test_S_I_BFu0ll, "S_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_I_BFu0s  {
  short v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 S_I_BFu0s) C1{ Fs Fi Fs:0}



static void Test_S_I_BFu0s()
{
  {
    init_simple_test("S_I_BFu0s");
    static S_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_I_BFu0s)");
    check_field_offset(lv, v1, 0, "S_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "S_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_I_BFu0s(Test_S_I_BFu0s, "S_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ip_BFu0c  {
  short v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 S_Ip_BFu0c) C1{ Fs Fp Fc:0}



static void Test_S_Ip_BFu0c()
{
  {
    init_simple_test("S_Ip_BFu0c");
    static S_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_Ip_BFu0c(Test_S_Ip_BFu0c, "S_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ip_BFu0i  {
  short v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 S_Ip_BFu0i) C1{ Fs Fp Fi:0}



static void Test_S_Ip_BFu0i()
{
  {
    init_simple_test("S_Ip_BFu0i");
    static S_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_Ip_BFu0i(Test_S_Ip_BFu0i, "S_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ip_BFu0ll  {
  short v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 S_Ip_BFu0ll) C1{ Fs Fp FL:0}



static void Test_S_Ip_BFu0ll()
{
  {
    init_simple_test("S_Ip_BFu0ll");
    static S_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_Ip_BFu0ll(Test_S_Ip_BFu0ll, "S_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ip_BFu0s  {
  short v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 S_Ip_BFu0s) C1{ Fs Fp Fs:0}



static void Test_S_Ip_BFu0s()
{
  {
    init_simple_test("S_Ip_BFu0s");
    static S_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_Ip_BFu0s(Test_S_Ip_BFu0s, "S_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_L_BFu0c  {
  short v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 S_L_BFu0c) C1{ Fs FL Fc:0}



static void Test_S_L_BFu0c()
{
  {
    init_simple_test("S_L_BFu0c");
    static S_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_L_BFu0c)");
    check_field_offset(lv, v1, 0, "S_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_L_BFu0c(Test_S_L_BFu0c, "S_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_L_BFu0i  {
  short v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 S_L_BFu0i) C1{ Fs FL Fi:0}



static void Test_S_L_BFu0i()
{
  {
    init_simple_test("S_L_BFu0i");
    static S_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_L_BFu0i)");
    check_field_offset(lv, v1, 0, "S_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_L_BFu0i(Test_S_L_BFu0i, "S_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_L_BFu0ll  {
  short v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 S_L_BFu0ll) C1{ Fs FL FL:0}



static void Test_S_L_BFu0ll()
{
  {
    init_simple_test("S_L_BFu0ll");
    static S_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_L_BFu0ll(Test_S_L_BFu0ll, "S_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_L_BFu0s  {
  short v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 S_L_BFu0s) C1{ Fs FL Fs:0}



static void Test_S_L_BFu0s()
{
  {
    init_simple_test("S_L_BFu0s");
    static S_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_L_BFu0s)");
    check_field_offset(lv, v1, 0, "S_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_L_BFu0s(Test_S_L_BFu0s, "S_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_S_BFu0c  {
  short v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 S_S_BFu0c) C1{ Fs[2] Fc:0}



static void Test_S_S_BFu0c()
{
  {
    init_simple_test("S_S_BFu0c");
    static S_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_S_BFu0c)");
    check_field_offset(lv, v1, 0, "S_S_BFu0c.v1");
    check_field_offset(lv, v2, 2, "S_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_S_BFu0c(Test_S_S_BFu0c, "S_S_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_S_BFu0i  {
  short v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 S_S_BFu0i) C1{ Fs[2] Fi:0}



static void Test_S_S_BFu0i()
{
  {
    init_simple_test("S_S_BFu0i");
    static S_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_S_BFu0i)");
    check_field_offset(lv, v1, 0, "S_S_BFu0i.v1");
    check_field_offset(lv, v2, 2, "S_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_S_BFu0i(Test_S_S_BFu0i, "S_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_S_BFu0ll  {
  short v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 S_S_BFu0ll) C1{ Fs[2] FL:0}



static void Test_S_S_BFu0ll()
{
  {
    init_simple_test("S_S_BFu0ll");
    static S_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_S_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "S_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_S_BFu0ll(Test_S_S_BFu0ll, "S_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_S_BFu0s  {
  short v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 S_S_BFu0s) C1{ Fs[2] Fs:0}



static void Test_S_S_BFu0s()
{
  {
    init_simple_test("S_S_BFu0s");
    static S_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_S_BFu0s)");
    check_field_offset(lv, v1, 0, "S_S_BFu0s.v1");
    check_field_offset(lv, v2, 2, "S_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_S_BFu0s(Test_S_S_BFu0s, "S_S_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Uc_BFu0c  {
  short v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 S_Uc_BFu0c) C1{ Fs Fc Fc:0}



static void Test_S_Uc_BFu0c()
{
  {
    init_simple_test("S_Uc_BFu0c");
    static S_Uc_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_Uc_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 2, "S_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_Uc_BFu0c(Test_S_Uc_BFu0c, "S_Uc_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Uc_BFu0i  {
  short v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 S_Uc_BFu0i) C1{ Fs Fc Fi:0}



static void Test_S_Uc_BFu0i()
{
  {
    init_simple_test("S_Uc_BFu0i");
    static S_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 2, "S_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_Uc_BFu0i(Test_S_Uc_BFu0i, "S_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Uc_BFu0ll  {
  short v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 S_Uc_BFu0ll) C1{ Fs Fc FL:0}



static void Test_S_Uc_BFu0ll()
{
  {
    init_simple_test("S_Uc_BFu0ll");
    static S_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "S_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_Uc_BFu0ll(Test_S_Uc_BFu0ll, "S_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Uc_BFu0s  {
  short v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 S_Uc_BFu0s) C1{ Fs Fc Fs:0}



static void Test_S_Uc_BFu0s()
{
  {
    init_simple_test("S_Uc_BFu0s");
    static S_Uc_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_Uc_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 2, "S_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_Uc_BFu0s(Test_S_Uc_BFu0s, "S_Uc_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ui_BFu0c  {
  short v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 S_Ui_BFu0c) C1{ Fs Fi Fc:0}



static void Test_S_Ui_BFu0c()
{
  {
    init_simple_test("S_Ui_BFu0c");
    static S_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "S_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_Ui_BFu0c(Test_S_Ui_BFu0c, "S_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ui_BFu0i  {
  short v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 S_Ui_BFu0i) C1{ Fs Fi Fi:0}



static void Test_S_Ui_BFu0i()
{
  {
    init_simple_test("S_Ui_BFu0i");
    static S_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "S_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_Ui_BFu0i(Test_S_Ui_BFu0i, "S_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ui_BFu0ll  {
  short v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 S_Ui_BFu0ll) C1{ Fs Fi FL:0}



static void Test_S_Ui_BFu0ll()
{
  {
    init_simple_test("S_Ui_BFu0ll");
    static S_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "S_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_Ui_BFu0ll(Test_S_Ui_BFu0ll, "S_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ui_BFu0s  {
  short v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 S_Ui_BFu0s) C1{ Fs Fi Fs:0}



static void Test_S_Ui_BFu0s()
{
  {
    init_simple_test("S_Ui_BFu0s");
    static S_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "S_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_Ui_BFu0s(Test_S_Ui_BFu0s, "S_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ul_BFu0c  {
  short v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 S_Ul_BFu0c) C1{ Fs FL Fc:0}



static void Test_S_Ul_BFu0c()
{
  {
    init_simple_test("S_Ul_BFu0c");
    static S_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_Ul_BFu0c(Test_S_Ul_BFu0c, "S_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ul_BFu0i  {
  short v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 S_Ul_BFu0i) C1{ Fs FL Fi:0}



static void Test_S_Ul_BFu0i()
{
  {
    init_simple_test("S_Ul_BFu0i");
    static S_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_Ul_BFu0i(Test_S_Ul_BFu0i, "S_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ul_BFu0ll  {
  short v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 S_Ul_BFu0ll) C1{ Fs FL FL:0}



static void Test_S_Ul_BFu0ll()
{
  {
    init_simple_test("S_Ul_BFu0ll");
    static S_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_Ul_BFu0ll(Test_S_Ul_BFu0ll, "S_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Ul_BFu0s  {
  short v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 S_Ul_BFu0s) C1{ Fs FL Fs:0}



static void Test_S_Ul_BFu0s()
{
  {
    init_simple_test("S_Ul_BFu0s");
    static S_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_Ul_BFu0s(Test_S_Ul_BFu0s, "S_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Us_BFu0c  {
  short v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 S_Us_BFu0c) C1{ Fs[2] Fc:0}



static void Test_S_Us_BFu0c()
{
  {
    init_simple_test("S_Us_BFu0c");
    static S_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Us_BFu0c.v1");
    check_field_offset(lv, v2, 2, "S_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_Us_BFu0c(Test_S_Us_BFu0c, "S_Us_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Us_BFu0i  {
  short v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 S_Us_BFu0i) C1{ Fs[2] Fi:0}



static void Test_S_Us_BFu0i()
{
  {
    init_simple_test("S_Us_BFu0i");
    static S_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Us_BFu0i.v1");
    check_field_offset(lv, v2, 2, "S_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_Us_BFu0i(Test_S_Us_BFu0i, "S_Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Us_BFu0ll  {
  short v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 S_Us_BFu0ll) C1{ Fs[2] FL:0}



static void Test_S_Us_BFu0ll()
{
  {
    init_simple_test("S_Us_BFu0ll");
    static S_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "S_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_Us_BFu0ll(Test_S_Us_BFu0ll, "S_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Us_BFu0s  {
  short v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 S_Us_BFu0s) C1{ Fs[2] Fs:0}



static void Test_S_Us_BFu0s()
{
  {
    init_simple_test("S_Us_BFu0s");
    static S_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Us_BFu0s.v1");
    check_field_offset(lv, v2, 2, "S_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_Us_BFu0s(Test_S_Us_BFu0s, "S_Us_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Vp_BFu0c  {
  short v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 S_Vp_BFu0c) C1{ Fs Fp Fc:0}



static void Test_S_Vp_BFu0c()
{
  {
    init_simple_test("S_Vp_BFu0c");
    static S_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vS_Vp_BFu0c(Test_S_Vp_BFu0c, "S_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Vp_BFu0i  {
  short v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 S_Vp_BFu0i) C1{ Fs Fp Fi:0}



static void Test_S_Vp_BFu0i()
{
  {
    init_simple_test("S_Vp_BFu0i");
    static S_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vS_Vp_BFu0i(Test_S_Vp_BFu0i, "S_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Vp_BFu0ll  {
  short v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 S_Vp_BFu0ll) C1{ Fs Fp FL:0}



static void Test_S_Vp_BFu0ll()
{
  {
    init_simple_test("S_Vp_BFu0ll");
    static S_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vS_Vp_BFu0ll(Test_S_Vp_BFu0ll, "S_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S_Vp_BFu0s  {
  short v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 S_Vp_BFu0s) C1{ Fs Fp Fs:0}



static void Test_S_Vp_BFu0s()
{
  {
    init_simple_test("S_Vp_BFu0s");
    static S_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vS_Vp_BFu0s(Test_S_Vp_BFu0s, "S_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c  {
  unsigned char v1;
  unsigned char  :0;
};
//SIG(1 Uc_BFu0c) C1{ Fc Fc:0}



static void Test_Uc_BFu0c()
{
  {
    init_simple_test("Uc_BFu0c");
    static Uc_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(Uc_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0c(Test_Uc_BFu0c, "Uc_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu0c  {
  unsigned char v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Uc_BFu0c_BFu0c) C1{ Fc Fc:0 Fc:0}



static void Test_Uc_BFu0c_BFu0c()
{
  {
    init_simple_test("Uc_BFu0c_BFu0c");
    static Uc_BFu0c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(Uc_BFu0c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu0c(Test_Uc_BFu0c_BFu0c, "Uc_BFu0c_BFu0c", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu0i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Uc_BFu0c_BFu0i) C1{ Fc Fc:0 Fi:0}



static void Test_Uc_BFu0c_BFu0i()
{
  {
    init_simple_test("Uc_BFu0c_BFu0i");
    static Uc_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu0i(Test_Uc_BFu0c_BFu0i, "Uc_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu0ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Uc_BFu0c_BFu0ll) C1{ Fc Fc:0 FL:0}



static void Test_Uc_BFu0c_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu0ll");
    static Uc_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu0ll(Test_Uc_BFu0c_BFu0ll, "Uc_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu0s  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Uc_BFu0c_BFu0s) C1{ Fc Fc:0 Fs:0}



static void Test_Uc_BFu0c_BFu0s()
{
  {
    init_simple_test("Uc_BFu0c_BFu0s");
    static Uc_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu0s(Test_Uc_BFu0c_BFu0s, "Uc_BFu0c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu15i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Uc_BFu0c_BFu15i) C1{ Fc Fc:0 Fi:15}



static void Test_Uc_BFu0c_BFu15i()
{
  {
    init_simple_test("Uc_BFu0c_BFu15i");
    static Uc_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu15i(Test_Uc_BFu0c_BFu15i, "Uc_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu15ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Uc_BFu0c_BFu15ll) C1{ Fc Fc:0 FL:15}



static void Test_Uc_BFu0c_BFu15ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu15ll");
    static Uc_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu15ll(Test_Uc_BFu0c_BFu15ll, "Uc_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu15s  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Uc_BFu0c_BFu15s) C1{ Fc Fc:0 Fs:15}



static void Test_Uc_BFu0c_BFu15s()
{
  {
    init_simple_test("Uc_BFu0c_BFu15s");
    static Uc_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu15s(Test_Uc_BFu0c_BFu15s, "Uc_BFu0c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu16i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Uc_BFu0c_BFu16i) C1{ Fc Fc:0 Fi:16}



static void Test_Uc_BFu0c_BFu16i()
{
  {
    init_simple_test("Uc_BFu0c_BFu16i");
    static Uc_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu16i(Test_Uc_BFu0c_BFu16i, "Uc_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu16ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Uc_BFu0c_BFu16ll) C1{ Fc Fc:0 FL:16}



static void Test_Uc_BFu0c_BFu16ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu16ll");
    static Uc_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu16ll(Test_Uc_BFu0c_BFu16ll, "Uc_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu16s  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Uc_BFu0c_BFu16s) C1{ Fc Fc:0 Fs:16}



static void Test_Uc_BFu0c_BFu16s()
{
  {
    init_simple_test("Uc_BFu0c_BFu16s");
    static Uc_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Uc_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Uc_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu16s(Test_Uc_BFu0c_BFu16s, "Uc_BFu0c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu17i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Uc_BFu0c_BFu17i) C1{ Fc Fc:0 Fi:17}



static void Test_Uc_BFu0c_BFu17i()
{
  {
    init_simple_test("Uc_BFu0c_BFu17i");
    static Uc_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu17i(Test_Uc_BFu0c_BFu17i, "Uc_BFu0c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu17ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Uc_BFu0c_BFu17ll) C1{ Fc Fc:0 FL:17}



static void Test_Uc_BFu0c_BFu17ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu17ll");
    static Uc_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu17ll(Test_Uc_BFu0c_BFu17ll, "Uc_BFu0c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu1c  {
  unsigned char v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Uc_BFu0c_BFu1c) C1{ Fc Fc:0 Fc:1}



static void Test_Uc_BFu0c_BFu1c()
{
  {
    init_simple_test("Uc_BFu0c_BFu1c");
    static Uc_BFu0c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu1c(Test_Uc_BFu0c_BFu1c, "Uc_BFu0c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu1i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Uc_BFu0c_BFu1i) C1{ Fc Fc:0 Fi:1}



static void Test_Uc_BFu0c_BFu1i()
{
  {
    init_simple_test("Uc_BFu0c_BFu1i");
    static Uc_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu1i(Test_Uc_BFu0c_BFu1i, "Uc_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu1ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Uc_BFu0c_BFu1ll) C1{ Fc Fc:0 FL:1}



static void Test_Uc_BFu0c_BFu1ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu1ll");
    static Uc_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu1ll(Test_Uc_BFu0c_BFu1ll, "Uc_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu1s  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Uc_BFu0c_BFu1s) C1{ Fc Fc:0 Fs:1}



static void Test_Uc_BFu0c_BFu1s()
{
  {
    init_simple_test("Uc_BFu0c_BFu1s");
    static Uc_BFu0c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu1s(Test_Uc_BFu0c_BFu1s, "Uc_BFu0c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu31i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Uc_BFu0c_BFu31i) C1{ Fc Fc:0 Fi:31}



static void Test_Uc_BFu0c_BFu31i()
{
  {
    init_simple_test("Uc_BFu0c_BFu31i");
    static Uc_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Uc_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Uc_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu31i(Test_Uc_BFu0c_BFu31i, "Uc_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu31ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Uc_BFu0c_BFu31ll) C1{ Fc Fc:0 FL:31}



static void Test_Uc_BFu0c_BFu31ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu31ll");
    static Uc_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "Uc_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Uc_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu31ll(Test_Uc_BFu0c_BFu31ll, "Uc_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu32i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Uc_BFu0c_BFu32i) C1{ Fc Fc:0 Fi:32}



static void Test_Uc_BFu0c_BFu32i()
{
  {
    init_simple_test("Uc_BFu0c_BFu32i");
    static Uc_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu32i(Test_Uc_BFu0c_BFu32i, "Uc_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu32ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Uc_BFu0c_BFu32ll) C1{ Fc Fc:0 FL:32}



static void Test_Uc_BFu0c_BFu32ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu32ll");
    static Uc_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu32ll(Test_Uc_BFu0c_BFu32ll, "Uc_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu33  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Uc_BFu0c_BFu33) C1{ Fc Fc:0 FL:33}



static void Test_Uc_BFu0c_BFu33()
{
  {
    init_simple_test("Uc_BFu0c_BFu33");
    static Uc_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu33(Test_Uc_BFu0c_BFu33, "Uc_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu7c  {
  unsigned char v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Uc_BFu0c_BFu7c) C1{ Fc Fc:0 Fc:7}



static void Test_Uc_BFu0c_BFu7c()
{
  {
    init_simple_test("Uc_BFu0c_BFu7c");
    static Uc_BFu0c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu7c(Test_Uc_BFu0c_BFu7c, "Uc_BFu0c_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu7i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Uc_BFu0c_BFu7i) C1{ Fc Fc:0 Fi:7}



static void Test_Uc_BFu0c_BFu7i()
{
  {
    init_simple_test("Uc_BFu0c_BFu7i");
    static Uc_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu7i(Test_Uc_BFu0c_BFu7i, "Uc_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu7ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Uc_BFu0c_BFu7ll) C1{ Fc Fc:0 FL:7}



static void Test_Uc_BFu0c_BFu7ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu7ll");
    static Uc_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu7ll(Test_Uc_BFu0c_BFu7ll, "Uc_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu7s  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Uc_BFu0c_BFu7s) C1{ Fc Fc:0 Fs:7}



static void Test_Uc_BFu0c_BFu7s()
{
  {
    init_simple_test("Uc_BFu0c_BFu7s");
    static Uc_BFu0c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu7s(Test_Uc_BFu0c_BFu7s, "Uc_BFu0c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu8c  {
  unsigned char v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Uc_BFu0c_BFu8c) C1{ Fc Fc:0 Fc:8}



static void Test_Uc_BFu0c_BFu8c()
{
  {
    init_simple_test("Uc_BFu0c_BFu8c");
    static Uc_BFu0c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu8c(Test_Uc_BFu0c_BFu8c, "Uc_BFu0c_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu8i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Uc_BFu0c_BFu8i) C1{ Fc Fc:0 Fi:8}



static void Test_Uc_BFu0c_BFu8i()
{
  {
    init_simple_test("Uc_BFu0c_BFu8i");
    static Uc_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu8i(Test_Uc_BFu0c_BFu8i, "Uc_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu8ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Uc_BFu0c_BFu8ll) C1{ Fc Fc:0 FL:8}



static void Test_Uc_BFu0c_BFu8ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu8ll");
    static Uc_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu8ll(Test_Uc_BFu0c_BFu8ll, "Uc_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu8s  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Uc_BFu0c_BFu8s) C1{ Fc Fc:0 Fs:8}



static void Test_Uc_BFu0c_BFu8s()
{
  {
    init_simple_test("Uc_BFu0c_BFu8s");
    static Uc_BFu0c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu8s(Test_Uc_BFu0c_BFu8s, "Uc_BFu0c_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu9i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Uc_BFu0c_BFu9i) C1{ Fc Fc:0 Fi:9}



static void Test_Uc_BFu0c_BFu9i()
{
  {
    init_simple_test("Uc_BFu0c_BFu9i");
    static Uc_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu9i(Test_Uc_BFu0c_BFu9i, "Uc_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu9ll  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Uc_BFu0c_BFu9ll) C1{ Fc Fc:0 FL:9}



static void Test_Uc_BFu0c_BFu9ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu9ll");
    static Uc_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu9ll(Test_Uc_BFu0c_BFu9ll, "Uc_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_BFu9s  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Uc_BFu0c_BFu9s) C1{ Fc Fc:0 Fs:9}



static void Test_Uc_BFu0c_BFu9s()
{
  {
    init_simple_test("Uc_BFu0c_BFu9s");
    static Uc_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_BFu9s(Test_Uc_BFu0c_BFu9s, "Uc_BFu0c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_C  {
  unsigned char v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Uc_BFu0c_C) C1{ Fc Fc:0 Fc}



static void Test_Uc_BFu0c_C()
{
  {
    init_simple_test("Uc_BFu0c_C");
    static Uc_BFu0c_C lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_C)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_C.v1");
    check_field_offset(lv, v2, 1, "Uc_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_C(Test_Uc_BFu0c_C, "Uc_BFu0c_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_D  {
  unsigned char v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Uc_BFu0c_D) C1{ Fc Fc:0 FL}



static void Test_Uc_BFu0c_D()
{
  {
    init_simple_test("Uc_BFu0c_D");
    static Uc_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_D(Test_Uc_BFu0c_D, "Uc_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_F  {
  unsigned char v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Uc_BFu0c_F) C1{ Fc Fc:0 Fi}



static void Test_Uc_BFu0c_F()
{
  {
    init_simple_test("Uc_BFu0c_F");
    static Uc_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_F(Test_Uc_BFu0c_F, "Uc_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_I  {
  unsigned char v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Uc_BFu0c_I) C1{ Fc Fc:0 Fi}



static void Test_Uc_BFu0c_I()
{
  {
    init_simple_test("Uc_BFu0c_I");
    static Uc_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_I(Test_Uc_BFu0c_I, "Uc_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_Ip  {
  unsigned char v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Uc_BFu0c_Ip) C1{ Fc Fc:0 Fp}



static void Test_Uc_BFu0c_Ip()
{
  {
    init_simple_test("Uc_BFu0c_Ip");
    static Uc_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_Ip(Test_Uc_BFu0c_Ip, "Uc_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_L  {
  unsigned char v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Uc_BFu0c_L) C1{ Fc Fc:0 FL}



static void Test_Uc_BFu0c_L()
{
  {
    init_simple_test("Uc_BFu0c_L");
    static Uc_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_L(Test_Uc_BFu0c_L, "Uc_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_S  {
  unsigned char v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Uc_BFu0c_S) C1{ Fc Fc:0 Fs}



static void Test_Uc_BFu0c_S()
{
  {
    init_simple_test("Uc_BFu0c_S");
    static Uc_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_S.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_S(Test_Uc_BFu0c_S, "Uc_BFu0c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_Uc  {
  unsigned char v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Uc_BFu0c_Uc) C1{ Fc Fc:0 Fc}



static void Test_Uc_BFu0c_Uc()
{
  {
    init_simple_test("Uc_BFu0c_Uc");
    static Uc_BFu0c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 1, "Uc_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_Uc(Test_Uc_BFu0c_Uc, "Uc_BFu0c_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_Ui  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Uc_BFu0c_Ui) C1{ Fc Fc:0 Fi}



static void Test_Uc_BFu0c_Ui()
{
  {
    init_simple_test("Uc_BFu0c_Ui");
    static Uc_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_Ui(Test_Uc_BFu0c_Ui, "Uc_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_Ul  {
  unsigned char v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Uc_BFu0c_Ul) C1{ Fc Fc:0 FL}



static void Test_Uc_BFu0c_Ul()
{
  {
    init_simple_test("Uc_BFu0c_Ul");
    static Uc_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_Ul(Test_Uc_BFu0c_Ul, "Uc_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_Us  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Uc_BFu0c_Us) C1{ Fc Fc:0 Fs}



static void Test_Uc_BFu0c_Us()
{
  {
    init_simple_test("Uc_BFu0c_Us");
    static Uc_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Us.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_Us(Test_Uc_BFu0c_Us, "Uc_BFu0c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0c_Vp  {
  unsigned char v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Uc_BFu0c_Vp) C1{ Fc Fc:0 Fp}



static void Test_Uc_BFu0c_Vp()
{
  {
    init_simple_test("Uc_BFu0c_Vp");
    static Uc_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0c_Vp(Test_Uc_BFu0c_Vp, "Uc_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i  {
  unsigned char v1;
  unsigned int  :0;
};
//SIG(1 Uc_BFu0i) C1{ Fc Fi:0}



static void Test_Uc_BFu0i()
{
  {
    init_simple_test("Uc_BFu0i");
    static Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0i(Test_Uc_BFu0i, "Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu0c  {
  unsigned char v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Uc_BFu0i_BFu0c) C1{ Fc Fi:0 Fc:0}



static void Test_Uc_BFu0i_BFu0c()
{
  {
    init_simple_test("Uc_BFu0i_BFu0c");
    static Uc_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu0c(Test_Uc_BFu0i_BFu0c, "Uc_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu0i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Uc_BFu0i_BFu0i) C1{ Fc Fi:0 Fi:0}



static void Test_Uc_BFu0i_BFu0i()
{
  {
    init_simple_test("Uc_BFu0i_BFu0i");
    static Uc_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu0i(Test_Uc_BFu0i_BFu0i, "Uc_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu0ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Uc_BFu0i_BFu0ll) C1{ Fc Fi:0 FL:0}



static void Test_Uc_BFu0i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu0ll");
    static Uc_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu0ll(Test_Uc_BFu0i_BFu0ll, "Uc_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu0s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Uc_BFu0i_BFu0s) C1{ Fc Fi:0 Fs:0}



static void Test_Uc_BFu0i_BFu0s()
{
  {
    init_simple_test("Uc_BFu0i_BFu0s");
    static Uc_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu0s(Test_Uc_BFu0i_BFu0s, "Uc_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu15i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Uc_BFu0i_BFu15i) C1{ Fc Fi:0 Fi:15}



static void Test_Uc_BFu0i_BFu15i()
{
  {
    init_simple_test("Uc_BFu0i_BFu15i");
    static Uc_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Uc_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Uc_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu15i(Test_Uc_BFu0i_BFu15i, "Uc_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu15ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Uc_BFu0i_BFu15ll) C1{ Fc Fi:0 FL:15}



static void Test_Uc_BFu0i_BFu15ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu15ll");
    static Uc_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Uc_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Uc_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu15ll(Test_Uc_BFu0i_BFu15ll, "Uc_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu15s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Uc_BFu0i_BFu15s) C1{ Fc Fi:0 Fs:15}



static void Test_Uc_BFu0i_BFu15s()
{
  {
    init_simple_test("Uc_BFu0i_BFu15s");
    static Uc_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Uc_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Uc_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu15s(Test_Uc_BFu0i_BFu15s, "Uc_BFu0i_BFu15s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu16i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Uc_BFu0i_BFu16i) C1{ Fc Fi:0 Fi:16}



static void Test_Uc_BFu0i_BFu16i()
{
  {
    init_simple_test("Uc_BFu0i_BFu16i");
    static Uc_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Uc_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Uc_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu16i(Test_Uc_BFu0i_BFu16i, "Uc_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu16ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Uc_BFu0i_BFu16ll) C1{ Fc Fi:0 FL:16}



static void Test_Uc_BFu0i_BFu16ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu16ll");
    static Uc_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Uc_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Uc_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu16ll(Test_Uc_BFu0i_BFu16ll, "Uc_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu16s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Uc_BFu0i_BFu16s) C1{ Fc Fi:0 Fs:16}



static void Test_Uc_BFu0i_BFu16s()
{
  {
    init_simple_test("Uc_BFu0i_BFu16s");
    static Uc_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Uc_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Uc_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu16s(Test_Uc_BFu0i_BFu16s, "Uc_BFu0i_BFu16s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu17i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Uc_BFu0i_BFu17i) C1{ Fc Fi:0 Fi:17}



static void Test_Uc_BFu0i_BFu17i()
{
  {
    init_simple_test("Uc_BFu0i_BFu17i");
    static Uc_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Uc_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Uc_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu17i(Test_Uc_BFu0i_BFu17i, "Uc_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu17ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Uc_BFu0i_BFu17ll) C1{ Fc Fi:0 FL:17}



static void Test_Uc_BFu0i_BFu17ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu17ll");
    static Uc_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Uc_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Uc_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu17ll(Test_Uc_BFu0i_BFu17ll, "Uc_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu1c  {
  unsigned char v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Uc_BFu0i_BFu1c) C1{ Fc Fi:0 Fc:1}



static void Test_Uc_BFu0i_BFu1c()
{
  {
    init_simple_test("Uc_BFu0i_BFu1c");
    static Uc_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(Uc_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Uc_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu1c(Test_Uc_BFu0i_BFu1c, "Uc_BFu0i_BFu1c", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu1i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Uc_BFu0i_BFu1i) C1{ Fc Fi:0 Fi:1}



static void Test_Uc_BFu0i_BFu1i()
{
  {
    init_simple_test("Uc_BFu0i_BFu1i");
    static Uc_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Uc_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu1i(Test_Uc_BFu0i_BFu1i, "Uc_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu1ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Uc_BFu0i_BFu1ll) C1{ Fc Fi:0 FL:1}



static void Test_Uc_BFu0i_BFu1ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu1ll");
    static Uc_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Uc_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu1ll(Test_Uc_BFu0i_BFu1ll, "Uc_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu1s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Uc_BFu0i_BFu1s) C1{ Fc Fi:0 Fs:1}



static void Test_Uc_BFu0i_BFu1s()
{
  {
    init_simple_test("Uc_BFu0i_BFu1s");
    static Uc_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Uc_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu1s(Test_Uc_BFu0i_BFu1s, "Uc_BFu0i_BFu1s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu31i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Uc_BFu0i_BFu31i) C1{ Fc Fi:0 Fi:31}



static void Test_Uc_BFu0i_BFu31i()
{
  {
    init_simple_test("Uc_BFu0i_BFu31i");
    static Uc_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Uc_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Uc_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu31i(Test_Uc_BFu0i_BFu31i, "Uc_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu31ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Uc_BFu0i_BFu31ll) C1{ Fc Fi:0 FL:31}



static void Test_Uc_BFu0i_BFu31ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu31ll");
    static Uc_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Uc_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Uc_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu31ll(Test_Uc_BFu0i_BFu31ll, "Uc_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu32i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Uc_BFu0i_BFu32i) C1{ Fc Fi:0 Fi:32}



static void Test_Uc_BFu0i_BFu32i()
{
  {
    init_simple_test("Uc_BFu0i_BFu32i");
    static Uc_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu32i(Test_Uc_BFu0i_BFu32i, "Uc_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu32ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Uc_BFu0i_BFu32ll) C1{ Fc Fi:0 FL:32}



static void Test_Uc_BFu0i_BFu32ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu32ll");
    static Uc_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu32ll(Test_Uc_BFu0i_BFu32ll, "Uc_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu33  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Uc_BFu0i_BFu33) C1{ Fc Fi:0 FL:33}



static void Test_Uc_BFu0i_BFu33()
{
  {
    init_simple_test("Uc_BFu0i_BFu33");
    static Uc_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Uc_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Uc_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu33(Test_Uc_BFu0i_BFu33, "Uc_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu7c  {
  unsigned char v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Uc_BFu0i_BFu7c) C1{ Fc Fi:0 Fc:7}



static void Test_Uc_BFu0i_BFu7c()
{
  {
    init_simple_test("Uc_BFu0i_BFu7c");
    static Uc_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(Uc_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Uc_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Uc_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu7c(Test_Uc_BFu0i_BFu7c, "Uc_BFu0i_BFu7c", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu7i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Uc_BFu0i_BFu7i) C1{ Fc Fi:0 Fi:7}



static void Test_Uc_BFu0i_BFu7i()
{
  {
    init_simple_test("Uc_BFu0i_BFu7i");
    static Uc_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Uc_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Uc_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu7i(Test_Uc_BFu0i_BFu7i, "Uc_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu7ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Uc_BFu0i_BFu7ll) C1{ Fc Fi:0 FL:7}



static void Test_Uc_BFu0i_BFu7ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu7ll");
    static Uc_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Uc_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Uc_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu7ll(Test_Uc_BFu0i_BFu7ll, "Uc_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu7s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Uc_BFu0i_BFu7s) C1{ Fc Fi:0 Fs:7}



static void Test_Uc_BFu0i_BFu7s()
{
  {
    init_simple_test("Uc_BFu0i_BFu7s");
    static Uc_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Uc_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Uc_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu7s(Test_Uc_BFu0i_BFu7s, "Uc_BFu0i_BFu7s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu8c  {
  unsigned char v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Uc_BFu0i_BFu8c) C1{ Fc Fi:0 Fc:8}



static void Test_Uc_BFu0i_BFu8c()
{
  {
    init_simple_test("Uc_BFu0i_BFu8c");
    static Uc_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(Uc_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Uc_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Uc_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu8c(Test_Uc_BFu0i_BFu8c, "Uc_BFu0i_BFu8c", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu8i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Uc_BFu0i_BFu8i) C1{ Fc Fi:0 Fi:8}



static void Test_Uc_BFu0i_BFu8i()
{
  {
    init_simple_test("Uc_BFu0i_BFu8i");
    static Uc_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Uc_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Uc_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu8i(Test_Uc_BFu0i_BFu8i, "Uc_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu8ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Uc_BFu0i_BFu8ll) C1{ Fc Fi:0 FL:8}



static void Test_Uc_BFu0i_BFu8ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu8ll");
    static Uc_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Uc_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Uc_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu8ll(Test_Uc_BFu0i_BFu8ll, "Uc_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu8s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Uc_BFu0i_BFu8s) C1{ Fc Fi:0 Fs:8}



static void Test_Uc_BFu0i_BFu8s()
{
  {
    init_simple_test("Uc_BFu0i_BFu8s");
    static Uc_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Uc_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Uc_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu8s(Test_Uc_BFu0i_BFu8s, "Uc_BFu0i_BFu8s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu9i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Uc_BFu0i_BFu9i) C1{ Fc Fi:0 Fi:9}



static void Test_Uc_BFu0i_BFu9i()
{
  {
    init_simple_test("Uc_BFu0i_BFu9i");
    static Uc_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Uc_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Uc_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu9i(Test_Uc_BFu0i_BFu9i, "Uc_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu9ll  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Uc_BFu0i_BFu9ll) C1{ Fc Fi:0 FL:9}



static void Test_Uc_BFu0i_BFu9ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu9ll");
    static Uc_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Uc_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Uc_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu9ll(Test_Uc_BFu0i_BFu9ll, "Uc_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_BFu9s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Uc_BFu0i_BFu9s) C1{ Fc Fi:0 Fs:9}



static void Test_Uc_BFu0i_BFu9s()
{
  {
    init_simple_test("Uc_BFu0i_BFu9s");
    static Uc_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Uc_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Uc_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_BFu9s(Test_Uc_BFu0i_BFu9s, "Uc_BFu0i_BFu9s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_C  {
  unsigned char v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Uc_BFu0i_C) C1{ Fc Fi:0 Fc}



static void Test_Uc_BFu0i_C()
{
  {
    init_simple_test("Uc_BFu0i_C");
    static Uc_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(Uc_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_C(Test_Uc_BFu0i_C, "Uc_BFu0i_C", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_D  {
  unsigned char v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Uc_BFu0i_D) C1{ Fc Fi:0 FL}



static void Test_Uc_BFu0i_D()
{
  {
    init_simple_test("Uc_BFu0i_D");
    static Uc_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_D(Test_Uc_BFu0i_D, "Uc_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_F  {
  unsigned char v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Uc_BFu0i_F) C1{ Fc Fi:0 Fi}



static void Test_Uc_BFu0i_F()
{
  {
    init_simple_test("Uc_BFu0i_F");
    static Uc_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_F(Test_Uc_BFu0i_F, "Uc_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_I  {
  unsigned char v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Uc_BFu0i_I) C1{ Fc Fi:0 Fi}



static void Test_Uc_BFu0i_I()
{
  {
    init_simple_test("Uc_BFu0i_I");
    static Uc_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_I(Test_Uc_BFu0i_I, "Uc_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_Ip  {
  unsigned char v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Uc_BFu0i_Ip) C1{ Fc Fi:0 Fp}



static void Test_Uc_BFu0i_Ip()
{
  {
    init_simple_test("Uc_BFu0i_Ip");
    static Uc_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_Ip(Test_Uc_BFu0i_Ip, "Uc_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_L  {
  unsigned char v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Uc_BFu0i_L) C1{ Fc Fi:0 FL}



static void Test_Uc_BFu0i_L()
{
  {
    init_simple_test("Uc_BFu0i_L");
    static Uc_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_L(Test_Uc_BFu0i_L, "Uc_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_S  {
  unsigned char v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Uc_BFu0i_S) C1{ Fc Fi:0 Fs}



static void Test_Uc_BFu0i_S()
{
  {
    init_simple_test("Uc_BFu0i_S");
    static Uc_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_S(Test_Uc_BFu0i_S, "Uc_BFu0i_S", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_Uc  {
  unsigned char v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Uc_BFu0i_Uc) C1{ Fc Fi:0 Fc}



static void Test_Uc_BFu0i_Uc()
{
  {
    init_simple_test("Uc_BFu0i_Uc");
    static Uc_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(Uc_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_Uc(Test_Uc_BFu0i_Uc, "Uc_BFu0i_Uc", ABISELECT(5,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_Ui  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Uc_BFu0i_Ui) C1{ Fc Fi:0 Fi}



static void Test_Uc_BFu0i_Ui()
{
  {
    init_simple_test("Uc_BFu0i_Ui");
    static Uc_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_Ui(Test_Uc_BFu0i_Ui, "Uc_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_Ul  {
  unsigned char v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Uc_BFu0i_Ul) C1{ Fc Fi:0 FL}



static void Test_Uc_BFu0i_Ul()
{
  {
    init_simple_test("Uc_BFu0i_Ul");
    static Uc_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_Ul(Test_Uc_BFu0i_Ul, "Uc_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_Us  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Uc_BFu0i_Us) C1{ Fc Fi:0 Fs}



static void Test_Uc_BFu0i_Us()
{
  {
    init_simple_test("Uc_BFu0i_Us");
    static Uc_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_Us(Test_Uc_BFu0i_Us, "Uc_BFu0i_Us", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0i_Vp  {
  unsigned char v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Uc_BFu0i_Vp) C1{ Fc Fi:0 Fp}



static void Test_Uc_BFu0i_Vp()
{
  {
    init_simple_test("Uc_BFu0i_Vp");
    static Uc_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0i_Vp(Test_Uc_BFu0i_Vp, "Uc_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll  {
  unsigned char v1;
  __tsu64  :0;
};
//SIG(1 Uc_BFu0ll) C1{ Fc FL:0}



static void Test_Uc_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0ll");
    static Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll(Test_Uc_BFu0ll, "Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu0c  {
  unsigned char v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Uc_BFu0ll_BFu0c) C1{ Fc FL:0 Fc:0}



static void Test_Uc_BFu0ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu0ll_BFu0c");
    static Uc_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu0c(Test_Uc_BFu0ll_BFu0c, "Uc_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu0i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Uc_BFu0ll_BFu0i) C1{ Fc FL:0 Fi:0}



static void Test_Uc_BFu0ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu0i");
    static Uc_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu0i(Test_Uc_BFu0ll_BFu0i, "Uc_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu0ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Uc_BFu0ll_BFu0ll) C1{ Fc FL:0 FL:0}



static void Test_Uc_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu0ll");
    static Uc_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu0ll(Test_Uc_BFu0ll_BFu0ll, "Uc_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu0s  {
  unsigned char v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Uc_BFu0ll_BFu0s) C1{ Fc FL:0 Fs:0}



static void Test_Uc_BFu0ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu0ll_BFu0s");
    static Uc_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu0s(Test_Uc_BFu0ll_BFu0s, "Uc_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu15i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Uc_BFu0ll_BFu15i) C1{ Fc FL:0 Fi:15}



static void Test_Uc_BFu0ll_BFu15i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu15i");
    static Uc_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Uc_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Uc_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu15i(Test_Uc_BFu0ll_BFu15i, "Uc_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu15ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Uc_BFu0ll_BFu15ll) C1{ Fc FL:0 FL:15}



static void Test_Uc_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu15ll");
    static Uc_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Uc_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Uc_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu15ll(Test_Uc_BFu0ll_BFu15ll, "Uc_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu15s  {
  unsigned char v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Uc_BFu0ll_BFu15s) C1{ Fc FL:0 Fs:15}



static void Test_Uc_BFu0ll_BFu15s()
{
  {
    init_simple_test("Uc_BFu0ll_BFu15s");
    static Uc_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Uc_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Uc_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu15s(Test_Uc_BFu0ll_BFu15s, "Uc_BFu0ll_BFu15s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu16i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Uc_BFu0ll_BFu16i) C1{ Fc FL:0 Fi:16}



static void Test_Uc_BFu0ll_BFu16i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu16i");
    static Uc_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Uc_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Uc_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu16i(Test_Uc_BFu0ll_BFu16i, "Uc_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu16ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Uc_BFu0ll_BFu16ll) C1{ Fc FL:0 FL:16}



static void Test_Uc_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu16ll");
    static Uc_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Uc_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Uc_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu16ll(Test_Uc_BFu0ll_BFu16ll, "Uc_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu16s  {
  unsigned char v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Uc_BFu0ll_BFu16s) C1{ Fc FL:0 Fs:16}



static void Test_Uc_BFu0ll_BFu16s()
{
  {
    init_simple_test("Uc_BFu0ll_BFu16s");
    static Uc_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Uc_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Uc_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu16s(Test_Uc_BFu0ll_BFu16s, "Uc_BFu0ll_BFu16s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu17i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Uc_BFu0ll_BFu17i) C1{ Fc FL:0 Fi:17}



static void Test_Uc_BFu0ll_BFu17i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu17i");
    static Uc_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Uc_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Uc_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu17i(Test_Uc_BFu0ll_BFu17i, "Uc_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu17ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Uc_BFu0ll_BFu17ll) C1{ Fc FL:0 FL:17}



static void Test_Uc_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu17ll");
    static Uc_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Uc_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Uc_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu17ll(Test_Uc_BFu0ll_BFu17ll, "Uc_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu1c  {
  unsigned char v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Uc_BFu0ll_BFu1c) C1{ Fc FL:0 Fc:1}



static void Test_Uc_BFu0ll_BFu1c()
{
  {
    init_simple_test("Uc_BFu0ll_BFu1c");
    static Uc_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(Uc_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Uc_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu1c(Test_Uc_BFu0ll_BFu1c, "Uc_BFu0ll_BFu1c", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu1i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Uc_BFu0ll_BFu1i) C1{ Fc FL:0 Fi:1}



static void Test_Uc_BFu0ll_BFu1i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu1i");
    static Uc_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Uc_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu1i(Test_Uc_BFu0ll_BFu1i, "Uc_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu1ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Uc_BFu0ll_BFu1ll) C1{ Fc FL:0 FL:1}



static void Test_Uc_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu1ll");
    static Uc_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Uc_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu1ll(Test_Uc_BFu0ll_BFu1ll, "Uc_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu1s  {
  unsigned char v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Uc_BFu0ll_BFu1s) C1{ Fc FL:0 Fs:1}



static void Test_Uc_BFu0ll_BFu1s()
{
  {
    init_simple_test("Uc_BFu0ll_BFu1s");
    static Uc_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Uc_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu1s(Test_Uc_BFu0ll_BFu1s, "Uc_BFu0ll_BFu1s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu31i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Uc_BFu0ll_BFu31i) C1{ Fc FL:0 Fi:31}



static void Test_Uc_BFu0ll_BFu31i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu31i");
    static Uc_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Uc_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Uc_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu31i(Test_Uc_BFu0ll_BFu31i, "Uc_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu31ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Uc_BFu0ll_BFu31ll) C1{ Fc FL:0 FL:31}



static void Test_Uc_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu31ll");
    static Uc_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Uc_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Uc_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu31ll(Test_Uc_BFu0ll_BFu31ll, "Uc_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu32i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Uc_BFu0ll_BFu32i) C1{ Fc FL:0 Fi:32}



static void Test_Uc_BFu0ll_BFu32i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu32i");
    static Uc_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Uc_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Uc_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu32i(Test_Uc_BFu0ll_BFu32i, "Uc_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu32ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Uc_BFu0ll_BFu32ll) C1{ Fc FL:0 FL:32}



static void Test_Uc_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu32ll");
    static Uc_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Uc_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Uc_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu32ll(Test_Uc_BFu0ll_BFu32ll, "Uc_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu33  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Uc_BFu0ll_BFu33) C1{ Fc FL:0 FL:33}



static void Test_Uc_BFu0ll_BFu33()
{
  {
    init_simple_test("Uc_BFu0ll_BFu33");
    static Uc_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Uc_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Uc_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu33(Test_Uc_BFu0ll_BFu33, "Uc_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu7c  {
  unsigned char v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Uc_BFu0ll_BFu7c) C1{ Fc FL:0 Fc:7}



static void Test_Uc_BFu0ll_BFu7c()
{
  {
    init_simple_test("Uc_BFu0ll_BFu7c");
    static Uc_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(Uc_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Uc_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Uc_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu7c(Test_Uc_BFu0ll_BFu7c, "Uc_BFu0ll_BFu7c", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu7i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Uc_BFu0ll_BFu7i) C1{ Fc FL:0 Fi:7}



static void Test_Uc_BFu0ll_BFu7i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu7i");
    static Uc_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Uc_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Uc_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu7i(Test_Uc_BFu0ll_BFu7i, "Uc_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu7ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Uc_BFu0ll_BFu7ll) C1{ Fc FL:0 FL:7}



static void Test_Uc_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu7ll");
    static Uc_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Uc_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Uc_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu7ll(Test_Uc_BFu0ll_BFu7ll, "Uc_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu7s  {
  unsigned char v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Uc_BFu0ll_BFu7s) C1{ Fc FL:0 Fs:7}



static void Test_Uc_BFu0ll_BFu7s()
{
  {
    init_simple_test("Uc_BFu0ll_BFu7s");
    static Uc_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Uc_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Uc_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu7s(Test_Uc_BFu0ll_BFu7s, "Uc_BFu0ll_BFu7s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu8c  {
  unsigned char v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Uc_BFu0ll_BFu8c) C1{ Fc FL:0 Fc:8}



static void Test_Uc_BFu0ll_BFu8c()
{
  {
    init_simple_test("Uc_BFu0ll_BFu8c");
    static Uc_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(Uc_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Uc_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Uc_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu8c(Test_Uc_BFu0ll_BFu8c, "Uc_BFu0ll_BFu8c", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu8i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Uc_BFu0ll_BFu8i) C1{ Fc FL:0 Fi:8}



static void Test_Uc_BFu0ll_BFu8i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu8i");
    static Uc_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Uc_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Uc_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu8i(Test_Uc_BFu0ll_BFu8i, "Uc_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu8ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Uc_BFu0ll_BFu8ll) C1{ Fc FL:0 FL:8}



static void Test_Uc_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu8ll");
    static Uc_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Uc_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Uc_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu8ll(Test_Uc_BFu0ll_BFu8ll, "Uc_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu8s  {
  unsigned char v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Uc_BFu0ll_BFu8s) C1{ Fc FL:0 Fs:8}



static void Test_Uc_BFu0ll_BFu8s()
{
  {
    init_simple_test("Uc_BFu0ll_BFu8s");
    static Uc_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Uc_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Uc_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu8s(Test_Uc_BFu0ll_BFu8s, "Uc_BFu0ll_BFu8s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu9i  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Uc_BFu0ll_BFu9i) C1{ Fc FL:0 Fi:9}



static void Test_Uc_BFu0ll_BFu9i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu9i");
    static Uc_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Uc_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Uc_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu9i(Test_Uc_BFu0ll_BFu9i, "Uc_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu9ll  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Uc_BFu0ll_BFu9ll) C1{ Fc FL:0 FL:9}



static void Test_Uc_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu9ll");
    static Uc_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Uc_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Uc_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu9ll(Test_Uc_BFu0ll_BFu9ll, "Uc_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_BFu9s  {
  unsigned char v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Uc_BFu0ll_BFu9s) C1{ Fc FL:0 Fs:9}



static void Test_Uc_BFu0ll_BFu9s()
{
  {
    init_simple_test("Uc_BFu0ll_BFu9s");
    static Uc_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Uc_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Uc_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_BFu9s(Test_Uc_BFu0ll_BFu9s, "Uc_BFu0ll_BFu9s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_C  {
  unsigned char v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Uc_BFu0ll_C) C1{ Fc FL:0 Fc}



static void Test_Uc_BFu0ll_C()
{
  {
    init_simple_test("Uc_BFu0ll_C");
    static Uc_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(Uc_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_C(Test_Uc_BFu0ll_C, "Uc_BFu0ll_C", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_D  {
  unsigned char v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Uc_BFu0ll_D) C1{ Fc FL:0 FL}



static void Test_Uc_BFu0ll_D()
{
  {
    init_simple_test("Uc_BFu0ll_D");
    static Uc_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_D(Test_Uc_BFu0ll_D, "Uc_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_F  {
  unsigned char v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Uc_BFu0ll_F) C1{ Fc FL:0 Fi}



static void Test_Uc_BFu0ll_F()
{
  {
    init_simple_test("Uc_BFu0ll_F");
    static Uc_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_F(Test_Uc_BFu0ll_F, "Uc_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_I  {
  unsigned char v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Uc_BFu0ll_I) C1{ Fc FL:0 Fi}



static void Test_Uc_BFu0ll_I()
{
  {
    init_simple_test("Uc_BFu0ll_I");
    static Uc_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_I(Test_Uc_BFu0ll_I, "Uc_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_Ip  {
  unsigned char v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Uc_BFu0ll_Ip) C1{ Fc FL:0 Fp}



static void Test_Uc_BFu0ll_Ip()
{
  {
    init_simple_test("Uc_BFu0ll_Ip");
    static Uc_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_Ip(Test_Uc_BFu0ll_Ip, "Uc_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_L  {
  unsigned char v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Uc_BFu0ll_L) C1{ Fc FL:0 FL}



static void Test_Uc_BFu0ll_L()
{
  {
    init_simple_test("Uc_BFu0ll_L");
    static Uc_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_L(Test_Uc_BFu0ll_L, "Uc_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_S  {
  unsigned char v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Uc_BFu0ll_S) C1{ Fc FL:0 Fs}



static void Test_Uc_BFu0ll_S()
{
  {
    init_simple_test("Uc_BFu0ll_S");
    static Uc_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_S(Test_Uc_BFu0ll_S, "Uc_BFu0ll_S", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_Uc  {
  unsigned char v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Uc_BFu0ll_Uc) C1{ Fc FL:0 Fc}



static void Test_Uc_BFu0ll_Uc()
{
  {
    init_simple_test("Uc_BFu0ll_Uc");
    static Uc_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(Uc_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_Uc(Test_Uc_BFu0ll_Uc, "Uc_BFu0ll_Uc", ABISELECT(9,5));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_Ui  {
  unsigned char v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Uc_BFu0ll_Ui) C1{ Fc FL:0 Fi}



static void Test_Uc_BFu0ll_Ui()
{
  {
    init_simple_test("Uc_BFu0ll_Ui");
    static Uc_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_Ui(Test_Uc_BFu0ll_Ui, "Uc_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_Ul  {
  unsigned char v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Uc_BFu0ll_Ul) C1{ Fc FL:0 FL}



static void Test_Uc_BFu0ll_Ul()
{
  {
    init_simple_test("Uc_BFu0ll_Ul");
    static Uc_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_Ul(Test_Uc_BFu0ll_Ul, "Uc_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_Us  {
  unsigned char v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Uc_BFu0ll_Us) C1{ Fc FL:0 Fs}



static void Test_Uc_BFu0ll_Us()
{
  {
    init_simple_test("Uc_BFu0ll_Us");
    static Uc_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_Us(Test_Uc_BFu0ll_Us, "Uc_BFu0ll_Us", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0ll_Vp  {
  unsigned char v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Uc_BFu0ll_Vp) C1{ Fc FL:0 Fp}



static void Test_Uc_BFu0ll_Vp()
{
  {
    init_simple_test("Uc_BFu0ll_Vp");
    static Uc_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0ll_Vp(Test_Uc_BFu0ll_Vp, "Uc_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s  {
  unsigned char v1;
  unsigned short  :0;
};
//SIG(1 Uc_BFu0s) C1{ Fc Fs:0}



static void Test_Uc_BFu0s()
{
  {
    init_simple_test("Uc_BFu0s");
    static Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0s(Test_Uc_BFu0s, "Uc_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu0c  {
  unsigned char v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Uc_BFu0s_BFu0c) C1{ Fc Fs:0 Fc:0}



static void Test_Uc_BFu0s_BFu0c()
{
  {
    init_simple_test("Uc_BFu0s_BFu0c");
    static Uc_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu0c(Test_Uc_BFu0s_BFu0c, "Uc_BFu0s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu0i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Uc_BFu0s_BFu0i) C1{ Fc Fs:0 Fi:0}



static void Test_Uc_BFu0s_BFu0i()
{
  {
    init_simple_test("Uc_BFu0s_BFu0i");
    static Uc_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu0i(Test_Uc_BFu0s_BFu0i, "Uc_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu0ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Uc_BFu0s_BFu0ll) C1{ Fc Fs:0 FL:0}



static void Test_Uc_BFu0s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu0ll");
    static Uc_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu0ll(Test_Uc_BFu0s_BFu0ll, "Uc_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu0s  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Uc_BFu0s_BFu0s) C1{ Fc Fs:0 Fs:0}



static void Test_Uc_BFu0s_BFu0s()
{
  {
    init_simple_test("Uc_BFu0s_BFu0s");
    static Uc_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu0s(Test_Uc_BFu0s_BFu0s, "Uc_BFu0s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu15i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Uc_BFu0s_BFu15i) C1{ Fc Fs:0 Fi:15}



static void Test_Uc_BFu0s_BFu15i()
{
  {
    init_simple_test("Uc_BFu0s_BFu15i");
    static Uc_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu15i(Test_Uc_BFu0s_BFu15i, "Uc_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu15ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Uc_BFu0s_BFu15ll) C1{ Fc Fs:0 FL:15}



static void Test_Uc_BFu0s_BFu15ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu15ll");
    static Uc_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu15ll(Test_Uc_BFu0s_BFu15ll, "Uc_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu15s  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Uc_BFu0s_BFu15s) C1{ Fc Fs:0 Fs:15}



static void Test_Uc_BFu0s_BFu15s()
{
  {
    init_simple_test("Uc_BFu0s_BFu15s");
    static Uc_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu15s(Test_Uc_BFu0s_BFu15s, "Uc_BFu0s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu16i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Uc_BFu0s_BFu16i) C1{ Fc Fs:0 Fi:16}



static void Test_Uc_BFu0s_BFu16i()
{
  {
    init_simple_test("Uc_BFu0s_BFu16i");
    static Uc_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Uc_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Uc_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu16i(Test_Uc_BFu0s_BFu16i, "Uc_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu16ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Uc_BFu0s_BFu16ll) C1{ Fc Fs:0 FL:16}



static void Test_Uc_BFu0s_BFu16ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu16ll");
    static Uc_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Uc_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Uc_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu16ll(Test_Uc_BFu0s_BFu16ll, "Uc_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu16s  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Uc_BFu0s_BFu16s) C1{ Fc Fs:0 Fs:16}



static void Test_Uc_BFu0s_BFu16s()
{
  {
    init_simple_test("Uc_BFu0s_BFu16s");
    static Uc_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Uc_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Uc_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu16s(Test_Uc_BFu0s_BFu16s, "Uc_BFu0s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu17i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Uc_BFu0s_BFu17i) C1{ Fc Fs:0 Fi:17}



static void Test_Uc_BFu0s_BFu17i()
{
  {
    init_simple_test("Uc_BFu0s_BFu17i");
    static Uc_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Uc_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Uc_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu17i(Test_Uc_BFu0s_BFu17i, "Uc_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu17ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Uc_BFu0s_BFu17ll) C1{ Fc Fs:0 FL:17}



static void Test_Uc_BFu0s_BFu17ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu17ll");
    static Uc_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Uc_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Uc_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu17ll(Test_Uc_BFu0s_BFu17ll, "Uc_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu1c  {
  unsigned char v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Uc_BFu0s_BFu1c) C1{ Fc Fs:0 Fc:1}



static void Test_Uc_BFu0s_BFu1c()
{
  {
    init_simple_test("Uc_BFu0s_BFu1c");
    static Uc_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(Uc_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Uc_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu1c(Test_Uc_BFu0s_BFu1c, "Uc_BFu0s_BFu1c", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu1i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Uc_BFu0s_BFu1i) C1{ Fc Fs:0 Fi:1}



static void Test_Uc_BFu0s_BFu1i()
{
  {
    init_simple_test("Uc_BFu0s_BFu1i");
    static Uc_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Uc_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu1i(Test_Uc_BFu0s_BFu1i, "Uc_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu1ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Uc_BFu0s_BFu1ll) C1{ Fc Fs:0 FL:1}



static void Test_Uc_BFu0s_BFu1ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu1ll");
    static Uc_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Uc_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu1ll(Test_Uc_BFu0s_BFu1ll, "Uc_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu1s  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Uc_BFu0s_BFu1s) C1{ Fc Fs:0 Fs:1}



static void Test_Uc_BFu0s_BFu1s()
{
  {
    init_simple_test("Uc_BFu0s_BFu1s");
    static Uc_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Uc_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu1s(Test_Uc_BFu0s_BFu1s, "Uc_BFu0s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu31i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Uc_BFu0s_BFu31i) C1{ Fc Fs:0 Fi:31}



static void Test_Uc_BFu0s_BFu31i()
{
  {
    init_simple_test("Uc_BFu0s_BFu31i");
    static Uc_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Uc_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Uc_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu31i(Test_Uc_BFu0s_BFu31i, "Uc_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu31ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Uc_BFu0s_BFu31ll) C1{ Fc Fs:0 FL:31}



static void Test_Uc_BFu0s_BFu31ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu31ll");
    static Uc_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Uc_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Uc_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu31ll(Test_Uc_BFu0s_BFu31ll, "Uc_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu32i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Uc_BFu0s_BFu32i) C1{ Fc Fs:0 Fi:32}



static void Test_Uc_BFu0s_BFu32i()
{
  {
    init_simple_test("Uc_BFu0s_BFu32i");
    static Uc_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu32i(Test_Uc_BFu0s_BFu32i, "Uc_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu32ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Uc_BFu0s_BFu32ll) C1{ Fc Fs:0 FL:32}



static void Test_Uc_BFu0s_BFu32ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu32ll");
    static Uc_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Uc_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Uc_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu32ll(Test_Uc_BFu0s_BFu32ll, "Uc_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu33  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Uc_BFu0s_BFu33) C1{ Fc Fs:0 FL:33}



static void Test_Uc_BFu0s_BFu33()
{
  {
    init_simple_test("Uc_BFu0s_BFu33");
    static Uc_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Uc_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Uc_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu33(Test_Uc_BFu0s_BFu33, "Uc_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu7c  {
  unsigned char v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Uc_BFu0s_BFu7c) C1{ Fc Fs:0 Fc:7}



static void Test_Uc_BFu0s_BFu7c()
{
  {
    init_simple_test("Uc_BFu0s_BFu7c");
    static Uc_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(Uc_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Uc_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Uc_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu7c(Test_Uc_BFu0s_BFu7c, "Uc_BFu0s_BFu7c", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu7i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Uc_BFu0s_BFu7i) C1{ Fc Fs:0 Fi:7}



static void Test_Uc_BFu0s_BFu7i()
{
  {
    init_simple_test("Uc_BFu0s_BFu7i");
    static Uc_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Uc_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Uc_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu7i(Test_Uc_BFu0s_BFu7i, "Uc_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu7ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Uc_BFu0s_BFu7ll) C1{ Fc Fs:0 FL:7}



static void Test_Uc_BFu0s_BFu7ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu7ll");
    static Uc_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Uc_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Uc_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu7ll(Test_Uc_BFu0s_BFu7ll, "Uc_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu7s  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Uc_BFu0s_BFu7s) C1{ Fc Fs:0 Fs:7}



static void Test_Uc_BFu0s_BFu7s()
{
  {
    init_simple_test("Uc_BFu0s_BFu7s");
    static Uc_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Uc_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Uc_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu7s(Test_Uc_BFu0s_BFu7s, "Uc_BFu0s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu8c  {
  unsigned char v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Uc_BFu0s_BFu8c) C1{ Fc Fs:0 Fc:8}



static void Test_Uc_BFu0s_BFu8c()
{
  {
    init_simple_test("Uc_BFu0s_BFu8c");
    static Uc_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(Uc_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Uc_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Uc_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu8c(Test_Uc_BFu0s_BFu8c, "Uc_BFu0s_BFu8c", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu8i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Uc_BFu0s_BFu8i) C1{ Fc Fs:0 Fi:8}



static void Test_Uc_BFu0s_BFu8i()
{
  {
    init_simple_test("Uc_BFu0s_BFu8i");
    static Uc_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Uc_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Uc_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu8i(Test_Uc_BFu0s_BFu8i, "Uc_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu8ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Uc_BFu0s_BFu8ll) C1{ Fc Fs:0 FL:8}



static void Test_Uc_BFu0s_BFu8ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu8ll");
    static Uc_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Uc_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Uc_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu8ll(Test_Uc_BFu0s_BFu8ll, "Uc_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu8s  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Uc_BFu0s_BFu8s) C1{ Fc Fs:0 Fs:8}



static void Test_Uc_BFu0s_BFu8s()
{
  {
    init_simple_test("Uc_BFu0s_BFu8s");
    static Uc_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Uc_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Uc_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu8s(Test_Uc_BFu0s_BFu8s, "Uc_BFu0s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu9i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Uc_BFu0s_BFu9i) C1{ Fc Fs:0 Fi:9}



static void Test_Uc_BFu0s_BFu9i()
{
  {
    init_simple_test("Uc_BFu0s_BFu9i");
    static Uc_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu9i(Test_Uc_BFu0s_BFu9i, "Uc_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu9ll  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Uc_BFu0s_BFu9ll) C1{ Fc Fs:0 FL:9}



static void Test_Uc_BFu0s_BFu9ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu9ll");
    static Uc_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu9ll(Test_Uc_BFu0s_BFu9ll, "Uc_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_BFu9s  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Uc_BFu0s_BFu9s) C1{ Fc Fs:0 Fs:9}



static void Test_Uc_BFu0s_BFu9s()
{
  {
    init_simple_test("Uc_BFu0s_BFu9s");
    static Uc_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_BFu9s(Test_Uc_BFu0s_BFu9s, "Uc_BFu0s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_C  {
  unsigned char v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Uc_BFu0s_C) C1{ Fc Fs:0 Fc}



static void Test_Uc_BFu0s_C()
{
  {
    init_simple_test("Uc_BFu0s_C");
    static Uc_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(Uc_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_C.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_C(Test_Uc_BFu0s_C, "Uc_BFu0s_C", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_D  {
  unsigned char v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Uc_BFu0s_D) C1{ Fc Fs:0 FL}



static void Test_Uc_BFu0s_D()
{
  {
    init_simple_test("Uc_BFu0s_D");
    static Uc_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_D(Test_Uc_BFu0s_D, "Uc_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_F  {
  unsigned char v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Uc_BFu0s_F) C1{ Fc Fs:0 Fi}



static void Test_Uc_BFu0s_F()
{
  {
    init_simple_test("Uc_BFu0s_F");
    static Uc_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_F(Test_Uc_BFu0s_F, "Uc_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_I  {
  unsigned char v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Uc_BFu0s_I) C1{ Fc Fs:0 Fi}



static void Test_Uc_BFu0s_I()
{
  {
    init_simple_test("Uc_BFu0s_I");
    static Uc_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_I(Test_Uc_BFu0s_I, "Uc_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_Ip  {
  unsigned char v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Uc_BFu0s_Ip) C1{ Fc Fs:0 Fp}



static void Test_Uc_BFu0s_Ip()
{
  {
    init_simple_test("Uc_BFu0s_Ip");
    static Uc_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_Ip(Test_Uc_BFu0s_Ip, "Uc_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_L  {
  unsigned char v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Uc_BFu0s_L) C1{ Fc Fs:0 FL}



static void Test_Uc_BFu0s_L()
{
  {
    init_simple_test("Uc_BFu0s_L");
    static Uc_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_L(Test_Uc_BFu0s_L, "Uc_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_S  {
  unsigned char v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Uc_BFu0s_S) C1{ Fc Fs:0 Fs}



static void Test_Uc_BFu0s_S()
{
  {
    init_simple_test("Uc_BFu0s_S");
    static Uc_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_S.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_S(Test_Uc_BFu0s_S, "Uc_BFu0s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_Uc  {
  unsigned char v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Uc_BFu0s_Uc) C1{ Fc Fs:0 Fc}



static void Test_Uc_BFu0s_Uc()
{
  {
    init_simple_test("Uc_BFu0s_Uc");
    static Uc_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(Uc_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_Uc(Test_Uc_BFu0s_Uc, "Uc_BFu0s_Uc", ABISELECT(3,3));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_Ui  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Uc_BFu0s_Ui) C1{ Fc Fs:0 Fi}



static void Test_Uc_BFu0s_Ui()
{
  {
    init_simple_test("Uc_BFu0s_Ui");
    static Uc_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_Ui(Test_Uc_BFu0s_Ui, "Uc_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_Ul  {
  unsigned char v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Uc_BFu0s_Ul) C1{ Fc Fs:0 FL}



static void Test_Uc_BFu0s_Ul()
{
  {
    init_simple_test("Uc_BFu0s_Ul");
    static Uc_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_Ul(Test_Uc_BFu0s_Ul, "Uc_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_Us  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Uc_BFu0s_Us) C1{ Fc Fs:0 Fs}



static void Test_Uc_BFu0s_Us()
{
  {
    init_simple_test("Uc_BFu0s_Us");
    static Uc_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Us.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_Us(Test_Uc_BFu0s_Us, "Uc_BFu0s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu0s_Vp  {
  unsigned char v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Uc_BFu0s_Vp) C1{ Fc Fs:0 Fp}



static void Test_Uc_BFu0s_Vp()
{
  {
    init_simple_test("Uc_BFu0s_Vp");
    static Uc_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vUc_BFu0s_Vp(Test_Uc_BFu0s_Vp, "Uc_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15i_BFu0c  {
  unsigned char v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Uc_BFu15i_BFu0c) C1{ Fc Fi:15 Fc:0}



static void Test_Uc_BFu15i_BFu0c()
{
  {
    init_simple_test("Uc_BFu15i_BFu0c");
    static Uc_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu15i_BFu0c(Test_Uc_BFu15i_BFu0c, "Uc_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15i_BFu0i  {
  unsigned char v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Uc_BFu15i_BFu0i) C1{ Fc Fi:15 Fi:0}



static void Test_Uc_BFu15i_BFu0i()
{
  {
    init_simple_test("Uc_BFu15i_BFu0i");
    static Uc_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu15i_BFu0i(Test_Uc_BFu15i_BFu0i, "Uc_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Uc_BFu15i_BFu0ll) C1{ Fc Fi:15 FL:0}



static void Test_Uc_BFu15i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu15i_BFu0ll");
    static Uc_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu15i_BFu0ll(Test_Uc_BFu15i_BFu0ll, "Uc_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15i_BFu0s  {
  unsigned char v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Uc_BFu15i_BFu0s) C1{ Fc Fi:15 Fs:0}



static void Test_Uc_BFu15i_BFu0s()
{
  {
    init_simple_test("Uc_BFu15i_BFu0s");
    static Uc_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu15i_BFu0s(Test_Uc_BFu15i_BFu0s, "Uc_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Uc_BFu15ll_BFu0c) C1{ Fc FL:15 Fc:0}



static void Test_Uc_BFu15ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu15ll_BFu0c");
    static Uc_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu15ll_BFu0c(Test_Uc_BFu15ll_BFu0c, "Uc_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Uc_BFu15ll_BFu0i) C1{ Fc FL:15 Fi:0}



static void Test_Uc_BFu15ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu15ll_BFu0i");
    static Uc_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu15ll_BFu0i(Test_Uc_BFu15ll_BFu0i, "Uc_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Uc_BFu15ll_BFu0ll) C1{ Fc FL:15 FL:0}



static void Test_Uc_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu15ll_BFu0ll");
    static Uc_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu15ll_BFu0ll(Test_Uc_BFu15ll_BFu0ll, "Uc_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Uc_BFu15ll_BFu0s) C1{ Fc FL:15 Fs:0}



static void Test_Uc_BFu15ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu15ll_BFu0s");
    static Uc_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu15ll_BFu0s(Test_Uc_BFu15ll_BFu0s, "Uc_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15s_BFu0c  {
  unsigned char v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Uc_BFu15s_BFu0c) C1{ Fc Fs:15 Fc:0}



static void Test_Uc_BFu15s_BFu0c()
{
  {
    init_simple_test("Uc_BFu15s_BFu0c");
    static Uc_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu15s_BFu0c(Test_Uc_BFu15s_BFu0c, "Uc_BFu15s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15s_BFu0i  {
  unsigned char v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Uc_BFu15s_BFu0i) C1{ Fc Fs:15 Fi:0}



static void Test_Uc_BFu15s_BFu0i()
{
  {
    init_simple_test("Uc_BFu15s_BFu0i");
    static Uc_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu15s_BFu0i(Test_Uc_BFu15s_BFu0i, "Uc_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15s_BFu0ll  {
  unsigned char v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Uc_BFu15s_BFu0ll) C1{ Fc Fs:15 FL:0}



static void Test_Uc_BFu15s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu15s_BFu0ll");
    static Uc_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu15s_BFu0ll(Test_Uc_BFu15s_BFu0ll, "Uc_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu15s_BFu0s  {
  unsigned char v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Uc_BFu15s_BFu0s) C1{ Fc Fs:15 Fs:0}



static void Test_Uc_BFu15s_BFu0s()
{
  {
    init_simple_test("Uc_BFu15s_BFu0s");
    static Uc_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu15s_BFu0s(Test_Uc_BFu15s_BFu0s, "Uc_BFu15s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16i_BFu0c  {
  unsigned char v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Uc_BFu16i_BFu0c) C1{ Fc Fi:16 Fc:0}



static void Test_Uc_BFu16i_BFu0c()
{
  {
    init_simple_test("Uc_BFu16i_BFu0c");
    static Uc_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu16i_BFu0c(Test_Uc_BFu16i_BFu0c, "Uc_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16i_BFu0i  {
  unsigned char v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Uc_BFu16i_BFu0i) C1{ Fc Fi:16 Fi:0}



static void Test_Uc_BFu16i_BFu0i()
{
  {
    init_simple_test("Uc_BFu16i_BFu0i");
    static Uc_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu16i_BFu0i(Test_Uc_BFu16i_BFu0i, "Uc_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Uc_BFu16i_BFu0ll) C1{ Fc Fi:16 FL:0}



static void Test_Uc_BFu16i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu16i_BFu0ll");
    static Uc_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu16i_BFu0ll(Test_Uc_BFu16i_BFu0ll, "Uc_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16i_BFu0s  {
  unsigned char v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Uc_BFu16i_BFu0s) C1{ Fc Fi:16 Fs:0}



static void Test_Uc_BFu16i_BFu0s()
{
  {
    init_simple_test("Uc_BFu16i_BFu0s");
    static Uc_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu16i_BFu0s(Test_Uc_BFu16i_BFu0s, "Uc_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Uc_BFu16ll_BFu0c) C1{ Fc FL:16 Fc:0}



static void Test_Uc_BFu16ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu16ll_BFu0c");
    static Uc_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu16ll_BFu0c(Test_Uc_BFu16ll_BFu0c, "Uc_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Uc_BFu16ll_BFu0i) C1{ Fc FL:16 Fi:0}



static void Test_Uc_BFu16ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu16ll_BFu0i");
    static Uc_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu16ll_BFu0i(Test_Uc_BFu16ll_BFu0i, "Uc_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Uc_BFu16ll_BFu0ll) C1{ Fc FL:16 FL:0}



static void Test_Uc_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu16ll_BFu0ll");
    static Uc_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu16ll_BFu0ll(Test_Uc_BFu16ll_BFu0ll, "Uc_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Uc_BFu16ll_BFu0s) C1{ Fc FL:16 Fs:0}



static void Test_Uc_BFu16ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu16ll_BFu0s");
    static Uc_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu16ll_BFu0s(Test_Uc_BFu16ll_BFu0s, "Uc_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16s_BFu0c  {
  unsigned char v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Uc_BFu16s_BFu0c) C1{ Fc Fs:16 Fc:0}



static void Test_Uc_BFu16s_BFu0c()
{
  {
    init_simple_test("Uc_BFu16s_BFu0c");
    static Uc_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Uc_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Uc_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu16s_BFu0c(Test_Uc_BFu16s_BFu0c, "Uc_BFu16s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16s_BFu0i  {
  unsigned char v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Uc_BFu16s_BFu0i) C1{ Fc Fs:16 Fi:0}



static void Test_Uc_BFu16s_BFu0i()
{
  {
    init_simple_test("Uc_BFu16s_BFu0i");
    static Uc_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Uc_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Uc_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu16s_BFu0i(Test_Uc_BFu16s_BFu0i, "Uc_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16s_BFu0ll  {
  unsigned char v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Uc_BFu16s_BFu0ll) C1{ Fc Fs:16 FL:0}



static void Test_Uc_BFu16s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu16s_BFu0ll");
    static Uc_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Uc_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Uc_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu16s_BFu0ll(Test_Uc_BFu16s_BFu0ll, "Uc_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu16s_BFu0s  {
  unsigned char v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Uc_BFu16s_BFu0s) C1{ Fc Fs:16 Fs:0}



static void Test_Uc_BFu16s_BFu0s()
{
  {
    init_simple_test("Uc_BFu16s_BFu0s");
    static Uc_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Uc_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Uc_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu16s_BFu0s(Test_Uc_BFu16s_BFu0s, "Uc_BFu16s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17i_BFu0c  {
  unsigned char v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Uc_BFu17i_BFu0c) C1{ Fc Fi:17 Fc:0}



static void Test_Uc_BFu17i_BFu0c()
{
  {
    init_simple_test("Uc_BFu17i_BFu0c");
    static Uc_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu17i_BFu0c(Test_Uc_BFu17i_BFu0c, "Uc_BFu17i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17i_BFu0i  {
  unsigned char v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Uc_BFu17i_BFu0i) C1{ Fc Fi:17 Fi:0}



static void Test_Uc_BFu17i_BFu0i()
{
  {
    init_simple_test("Uc_BFu17i_BFu0i");
    static Uc_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu17i_BFu0i(Test_Uc_BFu17i_BFu0i, "Uc_BFu17i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Uc_BFu17i_BFu0ll) C1{ Fc Fi:17 FL:0}



static void Test_Uc_BFu17i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu17i_BFu0ll");
    static Uc_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu17i_BFu0ll(Test_Uc_BFu17i_BFu0ll, "Uc_BFu17i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17i_BFu0s  {
  unsigned char v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Uc_BFu17i_BFu0s) C1{ Fc Fi:17 Fs:0}



static void Test_Uc_BFu17i_BFu0s()
{
  {
    init_simple_test("Uc_BFu17i_BFu0s");
    static Uc_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu17i_BFu0s(Test_Uc_BFu17i_BFu0s, "Uc_BFu17i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Uc_BFu17ll_BFu0c) C1{ Fc FL:17 Fc:0}



static void Test_Uc_BFu17ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu17ll_BFu0c");
    static Uc_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu17ll_BFu0c(Test_Uc_BFu17ll_BFu0c, "Uc_BFu17ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Uc_BFu17ll_BFu0i) C1{ Fc FL:17 Fi:0}



static void Test_Uc_BFu17ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu17ll_BFu0i");
    static Uc_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu17ll_BFu0i(Test_Uc_BFu17ll_BFu0i, "Uc_BFu17ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Uc_BFu17ll_BFu0ll) C1{ Fc FL:17 FL:0}



static void Test_Uc_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu17ll_BFu0ll");
    static Uc_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu17ll_BFu0ll(Test_Uc_BFu17ll_BFu0ll, "Uc_BFu17ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu17ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Uc_BFu17ll_BFu0s) C1{ Fc FL:17 Fs:0}



static void Test_Uc_BFu17ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu17ll_BFu0s");
    static Uc_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu17ll_BFu0s(Test_Uc_BFu17ll_BFu0s, "Uc_BFu17ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1c_BFu0c  {
  unsigned char v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Uc_BFu1c_BFu0c) C1{ Fc Fc:1 Fc:0}



static void Test_Uc_BFu1c_BFu0c()
{
  {
    init_simple_test("Uc_BFu1c_BFu0c");
    static Uc_BFu1c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu1c_BFu0c(Test_Uc_BFu1c_BFu0c, "Uc_BFu1c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1c_BFu0i  {
  unsigned char v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Uc_BFu1c_BFu0i) C1{ Fc Fc:1 Fi:0}



static void Test_Uc_BFu1c_BFu0i()
{
  {
    init_simple_test("Uc_BFu1c_BFu0i");
    static Uc_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu1c_BFu0i(Test_Uc_BFu1c_BFu0i, "Uc_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1c_BFu0ll  {
  unsigned char v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Uc_BFu1c_BFu0ll) C1{ Fc Fc:1 FL:0}



static void Test_Uc_BFu1c_BFu0ll()
{
  {
    init_simple_test("Uc_BFu1c_BFu0ll");
    static Uc_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu1c_BFu0ll(Test_Uc_BFu1c_BFu0ll, "Uc_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1c_BFu0s  {
  unsigned char v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Uc_BFu1c_BFu0s) C1{ Fc Fc:1 Fs:0}



static void Test_Uc_BFu1c_BFu0s()
{
  {
    init_simple_test("Uc_BFu1c_BFu0s");
    static Uc_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu1c_BFu0s(Test_Uc_BFu1c_BFu0s, "Uc_BFu1c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1i_BFu0c  {
  unsigned char v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Uc_BFu1i_BFu0c) C1{ Fc Fi:1 Fc:0}



static void Test_Uc_BFu1i_BFu0c()
{
  {
    init_simple_test("Uc_BFu1i_BFu0c");
    static Uc_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu1i_BFu0c(Test_Uc_BFu1i_BFu0c, "Uc_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1i_BFu0i  {
  unsigned char v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Uc_BFu1i_BFu0i) C1{ Fc Fi:1 Fi:0}



static void Test_Uc_BFu1i_BFu0i()
{
  {
    init_simple_test("Uc_BFu1i_BFu0i");
    static Uc_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu1i_BFu0i(Test_Uc_BFu1i_BFu0i, "Uc_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Uc_BFu1i_BFu0ll) C1{ Fc Fi:1 FL:0}



static void Test_Uc_BFu1i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu1i_BFu0ll");
    static Uc_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu1i_BFu0ll(Test_Uc_BFu1i_BFu0ll, "Uc_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1i_BFu0s  {
  unsigned char v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Uc_BFu1i_BFu0s) C1{ Fc Fi:1 Fs:0}



static void Test_Uc_BFu1i_BFu0s()
{
  {
    init_simple_test("Uc_BFu1i_BFu0s");
    static Uc_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu1i_BFu0s(Test_Uc_BFu1i_BFu0s, "Uc_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Uc_BFu1ll_BFu0c) C1{ Fc FL:1 Fc:0}



static void Test_Uc_BFu1ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu1ll_BFu0c");
    static Uc_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu1ll_BFu0c(Test_Uc_BFu1ll_BFu0c, "Uc_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Uc_BFu1ll_BFu0i) C1{ Fc FL:1 Fi:0}



static void Test_Uc_BFu1ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu1ll_BFu0i");
    static Uc_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu1ll_BFu0i(Test_Uc_BFu1ll_BFu0i, "Uc_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Uc_BFu1ll_BFu0ll) C1{ Fc FL:1 FL:0}



static void Test_Uc_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu1ll_BFu0ll");
    static Uc_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu1ll_BFu0ll(Test_Uc_BFu1ll_BFu0ll, "Uc_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Uc_BFu1ll_BFu0s) C1{ Fc FL:1 Fs:0}



static void Test_Uc_BFu1ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu1ll_BFu0s");
    static Uc_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu1ll_BFu0s(Test_Uc_BFu1ll_BFu0s, "Uc_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1s_BFu0c  {
  unsigned char v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Uc_BFu1s_BFu0c) C1{ Fc Fs:1 Fc:0}



static void Test_Uc_BFu1s_BFu0c()
{
  {
    init_simple_test("Uc_BFu1s_BFu0c");
    static Uc_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu1s_BFu0c(Test_Uc_BFu1s_BFu0c, "Uc_BFu1s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1s_BFu0i  {
  unsigned char v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Uc_BFu1s_BFu0i) C1{ Fc Fs:1 Fi:0}



static void Test_Uc_BFu1s_BFu0i()
{
  {
    init_simple_test("Uc_BFu1s_BFu0i");
    static Uc_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu1s_BFu0i(Test_Uc_BFu1s_BFu0i, "Uc_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1s_BFu0ll  {
  unsigned char v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Uc_BFu1s_BFu0ll) C1{ Fc Fs:1 FL:0}



static void Test_Uc_BFu1s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu1s_BFu0ll");
    static Uc_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu1s_BFu0ll(Test_Uc_BFu1s_BFu0ll, "Uc_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu1s_BFu0s  {
  unsigned char v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Uc_BFu1s_BFu0s) C1{ Fc Fs:1 Fs:0}



static void Test_Uc_BFu1s_BFu0s()
{
  {
    init_simple_test("Uc_BFu1s_BFu0s");
    static Uc_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu1s_BFu0s(Test_Uc_BFu1s_BFu0s, "Uc_BFu1s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31i_BFu0c  {
  unsigned char v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Uc_BFu31i_BFu0c) C1{ Fc Fi:31 Fc:0}



static void Test_Uc_BFu31i_BFu0c()
{
  {
    init_simple_test("Uc_BFu31i_BFu0c");
    static Uc_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Uc_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Uc_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu31i_BFu0c(Test_Uc_BFu31i_BFu0c, "Uc_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31i_BFu0i  {
  unsigned char v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Uc_BFu31i_BFu0i) C1{ Fc Fi:31 Fi:0}



static void Test_Uc_BFu31i_BFu0i()
{
  {
    init_simple_test("Uc_BFu31i_BFu0i");
    static Uc_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Uc_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Uc_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu31i_BFu0i(Test_Uc_BFu31i_BFu0i, "Uc_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Uc_BFu31i_BFu0ll) C1{ Fc Fi:31 FL:0}



static void Test_Uc_BFu31i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu31i_BFu0ll");
    static Uc_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Uc_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Uc_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu31i_BFu0ll(Test_Uc_BFu31i_BFu0ll, "Uc_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31i_BFu0s  {
  unsigned char v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Uc_BFu31i_BFu0s) C1{ Fc Fi:31 Fs:0}



static void Test_Uc_BFu31i_BFu0s()
{
  {
    init_simple_test("Uc_BFu31i_BFu0s");
    static Uc_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Uc_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Uc_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu31i_BFu0s(Test_Uc_BFu31i_BFu0s, "Uc_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Uc_BFu31ll_BFu0c) C1{ Fc FL:31 Fc:0}



static void Test_Uc_BFu31ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu31ll_BFu0c");
    static Uc_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "Uc_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Uc_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu31ll_BFu0c(Test_Uc_BFu31ll_BFu0c, "Uc_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Uc_BFu31ll_BFu0i) C1{ Fc FL:31 Fi:0}



static void Test_Uc_BFu31ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu31ll_BFu0i");
    static Uc_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "Uc_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Uc_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu31ll_BFu0i(Test_Uc_BFu31ll_BFu0i, "Uc_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Uc_BFu31ll_BFu0ll) C1{ Fc FL:31 FL:0}



static void Test_Uc_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu31ll_BFu0ll");
    static Uc_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "Uc_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Uc_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu31ll_BFu0ll(Test_Uc_BFu31ll_BFu0ll, "Uc_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu31ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Uc_BFu31ll_BFu0s) C1{ Fc FL:31 Fs:0}



static void Test_Uc_BFu31ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu31ll_BFu0s");
    static Uc_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "Uc_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "Uc_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu31ll_BFu0s(Test_Uc_BFu31ll_BFu0s, "Uc_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32i_BFu0c  {
  unsigned char v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Uc_BFu32i_BFu0c) C1{ Fc Fi:32 Fc:0}



static void Test_Uc_BFu32i_BFu0c()
{
  {
    init_simple_test("Uc_BFu32i_BFu0c");
    static Uc_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu32i_BFu0c(Test_Uc_BFu32i_BFu0c, "Uc_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32i_BFu0i  {
  unsigned char v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Uc_BFu32i_BFu0i) C1{ Fc Fi:32 Fi:0}



static void Test_Uc_BFu32i_BFu0i()
{
  {
    init_simple_test("Uc_BFu32i_BFu0i");
    static Uc_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu32i_BFu0i(Test_Uc_BFu32i_BFu0i, "Uc_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Uc_BFu32i_BFu0ll) C1{ Fc Fi:32 FL:0}



static void Test_Uc_BFu32i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu32i_BFu0ll");
    static Uc_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu32i_BFu0ll(Test_Uc_BFu32i_BFu0ll, "Uc_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32i_BFu0s  {
  unsigned char v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Uc_BFu32i_BFu0s) C1{ Fc Fi:32 Fs:0}



static void Test_Uc_BFu32i_BFu0s()
{
  {
    init_simple_test("Uc_BFu32i_BFu0s");
    static Uc_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu32i_BFu0s(Test_Uc_BFu32i_BFu0s, "Uc_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Uc_BFu32ll_BFu0c) C1{ Fc FL:32 Fc:0}



static void Test_Uc_BFu32ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu32ll_BFu0c");
    static Uc_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu32ll_BFu0c(Test_Uc_BFu32ll_BFu0c, "Uc_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Uc_BFu32ll_BFu0i) C1{ Fc FL:32 Fi:0}



static void Test_Uc_BFu32ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu32ll_BFu0i");
    static Uc_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu32ll_BFu0i(Test_Uc_BFu32ll_BFu0i, "Uc_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Uc_BFu32ll_BFu0ll) C1{ Fc FL:32 FL:0}



static void Test_Uc_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu32ll_BFu0ll");
    static Uc_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu32ll_BFu0ll(Test_Uc_BFu32ll_BFu0ll, "Uc_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu32ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Uc_BFu32ll_BFu0s) C1{ Fc FL:32 Fs:0}



static void Test_Uc_BFu32ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu32ll_BFu0s");
    static Uc_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu32ll_BFu0s(Test_Uc_BFu32ll_BFu0s, "Uc_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu33_BFu0c  {
  unsigned char v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Uc_BFu33_BFu0c) C1{ Fc FL:33 Fc:0}



static void Test_Uc_BFu33_BFu0c()
{
  {
    init_simple_test("Uc_BFu33_BFu0c");
    static Uc_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu33_BFu0c(Test_Uc_BFu33_BFu0c, "Uc_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu33_BFu0i  {
  unsigned char v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Uc_BFu33_BFu0i) C1{ Fc FL:33 Fi:0}



static void Test_Uc_BFu33_BFu0i()
{
  {
    init_simple_test("Uc_BFu33_BFu0i");
    static Uc_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu33_BFu0i(Test_Uc_BFu33_BFu0i, "Uc_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu33_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Uc_BFu33_BFu0ll) C1{ Fc FL:33 FL:0}



static void Test_Uc_BFu33_BFu0ll()
{
  {
    init_simple_test("Uc_BFu33_BFu0ll");
    static Uc_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu33_BFu0ll(Test_Uc_BFu33_BFu0ll, "Uc_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu33_BFu0s  {
  unsigned char v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Uc_BFu33_BFu0s) C1{ Fc FL:33 Fs:0}



static void Test_Uc_BFu33_BFu0s()
{
  {
    init_simple_test("Uc_BFu33_BFu0s");
    static Uc_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu33_BFu0s(Test_Uc_BFu33_BFu0s, "Uc_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7c_BFu0c  {
  unsigned char v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Uc_BFu7c_BFu0c) C1{ Fc Fc:7 Fc:0}



static void Test_Uc_BFu7c_BFu0c()
{
  {
    init_simple_test("Uc_BFu7c_BFu0c");
    static Uc_BFu7c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu7c_BFu0c(Test_Uc_BFu7c_BFu0c, "Uc_BFu7c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7c_BFu0i  {
  unsigned char v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Uc_BFu7c_BFu0i) C1{ Fc Fc:7 Fi:0}



static void Test_Uc_BFu7c_BFu0i()
{
  {
    init_simple_test("Uc_BFu7c_BFu0i");
    static Uc_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu7c_BFu0i(Test_Uc_BFu7c_BFu0i, "Uc_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7c_BFu0ll  {
  unsigned char v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Uc_BFu7c_BFu0ll) C1{ Fc Fc:7 FL:0}



static void Test_Uc_BFu7c_BFu0ll()
{
  {
    init_simple_test("Uc_BFu7c_BFu0ll");
    static Uc_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu7c_BFu0ll(Test_Uc_BFu7c_BFu0ll, "Uc_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7c_BFu0s  {
  unsigned char v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Uc_BFu7c_BFu0s) C1{ Fc Fc:7 Fs:0}



static void Test_Uc_BFu7c_BFu0s()
{
  {
    init_simple_test("Uc_BFu7c_BFu0s");
    static Uc_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu7c_BFu0s(Test_Uc_BFu7c_BFu0s, "Uc_BFu7c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7i_BFu0c  {
  unsigned char v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Uc_BFu7i_BFu0c) C1{ Fc Fi:7 Fc:0}



static void Test_Uc_BFu7i_BFu0c()
{
  {
    init_simple_test("Uc_BFu7i_BFu0c");
    static Uc_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu7i_BFu0c(Test_Uc_BFu7i_BFu0c, "Uc_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7i_BFu0i  {
  unsigned char v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Uc_BFu7i_BFu0i) C1{ Fc Fi:7 Fi:0}



static void Test_Uc_BFu7i_BFu0i()
{
  {
    init_simple_test("Uc_BFu7i_BFu0i");
    static Uc_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu7i_BFu0i(Test_Uc_BFu7i_BFu0i, "Uc_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Uc_BFu7i_BFu0ll) C1{ Fc Fi:7 FL:0}



static void Test_Uc_BFu7i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu7i_BFu0ll");
    static Uc_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu7i_BFu0ll(Test_Uc_BFu7i_BFu0ll, "Uc_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7i_BFu0s  {
  unsigned char v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Uc_BFu7i_BFu0s) C1{ Fc Fi:7 Fs:0}



static void Test_Uc_BFu7i_BFu0s()
{
  {
    init_simple_test("Uc_BFu7i_BFu0s");
    static Uc_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu7i_BFu0s(Test_Uc_BFu7i_BFu0s, "Uc_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Uc_BFu7ll_BFu0c) C1{ Fc FL:7 Fc:0}



static void Test_Uc_BFu7ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu7ll_BFu0c");
    static Uc_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu7ll_BFu0c(Test_Uc_BFu7ll_BFu0c, "Uc_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Uc_BFu7ll_BFu0i) C1{ Fc FL:7 Fi:0}



static void Test_Uc_BFu7ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu7ll_BFu0i");
    static Uc_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu7ll_BFu0i(Test_Uc_BFu7ll_BFu0i, "Uc_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Uc_BFu7ll_BFu0ll) C1{ Fc FL:7 FL:0}



static void Test_Uc_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu7ll_BFu0ll");
    static Uc_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu7ll_BFu0ll(Test_Uc_BFu7ll_BFu0ll, "Uc_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Uc_BFu7ll_BFu0s) C1{ Fc FL:7 Fs:0}



static void Test_Uc_BFu7ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu7ll_BFu0s");
    static Uc_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu7ll_BFu0s(Test_Uc_BFu7ll_BFu0s, "Uc_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7s_BFu0c  {
  unsigned char v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Uc_BFu7s_BFu0c) C1{ Fc Fs:7 Fc:0}



static void Test_Uc_BFu7s_BFu0c()
{
  {
    init_simple_test("Uc_BFu7s_BFu0c");
    static Uc_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu7s_BFu0c(Test_Uc_BFu7s_BFu0c, "Uc_BFu7s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7s_BFu0i  {
  unsigned char v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Uc_BFu7s_BFu0i) C1{ Fc Fs:7 Fi:0}



static void Test_Uc_BFu7s_BFu0i()
{
  {
    init_simple_test("Uc_BFu7s_BFu0i");
    static Uc_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu7s_BFu0i(Test_Uc_BFu7s_BFu0i, "Uc_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7s_BFu0ll  {
  unsigned char v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Uc_BFu7s_BFu0ll) C1{ Fc Fs:7 FL:0}



static void Test_Uc_BFu7s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu7s_BFu0ll");
    static Uc_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu7s_BFu0ll(Test_Uc_BFu7s_BFu0ll, "Uc_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu7s_BFu0s  {
  unsigned char v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Uc_BFu7s_BFu0s) C1{ Fc Fs:7 Fs:0}



static void Test_Uc_BFu7s_BFu0s()
{
  {
    init_simple_test("Uc_BFu7s_BFu0s");
    static Uc_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu7s_BFu0s(Test_Uc_BFu7s_BFu0s, "Uc_BFu7s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8c_BFu0c  {
  unsigned char v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Uc_BFu8c_BFu0c) C1{ Fc Fc:8 Fc:0}



static void Test_Uc_BFu8c_BFu0c()
{
  {
    init_simple_test("Uc_BFu8c_BFu0c");
    static Uc_BFu8c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu8c_BFu0c(Test_Uc_BFu8c_BFu0c, "Uc_BFu8c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8c_BFu0i  {
  unsigned char v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Uc_BFu8c_BFu0i) C1{ Fc Fc:8 Fi:0}



static void Test_Uc_BFu8c_BFu0i()
{
  {
    init_simple_test("Uc_BFu8c_BFu0i");
    static Uc_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu8c_BFu0i(Test_Uc_BFu8c_BFu0i, "Uc_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8c_BFu0ll  {
  unsigned char v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Uc_BFu8c_BFu0ll) C1{ Fc Fc:8 FL:0}



static void Test_Uc_BFu8c_BFu0ll()
{
  {
    init_simple_test("Uc_BFu8c_BFu0ll");
    static Uc_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu8c_BFu0ll(Test_Uc_BFu8c_BFu0ll, "Uc_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8c_BFu0s  {
  unsigned char v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Uc_BFu8c_BFu0s) C1{ Fc Fc:8 Fs:0}



static void Test_Uc_BFu8c_BFu0s()
{
  {
    init_simple_test("Uc_BFu8c_BFu0s");
    static Uc_BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu8c_BFu0s(Test_Uc_BFu8c_BFu0s, "Uc_BFu8c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8i_BFu0c  {
  unsigned char v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Uc_BFu8i_BFu0c) C1{ Fc Fi:8 Fc:0}



static void Test_Uc_BFu8i_BFu0c()
{
  {
    init_simple_test("Uc_BFu8i_BFu0c");
    static Uc_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu8i_BFu0c(Test_Uc_BFu8i_BFu0c, "Uc_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8i_BFu0i  {
  unsigned char v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Uc_BFu8i_BFu0i) C1{ Fc Fi:8 Fi:0}



static void Test_Uc_BFu8i_BFu0i()
{
  {
    init_simple_test("Uc_BFu8i_BFu0i");
    static Uc_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu8i_BFu0i(Test_Uc_BFu8i_BFu0i, "Uc_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Uc_BFu8i_BFu0ll) C1{ Fc Fi:8 FL:0}



static void Test_Uc_BFu8i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu8i_BFu0ll");
    static Uc_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu8i_BFu0ll(Test_Uc_BFu8i_BFu0ll, "Uc_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8i_BFu0s  {
  unsigned char v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Uc_BFu8i_BFu0s) C1{ Fc Fi:8 Fs:0}



static void Test_Uc_BFu8i_BFu0s()
{
  {
    init_simple_test("Uc_BFu8i_BFu0s");
    static Uc_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu8i_BFu0s(Test_Uc_BFu8i_BFu0s, "Uc_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Uc_BFu8ll_BFu0c) C1{ Fc FL:8 Fc:0}



static void Test_Uc_BFu8ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu8ll_BFu0c");
    static Uc_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu8ll_BFu0c(Test_Uc_BFu8ll_BFu0c, "Uc_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Uc_BFu8ll_BFu0i) C1{ Fc FL:8 Fi:0}



static void Test_Uc_BFu8ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu8ll_BFu0i");
    static Uc_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu8ll_BFu0i(Test_Uc_BFu8ll_BFu0i, "Uc_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Uc_BFu8ll_BFu0ll) C1{ Fc FL:8 FL:0}



static void Test_Uc_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu8ll_BFu0ll");
    static Uc_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu8ll_BFu0ll(Test_Uc_BFu8ll_BFu0ll, "Uc_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Uc_BFu8ll_BFu0s) C1{ Fc FL:8 Fs:0}



static void Test_Uc_BFu8ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu8ll_BFu0s");
    static Uc_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu8ll_BFu0s(Test_Uc_BFu8ll_BFu0s, "Uc_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8s_BFu0c  {
  unsigned char v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Uc_BFu8s_BFu0c) C1{ Fc Fs:8 Fc:0}



static void Test_Uc_BFu8s_BFu0c()
{
  {
    init_simple_test("Uc_BFu8s_BFu0c");
    static Uc_BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu8s_BFu0c(Test_Uc_BFu8s_BFu0c, "Uc_BFu8s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8s_BFu0i  {
  unsigned char v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Uc_BFu8s_BFu0i) C1{ Fc Fs:8 Fi:0}



static void Test_Uc_BFu8s_BFu0i()
{
  {
    init_simple_test("Uc_BFu8s_BFu0i");
    static Uc_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu8s_BFu0i(Test_Uc_BFu8s_BFu0i, "Uc_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8s_BFu0ll  {
  unsigned char v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Uc_BFu8s_BFu0ll) C1{ Fc Fs:8 FL:0}



static void Test_Uc_BFu8s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu8s_BFu0ll");
    static Uc_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu8s_BFu0ll(Test_Uc_BFu8s_BFu0ll, "Uc_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu8s_BFu0s  {
  unsigned char v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Uc_BFu8s_BFu0s) C1{ Fc Fs:8 Fs:0}



static void Test_Uc_BFu8s_BFu0s()
{
  {
    init_simple_test("Uc_BFu8s_BFu0s");
    static Uc_BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu8s_BFu0s(Test_Uc_BFu8s_BFu0s, "Uc_BFu8s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9i_BFu0c  {
  unsigned char v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Uc_BFu9i_BFu0c) C1{ Fc Fi:9 Fc:0}



static void Test_Uc_BFu9i_BFu0c()
{
  {
    init_simple_test("Uc_BFu9i_BFu0c");
    static Uc_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu9i_BFu0c(Test_Uc_BFu9i_BFu0c, "Uc_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9i_BFu0i  {
  unsigned char v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Uc_BFu9i_BFu0i) C1{ Fc Fi:9 Fi:0}



static void Test_Uc_BFu9i_BFu0i()
{
  {
    init_simple_test("Uc_BFu9i_BFu0i");
    static Uc_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu9i_BFu0i(Test_Uc_BFu9i_BFu0i, "Uc_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Uc_BFu9i_BFu0ll) C1{ Fc Fi:9 FL:0}



static void Test_Uc_BFu9i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu9i_BFu0ll");
    static Uc_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu9i_BFu0ll(Test_Uc_BFu9i_BFu0ll, "Uc_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9i_BFu0s  {
  unsigned char v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Uc_BFu9i_BFu0s) C1{ Fc Fi:9 Fs:0}



static void Test_Uc_BFu9i_BFu0s()
{
  {
    init_simple_test("Uc_BFu9i_BFu0s");
    static Uc_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu9i_BFu0s(Test_Uc_BFu9i_BFu0s, "Uc_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Uc_BFu9ll_BFu0c) C1{ Fc FL:9 Fc:0}



static void Test_Uc_BFu9ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu9ll_BFu0c");
    static Uc_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu9ll_BFu0c(Test_Uc_BFu9ll_BFu0c, "Uc_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Uc_BFu9ll_BFu0i) C1{ Fc FL:9 Fi:0}



static void Test_Uc_BFu9ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu9ll_BFu0i");
    static Uc_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu9ll_BFu0i(Test_Uc_BFu9ll_BFu0i, "Uc_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Uc_BFu9ll_BFu0ll) C1{ Fc FL:9 FL:0}



static void Test_Uc_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu9ll_BFu0ll");
    static Uc_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu9ll_BFu0ll(Test_Uc_BFu9ll_BFu0ll, "Uc_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Uc_BFu9ll_BFu0s) C1{ Fc FL:9 Fs:0}



static void Test_Uc_BFu9ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu9ll_BFu0s");
    static Uc_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu9ll_BFu0s(Test_Uc_BFu9ll_BFu0s, "Uc_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9s_BFu0c  {
  unsigned char v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Uc_BFu9s_BFu0c) C1{ Fc Fs:9 Fc:0}



static void Test_Uc_BFu9s_BFu0c()
{
  {
    init_simple_test("Uc_BFu9s_BFu0c");
    static Uc_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vUc_BFu9s_BFu0c(Test_Uc_BFu9s_BFu0c, "Uc_BFu9s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9s_BFu0i  {
  unsigned char v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Uc_BFu9s_BFu0i) C1{ Fc Fs:9 Fi:0}



static void Test_Uc_BFu9s_BFu0i()
{
  {
    init_simple_test("Uc_BFu9s_BFu0i");
    static Uc_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vUc_BFu9s_BFu0i(Test_Uc_BFu9s_BFu0i, "Uc_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9s_BFu0ll  {
  unsigned char v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Uc_BFu9s_BFu0ll) C1{ Fc Fs:9 FL:0}



static void Test_Uc_BFu9s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu9s_BFu0ll");
    static Uc_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUc_BFu9s_BFu0ll(Test_Uc_BFu9s_BFu0ll, "Uc_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_BFu9s_BFu0s  {
  unsigned char v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Uc_BFu9s_BFu0s) C1{ Fc Fs:9 Fs:0}



static void Test_Uc_BFu9s_BFu0s()
{
  {
    init_simple_test("Uc_BFu9s_BFu0s");
    static Uc_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vUc_BFu9s_BFu0s(Test_Uc_BFu9s_BFu0s, "Uc_BFu9s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_C_BFu0c  {
  unsigned char v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Uc_C_BFu0c) C1{ Fc[2] Fc:0}



static void Test_Uc_C_BFu0c()
{
  {
    init_simple_test("Uc_C_BFu0c");
    static Uc_C_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_C_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_C_BFu0c.v1");
    check_field_offset(lv, v2, 1, "Uc_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_C_BFu0c(Test_Uc_C_BFu0c, "Uc_C_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_C_BFu0i  {
  unsigned char v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Uc_C_BFu0i) C1{ Fc[2] Fi:0}



static void Test_Uc_C_BFu0i()
{
  {
    init_simple_test("Uc_C_BFu0i");
    static Uc_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_C_BFu0i.v1");
    check_field_offset(lv, v2, 1, "Uc_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_C_BFu0i(Test_Uc_C_BFu0i, "Uc_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_C_BFu0ll  {
  unsigned char v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Uc_C_BFu0ll) C1{ Fc[2] FL:0}



static void Test_Uc_C_BFu0ll()
{
  {
    init_simple_test("Uc_C_BFu0ll");
    static Uc_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_C_BFu0ll.v1");
    check_field_offset(lv, v2, 1, "Uc_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_C_BFu0ll(Test_Uc_C_BFu0ll, "Uc_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_C_BFu0s  {
  unsigned char v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Uc_C_BFu0s) C1{ Fc[2] Fs:0}



static void Test_Uc_C_BFu0s()
{
  {
    init_simple_test("Uc_C_BFu0s");
    static Uc_C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_C_BFu0s.v1");
    check_field_offset(lv, v2, 1, "Uc_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_C_BFu0s(Test_Uc_C_BFu0s, "Uc_C_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_D_BFu0c  {
  unsigned char v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Uc_D_BFu0c) C1{ Fc FL Fc:0}



static void Test_Uc_D_BFu0c()
{
  {
    init_simple_test("Uc_D_BFu0c");
    static Uc_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_D_BFu0c(Test_Uc_D_BFu0c, "Uc_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_D_BFu0i  {
  unsigned char v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Uc_D_BFu0i) C1{ Fc FL Fi:0}



static void Test_Uc_D_BFu0i()
{
  {
    init_simple_test("Uc_D_BFu0i");
    static Uc_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_D_BFu0i(Test_Uc_D_BFu0i, "Uc_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_D_BFu0ll  {
  unsigned char v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Uc_D_BFu0ll) C1{ Fc FL FL:0}



static void Test_Uc_D_BFu0ll()
{
  {
    init_simple_test("Uc_D_BFu0ll");
    static Uc_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_D_BFu0ll(Test_Uc_D_BFu0ll, "Uc_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_D_BFu0s  {
  unsigned char v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Uc_D_BFu0s) C1{ Fc FL Fs:0}



static void Test_Uc_D_BFu0s()
{
  {
    init_simple_test("Uc_D_BFu0s");
    static Uc_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_D_BFu0s(Test_Uc_D_BFu0s, "Uc_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_F_BFu0c  {
  unsigned char v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Uc_F_BFu0c) C1{ Fc Fi Fc:0}



static void Test_Uc_F_BFu0c()
{
  {
    init_simple_test("Uc_F_BFu0c");
    static Uc_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Uc_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_F_BFu0c(Test_Uc_F_BFu0c, "Uc_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_F_BFu0i  {
  unsigned char v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Uc_F_BFu0i) C1{ Fc Fi Fi:0}



static void Test_Uc_F_BFu0i()
{
  {
    init_simple_test("Uc_F_BFu0i");
    static Uc_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Uc_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_F_BFu0i(Test_Uc_F_BFu0i, "Uc_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_F_BFu0ll  {
  unsigned char v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Uc_F_BFu0ll) C1{ Fc Fi FL:0}



static void Test_Uc_F_BFu0ll()
{
  {
    init_simple_test("Uc_F_BFu0ll");
    static Uc_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Uc_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_F_BFu0ll(Test_Uc_F_BFu0ll, "Uc_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_F_BFu0s  {
  unsigned char v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Uc_F_BFu0s) C1{ Fc Fi Fs:0}



static void Test_Uc_F_BFu0s()
{
  {
    init_simple_test("Uc_F_BFu0s");
    static Uc_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Uc_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_F_BFu0s(Test_Uc_F_BFu0s, "Uc_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_I_BFu0c  {
  unsigned char v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Uc_I_BFu0c) C1{ Fc Fi Fc:0}



static void Test_Uc_I_BFu0c()
{
  {
    init_simple_test("Uc_I_BFu0c");
    static Uc_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Uc_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_I_BFu0c(Test_Uc_I_BFu0c, "Uc_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_I_BFu0i  {
  unsigned char v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Uc_I_BFu0i) C1{ Fc Fi Fi:0}



static void Test_Uc_I_BFu0i()
{
  {
    init_simple_test("Uc_I_BFu0i");
    static Uc_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Uc_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_I_BFu0i(Test_Uc_I_BFu0i, "Uc_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_I_BFu0ll  {
  unsigned char v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Uc_I_BFu0ll) C1{ Fc Fi FL:0}



static void Test_Uc_I_BFu0ll()
{
  {
    init_simple_test("Uc_I_BFu0ll");
    static Uc_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Uc_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_I_BFu0ll(Test_Uc_I_BFu0ll, "Uc_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_I_BFu0s  {
  unsigned char v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Uc_I_BFu0s) C1{ Fc Fi Fs:0}



static void Test_Uc_I_BFu0s()
{
  {
    init_simple_test("Uc_I_BFu0s");
    static Uc_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Uc_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_I_BFu0s(Test_Uc_I_BFu0s, "Uc_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ip_BFu0c  {
  unsigned char v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Uc_Ip_BFu0c) C1{ Fc Fp Fc:0}



static void Test_Uc_Ip_BFu0c()
{
  {
    init_simple_test("Uc_Ip_BFu0c");
    static Uc_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_Ip_BFu0c(Test_Uc_Ip_BFu0c, "Uc_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ip_BFu0i  {
  unsigned char v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Uc_Ip_BFu0i) C1{ Fc Fp Fi:0}



static void Test_Uc_Ip_BFu0i()
{
  {
    init_simple_test("Uc_Ip_BFu0i");
    static Uc_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_Ip_BFu0i(Test_Uc_Ip_BFu0i, "Uc_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ip_BFu0ll  {
  unsigned char v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Uc_Ip_BFu0ll) C1{ Fc Fp FL:0}



static void Test_Uc_Ip_BFu0ll()
{
  {
    init_simple_test("Uc_Ip_BFu0ll");
    static Uc_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_Ip_BFu0ll(Test_Uc_Ip_BFu0ll, "Uc_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ip_BFu0s  {
  unsigned char v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Uc_Ip_BFu0s) C1{ Fc Fp Fs:0}



static void Test_Uc_Ip_BFu0s()
{
  {
    init_simple_test("Uc_Ip_BFu0s");
    static Uc_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_Ip_BFu0s(Test_Uc_Ip_BFu0s, "Uc_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_L_BFu0c  {
  unsigned char v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Uc_L_BFu0c) C1{ Fc FL Fc:0}



static void Test_Uc_L_BFu0c()
{
  {
    init_simple_test("Uc_L_BFu0c");
    static Uc_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_L_BFu0c(Test_Uc_L_BFu0c, "Uc_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_L_BFu0i  {
  unsigned char v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Uc_L_BFu0i) C1{ Fc FL Fi:0}



static void Test_Uc_L_BFu0i()
{
  {
    init_simple_test("Uc_L_BFu0i");
    static Uc_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_L_BFu0i(Test_Uc_L_BFu0i, "Uc_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_L_BFu0ll  {
  unsigned char v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Uc_L_BFu0ll) C1{ Fc FL FL:0}



static void Test_Uc_L_BFu0ll()
{
  {
    init_simple_test("Uc_L_BFu0ll");
    static Uc_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_L_BFu0ll(Test_Uc_L_BFu0ll, "Uc_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_L_BFu0s  {
  unsigned char v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Uc_L_BFu0s) C1{ Fc FL Fs:0}



static void Test_Uc_L_BFu0s()
{
  {
    init_simple_test("Uc_L_BFu0s");
    static Uc_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_L_BFu0s(Test_Uc_L_BFu0s, "Uc_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_S_BFu0c  {
  unsigned char v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Uc_S_BFu0c) C1{ Fc Fs Fc:0}



static void Test_Uc_S_BFu0c()
{
  {
    init_simple_test("Uc_S_BFu0c");
    static Uc_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_S_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Uc_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_S_BFu0c(Test_Uc_S_BFu0c, "Uc_S_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_S_BFu0i  {
  unsigned char v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Uc_S_BFu0i) C1{ Fc Fs Fi:0}



static void Test_Uc_S_BFu0i()
{
  {
    init_simple_test("Uc_S_BFu0i");
    static Uc_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_S_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Uc_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_S_BFu0i(Test_Uc_S_BFu0i, "Uc_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_S_BFu0ll  {
  unsigned char v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Uc_S_BFu0ll) C1{ Fc Fs FL:0}



static void Test_Uc_S_BFu0ll()
{
  {
    init_simple_test("Uc_S_BFu0ll");
    static Uc_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_S_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Uc_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_S_BFu0ll(Test_Uc_S_BFu0ll, "Uc_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_S_BFu0s  {
  unsigned char v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Uc_S_BFu0s) C1{ Fc Fs Fs:0}



static void Test_Uc_S_BFu0s()
{
  {
    init_simple_test("Uc_S_BFu0s");
    static Uc_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_S_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Uc_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_S_BFu0s(Test_Uc_S_BFu0s, "Uc_S_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Uc_BFu0c  {
  unsigned char v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Uc_Uc_BFu0c) C1{ Fc[2] Fc:0}



static void Test_Uc_Uc_BFu0c()
{
  {
    init_simple_test("Uc_Uc_BFu0c");
    static Uc_Uc_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Uc_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 1, "Uc_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_Uc_BFu0c(Test_Uc_Uc_BFu0c, "Uc_Uc_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Uc_BFu0i  {
  unsigned char v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Uc_Uc_BFu0i) C1{ Fc[2] Fi:0}



static void Test_Uc_Uc_BFu0i()
{
  {
    init_simple_test("Uc_Uc_BFu0i");
    static Uc_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 1, "Uc_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_Uc_BFu0i(Test_Uc_Uc_BFu0i, "Uc_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Uc_BFu0ll  {
  unsigned char v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Uc_Uc_BFu0ll) C1{ Fc[2] FL:0}



static void Test_Uc_Uc_BFu0ll()
{
  {
    init_simple_test("Uc_Uc_BFu0ll");
    static Uc_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_Uc_BFu0ll(Test_Uc_Uc_BFu0ll, "Uc_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Uc_BFu0s  {
  unsigned char v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Uc_Uc_BFu0s) C1{ Fc[2] Fs:0}



static void Test_Uc_Uc_BFu0s()
{
  {
    init_simple_test("Uc_Uc_BFu0s");
    static Uc_Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 1, "Uc_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_Uc_BFu0s(Test_Uc_Uc_BFu0s, "Uc_Uc_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ui_BFu0c  {
  unsigned char v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Uc_Ui_BFu0c) C1{ Fc Fi Fc:0}



static void Test_Uc_Ui_BFu0c()
{
  {
    init_simple_test("Uc_Ui_BFu0c");
    static Uc_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Uc_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_Ui_BFu0c(Test_Uc_Ui_BFu0c, "Uc_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ui_BFu0i  {
  unsigned char v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Uc_Ui_BFu0i) C1{ Fc Fi Fi:0}



static void Test_Uc_Ui_BFu0i()
{
  {
    init_simple_test("Uc_Ui_BFu0i");
    static Uc_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Uc_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_Ui_BFu0i(Test_Uc_Ui_BFu0i, "Uc_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ui_BFu0ll  {
  unsigned char v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Uc_Ui_BFu0ll) C1{ Fc Fi FL:0}



static void Test_Uc_Ui_BFu0ll()
{
  {
    init_simple_test("Uc_Ui_BFu0ll");
    static Uc_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Uc_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_Ui_BFu0ll(Test_Uc_Ui_BFu0ll, "Uc_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ui_BFu0s  {
  unsigned char v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Uc_Ui_BFu0s) C1{ Fc Fi Fs:0}



static void Test_Uc_Ui_BFu0s()
{
  {
    init_simple_test("Uc_Ui_BFu0s");
    static Uc_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Uc_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_Ui_BFu0s(Test_Uc_Ui_BFu0s, "Uc_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ul_BFu0c  {
  unsigned char v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Uc_Ul_BFu0c) C1{ Fc FL Fc:0}



static void Test_Uc_Ul_BFu0c()
{
  {
    init_simple_test("Uc_Ul_BFu0c");
    static Uc_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_Ul_BFu0c(Test_Uc_Ul_BFu0c, "Uc_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ul_BFu0i  {
  unsigned char v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Uc_Ul_BFu0i) C1{ Fc FL Fi:0}



static void Test_Uc_Ul_BFu0i()
{
  {
    init_simple_test("Uc_Ul_BFu0i");
    static Uc_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_Ul_BFu0i(Test_Uc_Ul_BFu0i, "Uc_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ul_BFu0ll  {
  unsigned char v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Uc_Ul_BFu0ll) C1{ Fc FL FL:0}



static void Test_Uc_Ul_BFu0ll()
{
  {
    init_simple_test("Uc_Ul_BFu0ll");
    static Uc_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_Ul_BFu0ll(Test_Uc_Ul_BFu0ll, "Uc_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Ul_BFu0s  {
  unsigned char v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Uc_Ul_BFu0s) C1{ Fc FL Fs:0}



static void Test_Uc_Ul_BFu0s()
{
  {
    init_simple_test("Uc_Ul_BFu0s");
    static Uc_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_Ul_BFu0s(Test_Uc_Ul_BFu0s, "Uc_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Us_BFu0c  {
  unsigned char v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Uc_Us_BFu0c) C1{ Fc Fs Fc:0}



static void Test_Uc_Us_BFu0c()
{
  {
    init_simple_test("Uc_Us_BFu0c");
    static Uc_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Us_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Uc_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_Us_BFu0c(Test_Uc_Us_BFu0c, "Uc_Us_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Us_BFu0i  {
  unsigned char v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Uc_Us_BFu0i) C1{ Fc Fs Fi:0}



static void Test_Uc_Us_BFu0i()
{
  {
    init_simple_test("Uc_Us_BFu0i");
    static Uc_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Us_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Uc_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_Us_BFu0i(Test_Uc_Us_BFu0i, "Uc_Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Us_BFu0ll  {
  unsigned char v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Uc_Us_BFu0ll) C1{ Fc Fs FL:0}



static void Test_Uc_Us_BFu0ll()
{
  {
    init_simple_test("Uc_Us_BFu0ll");
    static Uc_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Uc_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_Us_BFu0ll(Test_Uc_Us_BFu0ll, "Uc_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Us_BFu0s  {
  unsigned char v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Uc_Us_BFu0s) C1{ Fc Fs Fs:0}



static void Test_Uc_Us_BFu0s()
{
  {
    init_simple_test("Uc_Us_BFu0s");
    static Uc_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Us_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Uc_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_Us_BFu0s(Test_Uc_Us_BFu0s, "Uc_Us_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Vp_BFu0c  {
  unsigned char v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Uc_Vp_BFu0c) C1{ Fc Fp Fc:0}



static void Test_Uc_Vp_BFu0c()
{
  {
    init_simple_test("Uc_Vp_BFu0c");
    static Uc_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUc_Vp_BFu0c(Test_Uc_Vp_BFu0c, "Uc_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Vp_BFu0i  {
  unsigned char v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Uc_Vp_BFu0i) C1{ Fc Fp Fi:0}



static void Test_Uc_Vp_BFu0i()
{
  {
    init_simple_test("Uc_Vp_BFu0i");
    static Uc_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUc_Vp_BFu0i(Test_Uc_Vp_BFu0i, "Uc_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Vp_BFu0ll  {
  unsigned char v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Uc_Vp_BFu0ll) C1{ Fc Fp FL:0}



static void Test_Uc_Vp_BFu0ll()
{
  {
    init_simple_test("Uc_Vp_BFu0ll");
    static Uc_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUc_Vp_BFu0ll(Test_Uc_Vp_BFu0ll, "Uc_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Uc_Vp_BFu0s  {
  unsigned char v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Uc_Vp_BFu0s) C1{ Fc Fp Fs:0}



static void Test_Uc_Vp_BFu0s()
{
  {
    init_simple_test("Uc_Vp_BFu0s");
    static Uc_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUc_Vp_BFu0s(Test_Uc_Vp_BFu0s, "Uc_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c  {
  unsigned int v1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0c) C1{ Fi Fc:0}



static void Test_Ui_BFu0c()
{
  {
    init_simple_test("Ui_BFu0c");
    static Ui_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0c(Test_Ui_BFu0c, "Ui_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu0c  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0c_BFu0c) C1{ Fi Fc:0 Fc:0}



static void Test_Ui_BFu0c_BFu0c()
{
  {
    init_simple_test("Ui_BFu0c_BFu0c");
    static Ui_BFu0c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu0c(Test_Ui_BFu0c_BFu0c, "Ui_BFu0c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu0i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0c_BFu0i) C1{ Fi Fc:0 Fi:0}



static void Test_Ui_BFu0c_BFu0i()
{
  {
    init_simple_test("Ui_BFu0c_BFu0i");
    static Ui_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu0i(Test_Ui_BFu0c_BFu0i, "Ui_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu0ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0c_BFu0ll) C1{ Fi Fc:0 FL:0}



static void Test_Ui_BFu0c_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu0ll");
    static Ui_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu0ll(Test_Ui_BFu0c_BFu0ll, "Ui_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu0s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0c_BFu0s) C1{ Fi Fc:0 Fs:0}



static void Test_Ui_BFu0c_BFu0s()
{
  {
    init_simple_test("Ui_BFu0c_BFu0s");
    static Ui_BFu0c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu0s(Test_Ui_BFu0c_BFu0s, "Ui_BFu0c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu15i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Ui_BFu0c_BFu15i) C1{ Fi Fc:0 Fi:15}



static void Test_Ui_BFu0c_BFu15i()
{
  {
    init_simple_test("Ui_BFu0c_BFu15i");
    static Ui_BFu0c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu15i(Test_Ui_BFu0c_BFu15i, "Ui_BFu0c_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu15ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Ui_BFu0c_BFu15ll) C1{ Fi Fc:0 FL:15}



static void Test_Ui_BFu0c_BFu15ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu15ll");
    static Ui_BFu0c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu15ll(Test_Ui_BFu0c_BFu15ll, "Ui_BFu0c_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu15s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Ui_BFu0c_BFu15s) C1{ Fi Fc:0 Fs:15}



static void Test_Ui_BFu0c_BFu15s()
{
  {
    init_simple_test("Ui_BFu0c_BFu15s");
    static Ui_BFu0c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu15s(Test_Ui_BFu0c_BFu15s, "Ui_BFu0c_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu16i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Ui_BFu0c_BFu16i) C1{ Fi Fc:0 Fi:16}



static void Test_Ui_BFu0c_BFu16i()
{
  {
    init_simple_test("Ui_BFu0c_BFu16i");
    static Ui_BFu0c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu16i(Test_Ui_BFu0c_BFu16i, "Ui_BFu0c_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu16ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Ui_BFu0c_BFu16ll) C1{ Fi Fc:0 FL:16}



static void Test_Ui_BFu0c_BFu16ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu16ll");
    static Ui_BFu0c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu16ll(Test_Ui_BFu0c_BFu16ll, "Ui_BFu0c_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu16s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Ui_BFu0c_BFu16s) C1{ Fi Fc:0 Fs:16}



static void Test_Ui_BFu0c_BFu16s()
{
  {
    init_simple_test("Ui_BFu0c_BFu16s");
    static Ui_BFu0c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu16s(Test_Ui_BFu0c_BFu16s, "Ui_BFu0c_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu17i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Ui_BFu0c_BFu17i) C1{ Fi Fc:0 Fi:17}



static void Test_Ui_BFu0c_BFu17i()
{
  {
    init_simple_test("Ui_BFu0c_BFu17i");
    static Ui_BFu0c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu17i(Test_Ui_BFu0c_BFu17i, "Ui_BFu0c_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu17ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Ui_BFu0c_BFu17ll) C1{ Fi Fc:0 FL:17}



static void Test_Ui_BFu0c_BFu17ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu17ll");
    static Ui_BFu0c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu17ll(Test_Ui_BFu0c_BFu17ll, "Ui_BFu0c_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu1c  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Ui_BFu0c_BFu1c) C1{ Fi Fc:0 Fc:1}



static void Test_Ui_BFu0c_BFu1c()
{
  {
    init_simple_test("Ui_BFu0c_BFu1c");
    static Ui_BFu0c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu1c(Test_Ui_BFu0c_BFu1c, "Ui_BFu0c_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu1i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Ui_BFu0c_BFu1i) C1{ Fi Fc:0 Fi:1}



static void Test_Ui_BFu0c_BFu1i()
{
  {
    init_simple_test("Ui_BFu0c_BFu1i");
    static Ui_BFu0c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu1i(Test_Ui_BFu0c_BFu1i, "Ui_BFu0c_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu1ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Ui_BFu0c_BFu1ll) C1{ Fi Fc:0 FL:1}



static void Test_Ui_BFu0c_BFu1ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu1ll");
    static Ui_BFu0c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu1ll(Test_Ui_BFu0c_BFu1ll, "Ui_BFu0c_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu1s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Ui_BFu0c_BFu1s) C1{ Fi Fc:0 Fs:1}



static void Test_Ui_BFu0c_BFu1s()
{
  {
    init_simple_test("Ui_BFu0c_BFu1s");
    static Ui_BFu0c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu1s(Test_Ui_BFu0c_BFu1s, "Ui_BFu0c_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu31i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Ui_BFu0c_BFu31i) C1{ Fi Fc:0 Fi:31}



static void Test_Ui_BFu0c_BFu31i()
{
  {
    init_simple_test("Ui_BFu0c_BFu31i");
    static Ui_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu31i(Test_Ui_BFu0c_BFu31i, "Ui_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu31ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Ui_BFu0c_BFu31ll) C1{ Fi Fc:0 FL:31}



static void Test_Ui_BFu0c_BFu31ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu31ll");
    static Ui_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu31ll(Test_Ui_BFu0c_BFu31ll, "Ui_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu32i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Ui_BFu0c_BFu32i) C1{ Fi Fc:0 Fi:32}



static void Test_Ui_BFu0c_BFu32i()
{
  {
    init_simple_test("Ui_BFu0c_BFu32i");
    static Ui_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu32i(Test_Ui_BFu0c_BFu32i, "Ui_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu32ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Ui_BFu0c_BFu32ll) C1{ Fi Fc:0 FL:32}



static void Test_Ui_BFu0c_BFu32ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu32ll");
    static Ui_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu32ll(Test_Ui_BFu0c_BFu32ll, "Ui_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu33  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Ui_BFu0c_BFu33) C1{ Fi Fc:0 FL:33}



static void Test_Ui_BFu0c_BFu33()
{
  {
    init_simple_test("Ui_BFu0c_BFu33");
    static Ui_BFu0c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu0c_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu33(Test_Ui_BFu0c_BFu33, "Ui_BFu0c_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu7c  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Ui_BFu0c_BFu7c) C1{ Fi Fc:0 Fc:7}



static void Test_Ui_BFu0c_BFu7c()
{
  {
    init_simple_test("Ui_BFu0c_BFu7c");
    static Ui_BFu0c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu7c(Test_Ui_BFu0c_BFu7c, "Ui_BFu0c_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu7i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Ui_BFu0c_BFu7i) C1{ Fi Fc:0 Fi:7}



static void Test_Ui_BFu0c_BFu7i()
{
  {
    init_simple_test("Ui_BFu0c_BFu7i");
    static Ui_BFu0c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu7i(Test_Ui_BFu0c_BFu7i, "Ui_BFu0c_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu7ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Ui_BFu0c_BFu7ll) C1{ Fi Fc:0 FL:7}



static void Test_Ui_BFu0c_BFu7ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu7ll");
    static Ui_BFu0c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu7ll(Test_Ui_BFu0c_BFu7ll, "Ui_BFu0c_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu7s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Ui_BFu0c_BFu7s) C1{ Fi Fc:0 Fs:7}



static void Test_Ui_BFu0c_BFu7s()
{
  {
    init_simple_test("Ui_BFu0c_BFu7s");
    static Ui_BFu0c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu7s(Test_Ui_BFu0c_BFu7s, "Ui_BFu0c_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu8c  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Ui_BFu0c_BFu8c) C1{ Fi Fc:0 Fc:8}



static void Test_Ui_BFu0c_BFu8c()
{
  {
    init_simple_test("Ui_BFu0c_BFu8c");
    static Ui_BFu0c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu8c(Test_Ui_BFu0c_BFu8c, "Ui_BFu0c_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu8i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Ui_BFu0c_BFu8i) C1{ Fi Fc:0 Fi:8}



static void Test_Ui_BFu0c_BFu8i()
{
  {
    init_simple_test("Ui_BFu0c_BFu8i");
    static Ui_BFu0c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu8i(Test_Ui_BFu0c_BFu8i, "Ui_BFu0c_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu8ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Ui_BFu0c_BFu8ll) C1{ Fi Fc:0 FL:8}



static void Test_Ui_BFu0c_BFu8ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu8ll");
    static Ui_BFu0c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu8ll(Test_Ui_BFu0c_BFu8ll, "Ui_BFu0c_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu8s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Ui_BFu0c_BFu8s) C1{ Fi Fc:0 Fs:8}



static void Test_Ui_BFu0c_BFu8s()
{
  {
    init_simple_test("Ui_BFu0c_BFu8s");
    static Ui_BFu0c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu8s(Test_Ui_BFu0c_BFu8s, "Ui_BFu0c_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu9i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Ui_BFu0c_BFu9i) C1{ Fi Fc:0 Fi:9}



static void Test_Ui_BFu0c_BFu9i()
{
  {
    init_simple_test("Ui_BFu0c_BFu9i");
    static Ui_BFu0c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu9i(Test_Ui_BFu0c_BFu9i, "Ui_BFu0c_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu9ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Ui_BFu0c_BFu9ll) C1{ Fi Fc:0 FL:9}



static void Test_Ui_BFu0c_BFu9ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu9ll");
    static Ui_BFu0c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu9ll(Test_Ui_BFu0c_BFu9ll, "Ui_BFu0c_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_BFu9s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Ui_BFu0c_BFu9s) C1{ Fi Fc:0 Fs:9}



static void Test_Ui_BFu0c_BFu9s()
{
  {
    init_simple_test("Ui_BFu0c_BFu9s");
    static Ui_BFu0c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_BFu9s(Test_Ui_BFu0c_BFu9s, "Ui_BFu0c_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_C  {
  unsigned int v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Ui_BFu0c_C) C1{ Fi Fc:0 Fc}



static void Test_Ui_BFu0c_C()
{
  {
    init_simple_test("Ui_BFu0c_C");
    static Ui_BFu0c_C lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_C)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_C.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_C(Test_Ui_BFu0c_C, "Ui_BFu0c_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_D  {
  unsigned int v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Ui_BFu0c_D) C1{ Fi Fc:0 FL}



static void Test_Ui_BFu0c_D()
{
  {
    init_simple_test("Ui_BFu0c_D");
    static Ui_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_D(Test_Ui_BFu0c_D, "Ui_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_F  {
  unsigned int v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Ui_BFu0c_F) C1{ Fi Fc:0 Fi}



static void Test_Ui_BFu0c_F()
{
  {
    init_simple_test("Ui_BFu0c_F");
    static Ui_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_F(Test_Ui_BFu0c_F, "Ui_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_I  {
  unsigned int v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Ui_BFu0c_I) C1{ Fi Fc:0 Fi}



static void Test_Ui_BFu0c_I()
{
  {
    init_simple_test("Ui_BFu0c_I");
    static Ui_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_I(Test_Ui_BFu0c_I, "Ui_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_Ip  {
  unsigned int v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Ui_BFu0c_Ip) C1{ Fi Fc:0 Fp}



static void Test_Ui_BFu0c_Ip()
{
  {
    init_simple_test("Ui_BFu0c_Ip");
    static Ui_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_Ip(Test_Ui_BFu0c_Ip, "Ui_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_L  {
  unsigned int v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Ui_BFu0c_L) C1{ Fi Fc:0 FL}



static void Test_Ui_BFu0c_L()
{
  {
    init_simple_test("Ui_BFu0c_L");
    static Ui_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_L(Test_Ui_BFu0c_L, "Ui_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_S  {
  unsigned int v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Ui_BFu0c_S) C1{ Fi Fc:0 Fs}



static void Test_Ui_BFu0c_S()
{
  {
    init_simple_test("Ui_BFu0c_S");
    static Ui_BFu0c_S lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_S)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_S.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_S(Test_Ui_BFu0c_S, "Ui_BFu0c_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_Uc  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Ui_BFu0c_Uc) C1{ Fi Fc:0 Fc}



static void Test_Ui_BFu0c_Uc()
{
  {
    init_simple_test("Ui_BFu0c_Uc");
    static Ui_BFu0c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_Uc(Test_Ui_BFu0c_Uc, "Ui_BFu0c_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_Ui  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Ui_BFu0c_Ui) C1{ Fi Fc:0 Fi}



static void Test_Ui_BFu0c_Ui()
{
  {
    init_simple_test("Ui_BFu0c_Ui");
    static Ui_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_Ui(Test_Ui_BFu0c_Ui, "Ui_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_Ul  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Ui_BFu0c_Ul) C1{ Fi Fc:0 FL}



static void Test_Ui_BFu0c_Ul()
{
  {
    init_simple_test("Ui_BFu0c_Ul");
    static Ui_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_Ul(Test_Ui_BFu0c_Ul, "Ui_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_Us  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Ui_BFu0c_Us) C1{ Fi Fc:0 Fs}



static void Test_Ui_BFu0c_Us()
{
  {
    init_simple_test("Ui_BFu0c_Us");
    static Ui_BFu0c_Us lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Us.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_Us(Test_Ui_BFu0c_Us, "Ui_BFu0c_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0c_Vp  {
  unsigned int v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Ui_BFu0c_Vp) C1{ Fi Fc:0 Fp}



static void Test_Ui_BFu0c_Vp()
{
  {
    init_simple_test("Ui_BFu0c_Vp");
    static Ui_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0c_Vp(Test_Ui_BFu0c_Vp, "Ui_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i  {
  unsigned int v1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0i) C1{ Fi Fi:0}



static void Test_Ui_BFu0i()
{
  {
    init_simple_test("Ui_BFu0i");
    static Ui_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0i(Test_Ui_BFu0i, "Ui_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu0c  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0i_BFu0c) C1{ Fi Fi:0 Fc:0}



static void Test_Ui_BFu0i_BFu0c()
{
  {
    init_simple_test("Ui_BFu0i_BFu0c");
    static Ui_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu0c(Test_Ui_BFu0i_BFu0c, "Ui_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu0i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0i_BFu0i) C1{ Fi Fi:0 Fi:0}



static void Test_Ui_BFu0i_BFu0i()
{
  {
    init_simple_test("Ui_BFu0i_BFu0i");
    static Ui_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu0i(Test_Ui_BFu0i_BFu0i, "Ui_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu0ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0i_BFu0ll) C1{ Fi Fi:0 FL:0}



static void Test_Ui_BFu0i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu0ll");
    static Ui_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu0ll(Test_Ui_BFu0i_BFu0ll, "Ui_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu0s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0i_BFu0s) C1{ Fi Fi:0 Fs:0}



static void Test_Ui_BFu0i_BFu0s()
{
  {
    init_simple_test("Ui_BFu0i_BFu0s");
    static Ui_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu0s(Test_Ui_BFu0i_BFu0s, "Ui_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu15i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Ui_BFu0i_BFu15i) C1{ Fi Fi:0 Fi:15}



static void Test_Ui_BFu0i_BFu15i()
{
  {
    init_simple_test("Ui_BFu0i_BFu15i");
    static Ui_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu15i(Test_Ui_BFu0i_BFu15i, "Ui_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu15ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Ui_BFu0i_BFu15ll) C1{ Fi Fi:0 FL:15}



static void Test_Ui_BFu0i_BFu15ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu15ll");
    static Ui_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu15ll(Test_Ui_BFu0i_BFu15ll, "Ui_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu15s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Ui_BFu0i_BFu15s) C1{ Fi Fi:0 Fs:15}



static void Test_Ui_BFu0i_BFu15s()
{
  {
    init_simple_test("Ui_BFu0i_BFu15s");
    static Ui_BFu0i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu15s(Test_Ui_BFu0i_BFu15s, "Ui_BFu0i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu16i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Ui_BFu0i_BFu16i) C1{ Fi Fi:0 Fi:16}



static void Test_Ui_BFu0i_BFu16i()
{
  {
    init_simple_test("Ui_BFu0i_BFu16i");
    static Ui_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu16i(Test_Ui_BFu0i_BFu16i, "Ui_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu16ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Ui_BFu0i_BFu16ll) C1{ Fi Fi:0 FL:16}



static void Test_Ui_BFu0i_BFu16ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu16ll");
    static Ui_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu16ll(Test_Ui_BFu0i_BFu16ll, "Ui_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu16s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Ui_BFu0i_BFu16s) C1{ Fi Fi:0 Fs:16}



static void Test_Ui_BFu0i_BFu16s()
{
  {
    init_simple_test("Ui_BFu0i_BFu16s");
    static Ui_BFu0i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu16s(Test_Ui_BFu0i_BFu16s, "Ui_BFu0i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu17i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Ui_BFu0i_BFu17i) C1{ Fi Fi:0 Fi:17}



static void Test_Ui_BFu0i_BFu17i()
{
  {
    init_simple_test("Ui_BFu0i_BFu17i");
    static Ui_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu17i(Test_Ui_BFu0i_BFu17i, "Ui_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu17ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Ui_BFu0i_BFu17ll) C1{ Fi Fi:0 FL:17}



static void Test_Ui_BFu0i_BFu17ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu17ll");
    static Ui_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu17ll(Test_Ui_BFu0i_BFu17ll, "Ui_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu1c  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Ui_BFu0i_BFu1c) C1{ Fi Fi:0 Fc:1}



static void Test_Ui_BFu0i_BFu1c()
{
  {
    init_simple_test("Ui_BFu0i_BFu1c");
    static Ui_BFu0i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu1c(Test_Ui_BFu0i_BFu1c, "Ui_BFu0i_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu1i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Ui_BFu0i_BFu1i) C1{ Fi Fi:0 Fi:1}



static void Test_Ui_BFu0i_BFu1i()
{
  {
    init_simple_test("Ui_BFu0i_BFu1i");
    static Ui_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu1i(Test_Ui_BFu0i_BFu1i, "Ui_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu1ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Ui_BFu0i_BFu1ll) C1{ Fi Fi:0 FL:1}



static void Test_Ui_BFu0i_BFu1ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu1ll");
    static Ui_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu1ll(Test_Ui_BFu0i_BFu1ll, "Ui_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu1s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Ui_BFu0i_BFu1s) C1{ Fi Fi:0 Fs:1}



static void Test_Ui_BFu0i_BFu1s()
{
  {
    init_simple_test("Ui_BFu0i_BFu1s");
    static Ui_BFu0i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu1s(Test_Ui_BFu0i_BFu1s, "Ui_BFu0i_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu31i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Ui_BFu0i_BFu31i) C1{ Fi Fi:0 Fi:31}



static void Test_Ui_BFu0i_BFu31i()
{
  {
    init_simple_test("Ui_BFu0i_BFu31i");
    static Ui_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu31i(Test_Ui_BFu0i_BFu31i, "Ui_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu31ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Ui_BFu0i_BFu31ll) C1{ Fi Fi:0 FL:31}



static void Test_Ui_BFu0i_BFu31ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu31ll");
    static Ui_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu31ll(Test_Ui_BFu0i_BFu31ll, "Ui_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu32i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Ui_BFu0i_BFu32i) C1{ Fi Fi:0 Fi:32}



static void Test_Ui_BFu0i_BFu32i()
{
  {
    init_simple_test("Ui_BFu0i_BFu32i");
    static Ui_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu32i(Test_Ui_BFu0i_BFu32i, "Ui_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu32ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Ui_BFu0i_BFu32ll) C1{ Fi Fi:0 FL:32}



static void Test_Ui_BFu0i_BFu32ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu32ll");
    static Ui_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu32ll(Test_Ui_BFu0i_BFu32ll, "Ui_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu33  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Ui_BFu0i_BFu33) C1{ Fi Fi:0 FL:33}



static void Test_Ui_BFu0i_BFu33()
{
  {
    init_simple_test("Ui_BFu0i_BFu33");
    static Ui_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu33(Test_Ui_BFu0i_BFu33, "Ui_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu7c  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Ui_BFu0i_BFu7c) C1{ Fi Fi:0 Fc:7}



static void Test_Ui_BFu0i_BFu7c()
{
  {
    init_simple_test("Ui_BFu0i_BFu7c");
    static Ui_BFu0i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu7c(Test_Ui_BFu0i_BFu7c, "Ui_BFu0i_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu7i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Ui_BFu0i_BFu7i) C1{ Fi Fi:0 Fi:7}



static void Test_Ui_BFu0i_BFu7i()
{
  {
    init_simple_test("Ui_BFu0i_BFu7i");
    static Ui_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu7i(Test_Ui_BFu0i_BFu7i, "Ui_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu7ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Ui_BFu0i_BFu7ll) C1{ Fi Fi:0 FL:7}



static void Test_Ui_BFu0i_BFu7ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu7ll");
    static Ui_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu7ll(Test_Ui_BFu0i_BFu7ll, "Ui_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu7s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Ui_BFu0i_BFu7s) C1{ Fi Fi:0 Fs:7}



static void Test_Ui_BFu0i_BFu7s()
{
  {
    init_simple_test("Ui_BFu0i_BFu7s");
    static Ui_BFu0i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu7s(Test_Ui_BFu0i_BFu7s, "Ui_BFu0i_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu8c  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Ui_BFu0i_BFu8c) C1{ Fi Fi:0 Fc:8}



static void Test_Ui_BFu0i_BFu8c()
{
  {
    init_simple_test("Ui_BFu0i_BFu8c");
    static Ui_BFu0i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu8c(Test_Ui_BFu0i_BFu8c, "Ui_BFu0i_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu8i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Ui_BFu0i_BFu8i) C1{ Fi Fi:0 Fi:8}



static void Test_Ui_BFu0i_BFu8i()
{
  {
    init_simple_test("Ui_BFu0i_BFu8i");
    static Ui_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu8i(Test_Ui_BFu0i_BFu8i, "Ui_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu8ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Ui_BFu0i_BFu8ll) C1{ Fi Fi:0 FL:8}



static void Test_Ui_BFu0i_BFu8ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu8ll");
    static Ui_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu8ll(Test_Ui_BFu0i_BFu8ll, "Ui_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu8s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Ui_BFu0i_BFu8s) C1{ Fi Fi:0 Fs:8}



static void Test_Ui_BFu0i_BFu8s()
{
  {
    init_simple_test("Ui_BFu0i_BFu8s");
    static Ui_BFu0i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu8s(Test_Ui_BFu0i_BFu8s, "Ui_BFu0i_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu9i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Ui_BFu0i_BFu9i) C1{ Fi Fi:0 Fi:9}



static void Test_Ui_BFu0i_BFu9i()
{
  {
    init_simple_test("Ui_BFu0i_BFu9i");
    static Ui_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu9i(Test_Ui_BFu0i_BFu9i, "Ui_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu9ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Ui_BFu0i_BFu9ll) C1{ Fi Fi:0 FL:9}



static void Test_Ui_BFu0i_BFu9ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu9ll");
    static Ui_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu9ll(Test_Ui_BFu0i_BFu9ll, "Ui_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_BFu9s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Ui_BFu0i_BFu9s) C1{ Fi Fi:0 Fs:9}



static void Test_Ui_BFu0i_BFu9s()
{
  {
    init_simple_test("Ui_BFu0i_BFu9s");
    static Ui_BFu0i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_BFu9s(Test_Ui_BFu0i_BFu9s, "Ui_BFu0i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_C  {
  unsigned int v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Ui_BFu0i_C) C1{ Fi Fi:0 Fc}



static void Test_Ui_BFu0i_C()
{
  {
    init_simple_test("Ui_BFu0i_C");
    static Ui_BFu0i_C lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_C(Test_Ui_BFu0i_C, "Ui_BFu0i_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_D  {
  unsigned int v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Ui_BFu0i_D) C1{ Fi Fi:0 FL}



static void Test_Ui_BFu0i_D()
{
  {
    init_simple_test("Ui_BFu0i_D");
    static Ui_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_D(Test_Ui_BFu0i_D, "Ui_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_F  {
  unsigned int v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Ui_BFu0i_F) C1{ Fi Fi:0 Fi}



static void Test_Ui_BFu0i_F()
{
  {
    init_simple_test("Ui_BFu0i_F");
    static Ui_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_F(Test_Ui_BFu0i_F, "Ui_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_I  {
  unsigned int v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Ui_BFu0i_I) C1{ Fi Fi:0 Fi}



static void Test_Ui_BFu0i_I()
{
  {
    init_simple_test("Ui_BFu0i_I");
    static Ui_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_I(Test_Ui_BFu0i_I, "Ui_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_Ip  {
  unsigned int v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Ui_BFu0i_Ip) C1{ Fi Fi:0 Fp}



static void Test_Ui_BFu0i_Ip()
{
  {
    init_simple_test("Ui_BFu0i_Ip");
    static Ui_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_Ip(Test_Ui_BFu0i_Ip, "Ui_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_L  {
  unsigned int v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Ui_BFu0i_L) C1{ Fi Fi:0 FL}



static void Test_Ui_BFu0i_L()
{
  {
    init_simple_test("Ui_BFu0i_L");
    static Ui_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_L(Test_Ui_BFu0i_L, "Ui_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_S  {
  unsigned int v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Ui_BFu0i_S) C1{ Fi Fi:0 Fs}



static void Test_Ui_BFu0i_S()
{
  {
    init_simple_test("Ui_BFu0i_S");
    static Ui_BFu0i_S lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_S(Test_Ui_BFu0i_S, "Ui_BFu0i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_Uc  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Ui_BFu0i_Uc) C1{ Fi Fi:0 Fc}



static void Test_Ui_BFu0i_Uc()
{
  {
    init_simple_test("Ui_BFu0i_Uc");
    static Ui_BFu0i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_Uc(Test_Ui_BFu0i_Uc, "Ui_BFu0i_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_Ui  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Ui_BFu0i_Ui) C1{ Fi Fi:0 Fi}



static void Test_Ui_BFu0i_Ui()
{
  {
    init_simple_test("Ui_BFu0i_Ui");
    static Ui_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_Ui(Test_Ui_BFu0i_Ui, "Ui_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_Ul  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Ui_BFu0i_Ul) C1{ Fi Fi:0 FL}



static void Test_Ui_BFu0i_Ul()
{
  {
    init_simple_test("Ui_BFu0i_Ul");
    static Ui_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_Ul(Test_Ui_BFu0i_Ul, "Ui_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_Us  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Ui_BFu0i_Us) C1{ Fi Fi:0 Fs}



static void Test_Ui_BFu0i_Us()
{
  {
    init_simple_test("Ui_BFu0i_Us");
    static Ui_BFu0i_Us lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_Us(Test_Ui_BFu0i_Us, "Ui_BFu0i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0i_Vp  {
  unsigned int v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Ui_BFu0i_Vp) C1{ Fi Fi:0 Fp}



static void Test_Ui_BFu0i_Vp()
{
  {
    init_simple_test("Ui_BFu0i_Vp");
    static Ui_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0i_Vp(Test_Ui_BFu0i_Vp, "Ui_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll  {
  unsigned int v1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0ll) C1{ Fi FL:0}



static void Test_Ui_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0ll");
    static Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll(Test_Ui_BFu0ll, "Ui_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu0c  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0ll_BFu0c) C1{ Fi FL:0 Fc:0}



static void Test_Ui_BFu0ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu0ll_BFu0c");
    static Ui_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu0c(Test_Ui_BFu0ll_BFu0c, "Ui_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu0i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0ll_BFu0i) C1{ Fi FL:0 Fi:0}



static void Test_Ui_BFu0ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu0i");
    static Ui_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu0i(Test_Ui_BFu0ll_BFu0i, "Ui_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu0ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0ll_BFu0ll) C1{ Fi FL:0 FL:0}



static void Test_Ui_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu0ll");
    static Ui_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu0ll(Test_Ui_BFu0ll_BFu0ll, "Ui_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu0s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0ll_BFu0s) C1{ Fi FL:0 Fs:0}



static void Test_Ui_BFu0ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu0s");
    static Ui_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu0s(Test_Ui_BFu0ll_BFu0s, "Ui_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu15i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Ui_BFu0ll_BFu15i) C1{ Fi FL:0 Fi:15}



static void Test_Ui_BFu0ll_BFu15i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu15i");
    static Ui_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ui_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ui_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu15i(Test_Ui_BFu0ll_BFu15i, "Ui_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu15ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Ui_BFu0ll_BFu15ll) C1{ Fi FL:0 FL:15}



static void Test_Ui_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu15ll");
    static Ui_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ui_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ui_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu15ll(Test_Ui_BFu0ll_BFu15ll, "Ui_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu15s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Ui_BFu0ll_BFu15s) C1{ Fi FL:0 Fs:15}



static void Test_Ui_BFu0ll_BFu15s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu15s");
    static Ui_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ui_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ui_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu15s(Test_Ui_BFu0ll_BFu15s, "Ui_BFu0ll_BFu15s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu16i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Ui_BFu0ll_BFu16i) C1{ Fi FL:0 Fi:16}



static void Test_Ui_BFu0ll_BFu16i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu16i");
    static Ui_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ui_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ui_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu16i(Test_Ui_BFu0ll_BFu16i, "Ui_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu16ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Ui_BFu0ll_BFu16ll) C1{ Fi FL:0 FL:16}



static void Test_Ui_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu16ll");
    static Ui_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ui_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ui_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu16ll(Test_Ui_BFu0ll_BFu16ll, "Ui_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu16s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Ui_BFu0ll_BFu16s) C1{ Fi FL:0 Fs:16}



static void Test_Ui_BFu0ll_BFu16s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu16s");
    static Ui_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ui_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ui_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu16s(Test_Ui_BFu0ll_BFu16s, "Ui_BFu0ll_BFu16s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu17i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Ui_BFu0ll_BFu17i) C1{ Fi FL:0 Fi:17}



static void Test_Ui_BFu0ll_BFu17i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu17i");
    static Ui_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ui_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ui_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu17i(Test_Ui_BFu0ll_BFu17i, "Ui_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu17ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Ui_BFu0ll_BFu17ll) C1{ Fi FL:0 FL:17}



static void Test_Ui_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu17ll");
    static Ui_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ui_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ui_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu17ll(Test_Ui_BFu0ll_BFu17ll, "Ui_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu1c  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Ui_BFu0ll_BFu1c) C1{ Fi FL:0 Fc:1}



static void Test_Ui_BFu0ll_BFu1c()
{
  {
    init_simple_test("Ui_BFu0ll_BFu1c");
    static Ui_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ui_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu1c(Test_Ui_BFu0ll_BFu1c, "Ui_BFu0ll_BFu1c", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu1i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Ui_BFu0ll_BFu1i) C1{ Fi FL:0 Fi:1}



static void Test_Ui_BFu0ll_BFu1i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu1i");
    static Ui_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ui_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu1i(Test_Ui_BFu0ll_BFu1i, "Ui_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu1ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Ui_BFu0ll_BFu1ll) C1{ Fi FL:0 FL:1}



static void Test_Ui_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu1ll");
    static Ui_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ui_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu1ll(Test_Ui_BFu0ll_BFu1ll, "Ui_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu1s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Ui_BFu0ll_BFu1s) C1{ Fi FL:0 Fs:1}



static void Test_Ui_BFu0ll_BFu1s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu1s");
    static Ui_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ui_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu1s(Test_Ui_BFu0ll_BFu1s, "Ui_BFu0ll_BFu1s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu31i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Ui_BFu0ll_BFu31i) C1{ Fi FL:0 Fi:31}



static void Test_Ui_BFu0ll_BFu31i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu31i");
    static Ui_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ui_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ui_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu31i(Test_Ui_BFu0ll_BFu31i, "Ui_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu31ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Ui_BFu0ll_BFu31ll) C1{ Fi FL:0 FL:31}



static void Test_Ui_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu31ll");
    static Ui_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ui_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ui_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu31ll(Test_Ui_BFu0ll_BFu31ll, "Ui_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu32i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Ui_BFu0ll_BFu32i) C1{ Fi FL:0 Fi:32}



static void Test_Ui_BFu0ll_BFu32i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu32i");
    static Ui_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ui_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ui_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu32i(Test_Ui_BFu0ll_BFu32i, "Ui_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu32ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Ui_BFu0ll_BFu32ll) C1{ Fi FL:0 FL:32}



static void Test_Ui_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu32ll");
    static Ui_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ui_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ui_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu32ll(Test_Ui_BFu0ll_BFu32ll, "Ui_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu33  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Ui_BFu0ll_BFu33) C1{ Fi FL:0 FL:33}



static void Test_Ui_BFu0ll_BFu33()
{
  {
    init_simple_test("Ui_BFu0ll_BFu33");
    static Ui_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu33(Test_Ui_BFu0ll_BFu33, "Ui_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu7c  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Ui_BFu0ll_BFu7c) C1{ Fi FL:0 Fc:7}



static void Test_Ui_BFu0ll_BFu7c()
{
  {
    init_simple_test("Ui_BFu0ll_BFu7c");
    static Ui_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ui_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ui_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu7c(Test_Ui_BFu0ll_BFu7c, "Ui_BFu0ll_BFu7c", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu7i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Ui_BFu0ll_BFu7i) C1{ Fi FL:0 Fi:7}



static void Test_Ui_BFu0ll_BFu7i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu7i");
    static Ui_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ui_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ui_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu7i(Test_Ui_BFu0ll_BFu7i, "Ui_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu7ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Ui_BFu0ll_BFu7ll) C1{ Fi FL:0 FL:7}



static void Test_Ui_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu7ll");
    static Ui_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ui_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ui_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu7ll(Test_Ui_BFu0ll_BFu7ll, "Ui_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu7s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Ui_BFu0ll_BFu7s) C1{ Fi FL:0 Fs:7}



static void Test_Ui_BFu0ll_BFu7s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu7s");
    static Ui_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ui_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ui_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu7s(Test_Ui_BFu0ll_BFu7s, "Ui_BFu0ll_BFu7s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu8c  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Ui_BFu0ll_BFu8c) C1{ Fi FL:0 Fc:8}



static void Test_Ui_BFu0ll_BFu8c()
{
  {
    init_simple_test("Ui_BFu0ll_BFu8c");
    static Ui_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ui_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ui_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu8c(Test_Ui_BFu0ll_BFu8c, "Ui_BFu0ll_BFu8c", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu8i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Ui_BFu0ll_BFu8i) C1{ Fi FL:0 Fi:8}



static void Test_Ui_BFu0ll_BFu8i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu8i");
    static Ui_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ui_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ui_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu8i(Test_Ui_BFu0ll_BFu8i, "Ui_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu8ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Ui_BFu0ll_BFu8ll) C1{ Fi FL:0 FL:8}



static void Test_Ui_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu8ll");
    static Ui_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ui_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ui_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu8ll(Test_Ui_BFu0ll_BFu8ll, "Ui_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu8s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Ui_BFu0ll_BFu8s) C1{ Fi FL:0 Fs:8}



static void Test_Ui_BFu0ll_BFu8s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu8s");
    static Ui_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ui_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ui_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu8s(Test_Ui_BFu0ll_BFu8s, "Ui_BFu0ll_BFu8s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu9i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Ui_BFu0ll_BFu9i) C1{ Fi FL:0 Fi:9}



static void Test_Ui_BFu0ll_BFu9i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu9i");
    static Ui_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ui_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ui_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu9i(Test_Ui_BFu0ll_BFu9i, "Ui_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu9ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Ui_BFu0ll_BFu9ll) C1{ Fi FL:0 FL:9}



static void Test_Ui_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu9ll");
    static Ui_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ui_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ui_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu9ll(Test_Ui_BFu0ll_BFu9ll, "Ui_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_BFu9s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Ui_BFu0ll_BFu9s) C1{ Fi FL:0 Fs:9}



static void Test_Ui_BFu0ll_BFu9s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu9s");
    static Ui_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ui_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ui_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_BFu9s(Test_Ui_BFu0ll_BFu9s, "Ui_BFu0ll_BFu9s", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_C  {
  unsigned int v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Ui_BFu0ll_C) C1{ Fi FL:0 Fc}



static void Test_Ui_BFu0ll_C()
{
  {
    init_simple_test("Ui_BFu0ll_C");
    static Ui_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_C(Test_Ui_BFu0ll_C, "Ui_BFu0ll_C", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_D  {
  unsigned int v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Ui_BFu0ll_D) C1{ Fi FL:0 FL}



static void Test_Ui_BFu0ll_D()
{
  {
    init_simple_test("Ui_BFu0ll_D");
    static Ui_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_D(Test_Ui_BFu0ll_D, "Ui_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_F  {
  unsigned int v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Ui_BFu0ll_F) C1{ Fi FL:0 Fi}



static void Test_Ui_BFu0ll_F()
{
  {
    init_simple_test("Ui_BFu0ll_F");
    static Ui_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_F(Test_Ui_BFu0ll_F, "Ui_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_I  {
  unsigned int v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Ui_BFu0ll_I) C1{ Fi FL:0 Fi}



static void Test_Ui_BFu0ll_I()
{
  {
    init_simple_test("Ui_BFu0ll_I");
    static Ui_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_I(Test_Ui_BFu0ll_I, "Ui_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_Ip  {
  unsigned int v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Ui_BFu0ll_Ip) C1{ Fi FL:0 Fp}



static void Test_Ui_BFu0ll_Ip()
{
  {
    init_simple_test("Ui_BFu0ll_Ip");
    static Ui_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_Ip(Test_Ui_BFu0ll_Ip, "Ui_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_L  {
  unsigned int v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Ui_BFu0ll_L) C1{ Fi FL:0 FL}



static void Test_Ui_BFu0ll_L()
{
  {
    init_simple_test("Ui_BFu0ll_L");
    static Ui_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_L(Test_Ui_BFu0ll_L, "Ui_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_S  {
  unsigned int v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Ui_BFu0ll_S) C1{ Fi FL:0 Fs}



static void Test_Ui_BFu0ll_S()
{
  {
    init_simple_test("Ui_BFu0ll_S");
    static Ui_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_S(Test_Ui_BFu0ll_S, "Ui_BFu0ll_S", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_Uc  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Ui_BFu0ll_Uc) C1{ Fi FL:0 Fc}



static void Test_Ui_BFu0ll_Uc()
{
  {
    init_simple_test("Ui_BFu0ll_Uc");
    static Ui_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_Uc(Test_Ui_BFu0ll_Uc, "Ui_BFu0ll_Uc", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_Ui  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Ui_BFu0ll_Ui) C1{ Fi FL:0 Fi}



static void Test_Ui_BFu0ll_Ui()
{
  {
    init_simple_test("Ui_BFu0ll_Ui");
    static Ui_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_Ui(Test_Ui_BFu0ll_Ui, "Ui_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_Ul  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Ui_BFu0ll_Ul) C1{ Fi FL:0 FL}



static void Test_Ui_BFu0ll_Ul()
{
  {
    init_simple_test("Ui_BFu0ll_Ul");
    static Ui_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_Ul(Test_Ui_BFu0ll_Ul, "Ui_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_Us  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Ui_BFu0ll_Us) C1{ Fi FL:0 Fs}



static void Test_Ui_BFu0ll_Us()
{
  {
    init_simple_test("Ui_BFu0ll_Us");
    static Ui_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_Us(Test_Ui_BFu0ll_Us, "Ui_BFu0ll_Us", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0ll_Vp  {
  unsigned int v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Ui_BFu0ll_Vp) C1{ Fi FL:0 Fp}



static void Test_Ui_BFu0ll_Vp()
{
  {
    init_simple_test("Ui_BFu0ll_Vp");
    static Ui_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0ll_Vp(Test_Ui_BFu0ll_Vp, "Ui_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s  {
  unsigned int v1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0s) C1{ Fi Fs:0}



static void Test_Ui_BFu0s()
{
  {
    init_simple_test("Ui_BFu0s");
    static Ui_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0s(Test_Ui_BFu0s, "Ui_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu0c  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0s_BFu0c) C1{ Fi Fs:0 Fc:0}



static void Test_Ui_BFu0s_BFu0c()
{
  {
    init_simple_test("Ui_BFu0s_BFu0c");
    static Ui_BFu0s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu0c(Test_Ui_BFu0s_BFu0c, "Ui_BFu0s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu0i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0s_BFu0i) C1{ Fi Fs:0 Fi:0}



static void Test_Ui_BFu0s_BFu0i()
{
  {
    init_simple_test("Ui_BFu0s_BFu0i");
    static Ui_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu0i(Test_Ui_BFu0s_BFu0i, "Ui_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu0ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0s_BFu0ll) C1{ Fi Fs:0 FL:0}



static void Test_Ui_BFu0s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu0ll");
    static Ui_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu0ll(Test_Ui_BFu0s_BFu0ll, "Ui_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu0s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0s_BFu0s) C1{ Fi Fs:0 Fs:0}



static void Test_Ui_BFu0s_BFu0s()
{
  {
    init_simple_test("Ui_BFu0s_BFu0s");
    static Ui_BFu0s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu0s(Test_Ui_BFu0s_BFu0s, "Ui_BFu0s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu15i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Ui_BFu0s_BFu15i) C1{ Fi Fs:0 Fi:15}



static void Test_Ui_BFu0s_BFu15i()
{
  {
    init_simple_test("Ui_BFu0s_BFu15i");
    static Ui_BFu0s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu15i(Test_Ui_BFu0s_BFu15i, "Ui_BFu0s_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu15ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Ui_BFu0s_BFu15ll) C1{ Fi Fs:0 FL:15}



static void Test_Ui_BFu0s_BFu15ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu15ll");
    static Ui_BFu0s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu15ll(Test_Ui_BFu0s_BFu15ll, "Ui_BFu0s_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu15s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Ui_BFu0s_BFu15s) C1{ Fi Fs:0 Fs:15}



static void Test_Ui_BFu0s_BFu15s()
{
  {
    init_simple_test("Ui_BFu0s_BFu15s");
    static Ui_BFu0s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu15s(Test_Ui_BFu0s_BFu15s, "Ui_BFu0s_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu16i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Ui_BFu0s_BFu16i) C1{ Fi Fs:0 Fi:16}



static void Test_Ui_BFu0s_BFu16i()
{
  {
    init_simple_test("Ui_BFu0s_BFu16i");
    static Ui_BFu0s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu16i(Test_Ui_BFu0s_BFu16i, "Ui_BFu0s_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu16ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Ui_BFu0s_BFu16ll) C1{ Fi Fs:0 FL:16}



static void Test_Ui_BFu0s_BFu16ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu16ll");
    static Ui_BFu0s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu16ll(Test_Ui_BFu0s_BFu16ll, "Ui_BFu0s_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu16s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Ui_BFu0s_BFu16s) C1{ Fi Fs:0 Fs:16}



static void Test_Ui_BFu0s_BFu16s()
{
  {
    init_simple_test("Ui_BFu0s_BFu16s");
    static Ui_BFu0s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu16s(Test_Ui_BFu0s_BFu16s, "Ui_BFu0s_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu17i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Ui_BFu0s_BFu17i) C1{ Fi Fs:0 Fi:17}



static void Test_Ui_BFu0s_BFu17i()
{
  {
    init_simple_test("Ui_BFu0s_BFu17i");
    static Ui_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu17i(Test_Ui_BFu0s_BFu17i, "Ui_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu17ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Ui_BFu0s_BFu17ll) C1{ Fi Fs:0 FL:17}



static void Test_Ui_BFu0s_BFu17ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu17ll");
    static Ui_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu17ll(Test_Ui_BFu0s_BFu17ll, "Ui_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu1c  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Ui_BFu0s_BFu1c) C1{ Fi Fs:0 Fc:1}



static void Test_Ui_BFu0s_BFu1c()
{
  {
    init_simple_test("Ui_BFu0s_BFu1c");
    static Ui_BFu0s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu1c(Test_Ui_BFu0s_BFu1c, "Ui_BFu0s_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu1i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Ui_BFu0s_BFu1i) C1{ Fi Fs:0 Fi:1}



static void Test_Ui_BFu0s_BFu1i()
{
  {
    init_simple_test("Ui_BFu0s_BFu1i");
    static Ui_BFu0s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu1i(Test_Ui_BFu0s_BFu1i, "Ui_BFu0s_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu1ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Ui_BFu0s_BFu1ll) C1{ Fi Fs:0 FL:1}



static void Test_Ui_BFu0s_BFu1ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu1ll");
    static Ui_BFu0s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu1ll(Test_Ui_BFu0s_BFu1ll, "Ui_BFu0s_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu1s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Ui_BFu0s_BFu1s) C1{ Fi Fs:0 Fs:1}



static void Test_Ui_BFu0s_BFu1s()
{
  {
    init_simple_test("Ui_BFu0s_BFu1s");
    static Ui_BFu0s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu1s(Test_Ui_BFu0s_BFu1s, "Ui_BFu0s_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu31i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Ui_BFu0s_BFu31i) C1{ Fi Fs:0 Fi:31}



static void Test_Ui_BFu0s_BFu31i()
{
  {
    init_simple_test("Ui_BFu0s_BFu31i");
    static Ui_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu31i(Test_Ui_BFu0s_BFu31i, "Ui_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu31ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Ui_BFu0s_BFu31ll) C1{ Fi Fs:0 FL:31}



static void Test_Ui_BFu0s_BFu31ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu31ll");
    static Ui_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu31ll(Test_Ui_BFu0s_BFu31ll, "Ui_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu32i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Ui_BFu0s_BFu32i) C1{ Fi Fs:0 Fi:32}



static void Test_Ui_BFu0s_BFu32i()
{
  {
    init_simple_test("Ui_BFu0s_BFu32i");
    static Ui_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu32i(Test_Ui_BFu0s_BFu32i, "Ui_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu32ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Ui_BFu0s_BFu32ll) C1{ Fi Fs:0 FL:32}



static void Test_Ui_BFu0s_BFu32ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu32ll");
    static Ui_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu32ll(Test_Ui_BFu0s_BFu32ll, "Ui_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu33  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Ui_BFu0s_BFu33) C1{ Fi Fs:0 FL:33}



static void Test_Ui_BFu0s_BFu33()
{
  {
    init_simple_test("Ui_BFu0s_BFu33");
    static Ui_BFu0s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu0s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu33(Test_Ui_BFu0s_BFu33, "Ui_BFu0s_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu7c  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Ui_BFu0s_BFu7c) C1{ Fi Fs:0 Fc:7}



static void Test_Ui_BFu0s_BFu7c()
{
  {
    init_simple_test("Ui_BFu0s_BFu7c");
    static Ui_BFu0s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu7c(Test_Ui_BFu0s_BFu7c, "Ui_BFu0s_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu7i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Ui_BFu0s_BFu7i) C1{ Fi Fs:0 Fi:7}



static void Test_Ui_BFu0s_BFu7i()
{
  {
    init_simple_test("Ui_BFu0s_BFu7i");
    static Ui_BFu0s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu7i(Test_Ui_BFu0s_BFu7i, "Ui_BFu0s_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu7ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Ui_BFu0s_BFu7ll) C1{ Fi Fs:0 FL:7}



static void Test_Ui_BFu0s_BFu7ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu7ll");
    static Ui_BFu0s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu7ll(Test_Ui_BFu0s_BFu7ll, "Ui_BFu0s_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu7s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Ui_BFu0s_BFu7s) C1{ Fi Fs:0 Fs:7}



static void Test_Ui_BFu0s_BFu7s()
{
  {
    init_simple_test("Ui_BFu0s_BFu7s");
    static Ui_BFu0s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu7s(Test_Ui_BFu0s_BFu7s, "Ui_BFu0s_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu8c  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Ui_BFu0s_BFu8c) C1{ Fi Fs:0 Fc:8}



static void Test_Ui_BFu0s_BFu8c()
{
  {
    init_simple_test("Ui_BFu0s_BFu8c");
    static Ui_BFu0s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu8c(Test_Ui_BFu0s_BFu8c, "Ui_BFu0s_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu8i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Ui_BFu0s_BFu8i) C1{ Fi Fs:0 Fi:8}



static void Test_Ui_BFu0s_BFu8i()
{
  {
    init_simple_test("Ui_BFu0s_BFu8i");
    static Ui_BFu0s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu8i(Test_Ui_BFu0s_BFu8i, "Ui_BFu0s_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu8ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Ui_BFu0s_BFu8ll) C1{ Fi Fs:0 FL:8}



static void Test_Ui_BFu0s_BFu8ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu8ll");
    static Ui_BFu0s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu8ll(Test_Ui_BFu0s_BFu8ll, "Ui_BFu0s_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu8s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Ui_BFu0s_BFu8s) C1{ Fi Fs:0 Fs:8}



static void Test_Ui_BFu0s_BFu8s()
{
  {
    init_simple_test("Ui_BFu0s_BFu8s");
    static Ui_BFu0s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu8s(Test_Ui_BFu0s_BFu8s, "Ui_BFu0s_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu9i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Ui_BFu0s_BFu9i) C1{ Fi Fs:0 Fi:9}



static void Test_Ui_BFu0s_BFu9i()
{
  {
    init_simple_test("Ui_BFu0s_BFu9i");
    static Ui_BFu0s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu9i(Test_Ui_BFu0s_BFu9i, "Ui_BFu0s_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu9ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Ui_BFu0s_BFu9ll) C1{ Fi Fs:0 FL:9}



static void Test_Ui_BFu0s_BFu9ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu9ll");
    static Ui_BFu0s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu9ll(Test_Ui_BFu0s_BFu9ll, "Ui_BFu0s_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_BFu9s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Ui_BFu0s_BFu9s) C1{ Fi Fs:0 Fs:9}



static void Test_Ui_BFu0s_BFu9s()
{
  {
    init_simple_test("Ui_BFu0s_BFu9s");
    static Ui_BFu0s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_BFu9s(Test_Ui_BFu0s_BFu9s, "Ui_BFu0s_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_C  {
  unsigned int v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Ui_BFu0s_C) C1{ Fi Fs:0 Fc}



static void Test_Ui_BFu0s_C()
{
  {
    init_simple_test("Ui_BFu0s_C");
    static Ui_BFu0s_C lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_C)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_C.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_C(Test_Ui_BFu0s_C, "Ui_BFu0s_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_D  {
  unsigned int v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Ui_BFu0s_D) C1{ Fi Fs:0 FL}



static void Test_Ui_BFu0s_D()
{
  {
    init_simple_test("Ui_BFu0s_D");
    static Ui_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_D(Test_Ui_BFu0s_D, "Ui_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_F  {
  unsigned int v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Ui_BFu0s_F) C1{ Fi Fs:0 Fi}



static void Test_Ui_BFu0s_F()
{
  {
    init_simple_test("Ui_BFu0s_F");
    static Ui_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_F(Test_Ui_BFu0s_F, "Ui_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_I  {
  unsigned int v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Ui_BFu0s_I) C1{ Fi Fs:0 Fi}



static void Test_Ui_BFu0s_I()
{
  {
    init_simple_test("Ui_BFu0s_I");
    static Ui_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_I(Test_Ui_BFu0s_I, "Ui_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_Ip  {
  unsigned int v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Ui_BFu0s_Ip) C1{ Fi Fs:0 Fp}



static void Test_Ui_BFu0s_Ip()
{
  {
    init_simple_test("Ui_BFu0s_Ip");
    static Ui_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_Ip(Test_Ui_BFu0s_Ip, "Ui_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_L  {
  unsigned int v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Ui_BFu0s_L) C1{ Fi Fs:0 FL}



static void Test_Ui_BFu0s_L()
{
  {
    init_simple_test("Ui_BFu0s_L");
    static Ui_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_L(Test_Ui_BFu0s_L, "Ui_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_S  {
  unsigned int v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Ui_BFu0s_S) C1{ Fi Fs:0 Fs}



static void Test_Ui_BFu0s_S()
{
  {
    init_simple_test("Ui_BFu0s_S");
    static Ui_BFu0s_S lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_S)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_S.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_S(Test_Ui_BFu0s_S, "Ui_BFu0s_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_Uc  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Ui_BFu0s_Uc) C1{ Fi Fs:0 Fc}



static void Test_Ui_BFu0s_Uc()
{
  {
    init_simple_test("Ui_BFu0s_Uc");
    static Ui_BFu0s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_Uc(Test_Ui_BFu0s_Uc, "Ui_BFu0s_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_Ui  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Ui_BFu0s_Ui) C1{ Fi Fs:0 Fi}



static void Test_Ui_BFu0s_Ui()
{
  {
    init_simple_test("Ui_BFu0s_Ui");
    static Ui_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_Ui(Test_Ui_BFu0s_Ui, "Ui_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_Ul  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Ui_BFu0s_Ul) C1{ Fi Fs:0 FL}



static void Test_Ui_BFu0s_Ul()
{
  {
    init_simple_test("Ui_BFu0s_Ul");
    static Ui_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_Ul(Test_Ui_BFu0s_Ul, "Ui_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_Us  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Ui_BFu0s_Us) C1{ Fi Fs:0 Fs}



static void Test_Ui_BFu0s_Us()
{
  {
    init_simple_test("Ui_BFu0s_Us");
    static Ui_BFu0s_Us lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Us.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_Us(Test_Ui_BFu0s_Us, "Ui_BFu0s_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu0s_Vp  {
  unsigned int v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Ui_BFu0s_Vp) C1{ Fi Fs:0 Fp}



static void Test_Ui_BFu0s_Vp()
{
  {
    init_simple_test("Ui_BFu0s_Vp");
    static Ui_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vUi_BFu0s_Vp(Test_Ui_BFu0s_Vp, "Ui_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15i_BFu0c  {
  unsigned int v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Ui_BFu15i_BFu0c) C1{ Fi Fi:15 Fc:0}



static void Test_Ui_BFu15i_BFu0c()
{
  {
    init_simple_test("Ui_BFu15i_BFu0c");
    static Ui_BFu15i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu15i_BFu0c(Test_Ui_BFu15i_BFu0c, "Ui_BFu15i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15i_BFu0i  {
  unsigned int v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Ui_BFu15i_BFu0i) C1{ Fi Fi:15 Fi:0}



static void Test_Ui_BFu15i_BFu0i()
{
  {
    init_simple_test("Ui_BFu15i_BFu0i");
    static Ui_BFu15i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu15i_BFu0i(Test_Ui_BFu15i_BFu0i, "Ui_BFu15i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Ui_BFu15i_BFu0ll) C1{ Fi Fi:15 FL:0}



static void Test_Ui_BFu15i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu15i_BFu0ll");
    static Ui_BFu15i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu15i_BFu0ll(Test_Ui_BFu15i_BFu0ll, "Ui_BFu15i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15i_BFu0s  {
  unsigned int v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Ui_BFu15i_BFu0s) C1{ Fi Fi:15 Fs:0}



static void Test_Ui_BFu15i_BFu0s()
{
  {
    init_simple_test("Ui_BFu15i_BFu0s");
    static Ui_BFu15i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu15i_BFu0s(Test_Ui_BFu15i_BFu0s, "Ui_BFu15i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Ui_BFu15ll_BFu0c) C1{ Fi FL:15 Fc:0}



static void Test_Ui_BFu15ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu15ll_BFu0c");
    static Ui_BFu15ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu15ll_BFu0c(Test_Ui_BFu15ll_BFu0c, "Ui_BFu15ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Ui_BFu15ll_BFu0i) C1{ Fi FL:15 Fi:0}



static void Test_Ui_BFu15ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu15ll_BFu0i");
    static Ui_BFu15ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu15ll_BFu0i(Test_Ui_BFu15ll_BFu0i, "Ui_BFu15ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Ui_BFu15ll_BFu0ll) C1{ Fi FL:15 FL:0}



static void Test_Ui_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu15ll_BFu0ll");
    static Ui_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu15ll_BFu0ll(Test_Ui_BFu15ll_BFu0ll, "Ui_BFu15ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Ui_BFu15ll_BFu0s) C1{ Fi FL:15 Fs:0}



static void Test_Ui_BFu15ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu15ll_BFu0s");
    static Ui_BFu15ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu15ll_BFu0s(Test_Ui_BFu15ll_BFu0s, "Ui_BFu15ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15s_BFu0c  {
  unsigned int v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Ui_BFu15s_BFu0c) C1{ Fi Fs:15 Fc:0}



static void Test_Ui_BFu15s_BFu0c()
{
  {
    init_simple_test("Ui_BFu15s_BFu0c");
    static Ui_BFu15s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu15s_BFu0c(Test_Ui_BFu15s_BFu0c, "Ui_BFu15s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15s_BFu0i  {
  unsigned int v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Ui_BFu15s_BFu0i) C1{ Fi Fs:15 Fi:0}



static void Test_Ui_BFu15s_BFu0i()
{
  {
    init_simple_test("Ui_BFu15s_BFu0i");
    static Ui_BFu15s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu15s_BFu0i(Test_Ui_BFu15s_BFu0i, "Ui_BFu15s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Ui_BFu15s_BFu0ll) C1{ Fi Fs:15 FL:0}



static void Test_Ui_BFu15s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu15s_BFu0ll");
    static Ui_BFu15s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu15s_BFu0ll(Test_Ui_BFu15s_BFu0ll, "Ui_BFu15s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu15s_BFu0s  {
  unsigned int v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Ui_BFu15s_BFu0s) C1{ Fi Fs:15 Fs:0}



static void Test_Ui_BFu15s_BFu0s()
{
  {
    init_simple_test("Ui_BFu15s_BFu0s");
    static Ui_BFu15s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu15s_BFu0s(Test_Ui_BFu15s_BFu0s, "Ui_BFu15s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16i_BFu0c  {
  unsigned int v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Ui_BFu16i_BFu0c) C1{ Fi Fi:16 Fc:0}



static void Test_Ui_BFu16i_BFu0c()
{
  {
    init_simple_test("Ui_BFu16i_BFu0c");
    static Ui_BFu16i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu16i_BFu0c(Test_Ui_BFu16i_BFu0c, "Ui_BFu16i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16i_BFu0i  {
  unsigned int v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Ui_BFu16i_BFu0i) C1{ Fi Fi:16 Fi:0}



static void Test_Ui_BFu16i_BFu0i()
{
  {
    init_simple_test("Ui_BFu16i_BFu0i");
    static Ui_BFu16i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu16i_BFu0i(Test_Ui_BFu16i_BFu0i, "Ui_BFu16i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Ui_BFu16i_BFu0ll) C1{ Fi Fi:16 FL:0}



static void Test_Ui_BFu16i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu16i_BFu0ll");
    static Ui_BFu16i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu16i_BFu0ll(Test_Ui_BFu16i_BFu0ll, "Ui_BFu16i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16i_BFu0s  {
  unsigned int v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Ui_BFu16i_BFu0s) C1{ Fi Fi:16 Fs:0}



static void Test_Ui_BFu16i_BFu0s()
{
  {
    init_simple_test("Ui_BFu16i_BFu0s");
    static Ui_BFu16i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu16i_BFu0s(Test_Ui_BFu16i_BFu0s, "Ui_BFu16i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Ui_BFu16ll_BFu0c) C1{ Fi FL:16 Fc:0}



static void Test_Ui_BFu16ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu16ll_BFu0c");
    static Ui_BFu16ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu16ll_BFu0c(Test_Ui_BFu16ll_BFu0c, "Ui_BFu16ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Ui_BFu16ll_BFu0i) C1{ Fi FL:16 Fi:0}



static void Test_Ui_BFu16ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu16ll_BFu0i");
    static Ui_BFu16ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu16ll_BFu0i(Test_Ui_BFu16ll_BFu0i, "Ui_BFu16ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Ui_BFu16ll_BFu0ll) C1{ Fi FL:16 FL:0}



static void Test_Ui_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu16ll_BFu0ll");
    static Ui_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu16ll_BFu0ll(Test_Ui_BFu16ll_BFu0ll, "Ui_BFu16ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Ui_BFu16ll_BFu0s) C1{ Fi FL:16 Fs:0}



static void Test_Ui_BFu16ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu16ll_BFu0s");
    static Ui_BFu16ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu16ll_BFu0s(Test_Ui_BFu16ll_BFu0s, "Ui_BFu16ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16s_BFu0c  {
  unsigned int v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Ui_BFu16s_BFu0c) C1{ Fi Fs:16 Fc:0}



static void Test_Ui_BFu16s_BFu0c()
{
  {
    init_simple_test("Ui_BFu16s_BFu0c");
    static Ui_BFu16s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu16s_BFu0c(Test_Ui_BFu16s_BFu0c, "Ui_BFu16s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16s_BFu0i  {
  unsigned int v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Ui_BFu16s_BFu0i) C1{ Fi Fs:16 Fi:0}



static void Test_Ui_BFu16s_BFu0i()
{
  {
    init_simple_test("Ui_BFu16s_BFu0i");
    static Ui_BFu16s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu16s_BFu0i(Test_Ui_BFu16s_BFu0i, "Ui_BFu16s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Ui_BFu16s_BFu0ll) C1{ Fi Fs:16 FL:0}



static void Test_Ui_BFu16s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu16s_BFu0ll");
    static Ui_BFu16s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu16s_BFu0ll(Test_Ui_BFu16s_BFu0ll, "Ui_BFu16s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu16s_BFu0s  {
  unsigned int v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Ui_BFu16s_BFu0s) C1{ Fi Fs:16 Fs:0}



static void Test_Ui_BFu16s_BFu0s()
{
  {
    init_simple_test("Ui_BFu16s_BFu0s");
    static Ui_BFu16s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu16s_BFu0s(Test_Ui_BFu16s_BFu0s, "Ui_BFu16s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17i_BFu0c  {
  unsigned int v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Ui_BFu17i_BFu0c) C1{ Fi Fi:17 Fc:0}



static void Test_Ui_BFu17i_BFu0c()
{
  {
    init_simple_test("Ui_BFu17i_BFu0c");
    static Ui_BFu17i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu17i_BFu0c(Test_Ui_BFu17i_BFu0c, "Ui_BFu17i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17i_BFu0i  {
  unsigned int v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Ui_BFu17i_BFu0i) C1{ Fi Fi:17 Fi:0}



static void Test_Ui_BFu17i_BFu0i()
{
  {
    init_simple_test("Ui_BFu17i_BFu0i");
    static Ui_BFu17i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu17i_BFu0i(Test_Ui_BFu17i_BFu0i, "Ui_BFu17i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Ui_BFu17i_BFu0ll) C1{ Fi Fi:17 FL:0}



static void Test_Ui_BFu17i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu17i_BFu0ll");
    static Ui_BFu17i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu17i_BFu0ll(Test_Ui_BFu17i_BFu0ll, "Ui_BFu17i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17i_BFu0s  {
  unsigned int v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Ui_BFu17i_BFu0s) C1{ Fi Fi:17 Fs:0}



static void Test_Ui_BFu17i_BFu0s()
{
  {
    init_simple_test("Ui_BFu17i_BFu0s");
    static Ui_BFu17i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu17i_BFu0s(Test_Ui_BFu17i_BFu0s, "Ui_BFu17i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Ui_BFu17ll_BFu0c) C1{ Fi FL:17 Fc:0}



static void Test_Ui_BFu17ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu17ll_BFu0c");
    static Ui_BFu17ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu17ll_BFu0c(Test_Ui_BFu17ll_BFu0c, "Ui_BFu17ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Ui_BFu17ll_BFu0i) C1{ Fi FL:17 Fi:0}



static void Test_Ui_BFu17ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu17ll_BFu0i");
    static Ui_BFu17ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu17ll_BFu0i(Test_Ui_BFu17ll_BFu0i, "Ui_BFu17ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Ui_BFu17ll_BFu0ll) C1{ Fi FL:17 FL:0}



static void Test_Ui_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu17ll_BFu0ll");
    static Ui_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu17ll_BFu0ll(Test_Ui_BFu17ll_BFu0ll, "Ui_BFu17ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu17ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Ui_BFu17ll_BFu0s) C1{ Fi FL:17 Fs:0}



static void Test_Ui_BFu17ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu17ll_BFu0s");
    static Ui_BFu17ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu17ll_BFu0s(Test_Ui_BFu17ll_BFu0s, "Ui_BFu17ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1c_BFu0c  {
  unsigned int v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu1c_BFu0c) C1{ Fi Fc:1 Fc:0}



static void Test_Ui_BFu1c_BFu0c()
{
  {
    init_simple_test("Ui_BFu1c_BFu0c");
    static Ui_BFu1c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu1c_BFu0c(Test_Ui_BFu1c_BFu0c, "Ui_BFu1c_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1c_BFu0i  {
  unsigned int v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu1c_BFu0i) C1{ Fi Fc:1 Fi:0}



static void Test_Ui_BFu1c_BFu0i()
{
  {
    init_simple_test("Ui_BFu1c_BFu0i");
    static Ui_BFu1c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu1c_BFu0i(Test_Ui_BFu1c_BFu0i, "Ui_BFu1c_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1c_BFu0ll  {
  unsigned int v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu1c_BFu0ll) C1{ Fi Fc:1 FL:0}



static void Test_Ui_BFu1c_BFu0ll()
{
  {
    init_simple_test("Ui_BFu1c_BFu0ll");
    static Ui_BFu1c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu1c_BFu0ll(Test_Ui_BFu1c_BFu0ll, "Ui_BFu1c_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1c_BFu0s  {
  unsigned int v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu1c_BFu0s) C1{ Fi Fc:1 Fs:0}



static void Test_Ui_BFu1c_BFu0s()
{
  {
    init_simple_test("Ui_BFu1c_BFu0s");
    static Ui_BFu1c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu1c_BFu0s(Test_Ui_BFu1c_BFu0s, "Ui_BFu1c_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1i_BFu0c  {
  unsigned int v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu1i_BFu0c) C1{ Fi Fi:1 Fc:0}



static void Test_Ui_BFu1i_BFu0c()
{
  {
    init_simple_test("Ui_BFu1i_BFu0c");
    static Ui_BFu1i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu1i_BFu0c(Test_Ui_BFu1i_BFu0c, "Ui_BFu1i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1i_BFu0i  {
  unsigned int v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu1i_BFu0i) C1{ Fi Fi:1 Fi:0}



static void Test_Ui_BFu1i_BFu0i()
{
  {
    init_simple_test("Ui_BFu1i_BFu0i");
    static Ui_BFu1i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu1i_BFu0i(Test_Ui_BFu1i_BFu0i, "Ui_BFu1i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu1i_BFu0ll) C1{ Fi Fi:1 FL:0}



static void Test_Ui_BFu1i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu1i_BFu0ll");
    static Ui_BFu1i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu1i_BFu0ll(Test_Ui_BFu1i_BFu0ll, "Ui_BFu1i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1i_BFu0s  {
  unsigned int v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu1i_BFu0s) C1{ Fi Fi:1 Fs:0}



static void Test_Ui_BFu1i_BFu0s()
{
  {
    init_simple_test("Ui_BFu1i_BFu0s");
    static Ui_BFu1i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu1i_BFu0s(Test_Ui_BFu1i_BFu0s, "Ui_BFu1i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu1ll_BFu0c) C1{ Fi FL:1 Fc:0}



static void Test_Ui_BFu1ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu1ll_BFu0c");
    static Ui_BFu1ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu1ll_BFu0c(Test_Ui_BFu1ll_BFu0c, "Ui_BFu1ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu1ll_BFu0i) C1{ Fi FL:1 Fi:0}



static void Test_Ui_BFu1ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu1ll_BFu0i");
    static Ui_BFu1ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu1ll_BFu0i(Test_Ui_BFu1ll_BFu0i, "Ui_BFu1ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu1ll_BFu0ll) C1{ Fi FL:1 FL:0}



static void Test_Ui_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu1ll_BFu0ll");
    static Ui_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu1ll_BFu0ll(Test_Ui_BFu1ll_BFu0ll, "Ui_BFu1ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu1ll_BFu0s) C1{ Fi FL:1 Fs:0}



static void Test_Ui_BFu1ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu1ll_BFu0s");
    static Ui_BFu1ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu1ll_BFu0s(Test_Ui_BFu1ll_BFu0s, "Ui_BFu1ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1s_BFu0c  {
  unsigned int v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu1s_BFu0c) C1{ Fi Fs:1 Fc:0}



static void Test_Ui_BFu1s_BFu0c()
{
  {
    init_simple_test("Ui_BFu1s_BFu0c");
    static Ui_BFu1s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu1s_BFu0c(Test_Ui_BFu1s_BFu0c, "Ui_BFu1s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1s_BFu0i  {
  unsigned int v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu1s_BFu0i) C1{ Fi Fs:1 Fi:0}



static void Test_Ui_BFu1s_BFu0i()
{
  {
    init_simple_test("Ui_BFu1s_BFu0i");
    static Ui_BFu1s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu1s_BFu0i(Test_Ui_BFu1s_BFu0i, "Ui_BFu1s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu1s_BFu0ll) C1{ Fi Fs:1 FL:0}



static void Test_Ui_BFu1s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu1s_BFu0ll");
    static Ui_BFu1s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu1s_BFu0ll(Test_Ui_BFu1s_BFu0ll, "Ui_BFu1s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu1s_BFu0s  {
  unsigned int v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu1s_BFu0s) C1{ Fi Fs:1 Fs:0}



static void Test_Ui_BFu1s_BFu0s()
{
  {
    init_simple_test("Ui_BFu1s_BFu0s");
    static Ui_BFu1s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu1s_BFu0s(Test_Ui_BFu1s_BFu0s, "Ui_BFu1s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31i_BFu0c  {
  unsigned int v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Ui_BFu31i_BFu0c) C1{ Fi Fi:31 Fc:0}



static void Test_Ui_BFu31i_BFu0c()
{
  {
    init_simple_test("Ui_BFu31i_BFu0c");
    static Ui_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu31i_BFu0c(Test_Ui_BFu31i_BFu0c, "Ui_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31i_BFu0i  {
  unsigned int v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Ui_BFu31i_BFu0i) C1{ Fi Fi:31 Fi:0}



static void Test_Ui_BFu31i_BFu0i()
{
  {
    init_simple_test("Ui_BFu31i_BFu0i");
    static Ui_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu31i_BFu0i(Test_Ui_BFu31i_BFu0i, "Ui_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Ui_BFu31i_BFu0ll) C1{ Fi Fi:31 FL:0}



static void Test_Ui_BFu31i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu31i_BFu0ll");
    static Ui_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu31i_BFu0ll(Test_Ui_BFu31i_BFu0ll, "Ui_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31i_BFu0s  {
  unsigned int v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Ui_BFu31i_BFu0s) C1{ Fi Fi:31 Fs:0}



static void Test_Ui_BFu31i_BFu0s()
{
  {
    init_simple_test("Ui_BFu31i_BFu0s");
    static Ui_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu31i_BFu0s(Test_Ui_BFu31i_BFu0s, "Ui_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Ui_BFu31ll_BFu0c) C1{ Fi FL:31 Fc:0}



static void Test_Ui_BFu31ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu31ll_BFu0c");
    static Ui_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu31ll_BFu0c(Test_Ui_BFu31ll_BFu0c, "Ui_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Ui_BFu31ll_BFu0i) C1{ Fi FL:31 Fi:0}



static void Test_Ui_BFu31ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu31ll_BFu0i");
    static Ui_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu31ll_BFu0i(Test_Ui_BFu31ll_BFu0i, "Ui_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Ui_BFu31ll_BFu0ll) C1{ Fi FL:31 FL:0}



static void Test_Ui_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu31ll_BFu0ll");
    static Ui_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu31ll_BFu0ll(Test_Ui_BFu31ll_BFu0ll, "Ui_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu31ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Ui_BFu31ll_BFu0s) C1{ Fi FL:31 Fs:0}



static void Test_Ui_BFu31ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu31ll_BFu0s");
    static Ui_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu31ll_BFu0s(Test_Ui_BFu31ll_BFu0s, "Ui_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32i_BFu0c  {
  unsigned int v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Ui_BFu32i_BFu0c) C1{ Fi Fi:32 Fc:0}



static void Test_Ui_BFu32i_BFu0c()
{
  {
    init_simple_test("Ui_BFu32i_BFu0c");
    static Ui_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu32i_BFu0c(Test_Ui_BFu32i_BFu0c, "Ui_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32i_BFu0i  {
  unsigned int v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Ui_BFu32i_BFu0i) C1{ Fi Fi:32 Fi:0}



static void Test_Ui_BFu32i_BFu0i()
{
  {
    init_simple_test("Ui_BFu32i_BFu0i");
    static Ui_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu32i_BFu0i(Test_Ui_BFu32i_BFu0i, "Ui_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Ui_BFu32i_BFu0ll) C1{ Fi Fi:32 FL:0}



static void Test_Ui_BFu32i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu32i_BFu0ll");
    static Ui_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu32i_BFu0ll(Test_Ui_BFu32i_BFu0ll, "Ui_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32i_BFu0s  {
  unsigned int v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Ui_BFu32i_BFu0s) C1{ Fi Fi:32 Fs:0}



static void Test_Ui_BFu32i_BFu0s()
{
  {
    init_simple_test("Ui_BFu32i_BFu0s");
    static Ui_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu32i_BFu0s(Test_Ui_BFu32i_BFu0s, "Ui_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Ui_BFu32ll_BFu0c) C1{ Fi FL:32 Fc:0}



static void Test_Ui_BFu32ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu32ll_BFu0c");
    static Ui_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu32ll_BFu0c(Test_Ui_BFu32ll_BFu0c, "Ui_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Ui_BFu32ll_BFu0i) C1{ Fi FL:32 Fi:0}



static void Test_Ui_BFu32ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu32ll_BFu0i");
    static Ui_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu32ll_BFu0i(Test_Ui_BFu32ll_BFu0i, "Ui_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Ui_BFu32ll_BFu0ll) C1{ Fi FL:32 FL:0}



static void Test_Ui_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu32ll_BFu0ll");
    static Ui_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu32ll_BFu0ll(Test_Ui_BFu32ll_BFu0ll, "Ui_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu32ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Ui_BFu32ll_BFu0s) C1{ Fi FL:32 Fs:0}



static void Test_Ui_BFu32ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu32ll_BFu0s");
    static Ui_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu32ll_BFu0s(Test_Ui_BFu32ll_BFu0s, "Ui_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu33_BFu0c  {
  unsigned int v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Ui_BFu33_BFu0c) C1{ Fi FL:33 Fc:0}



static void Test_Ui_BFu33_BFu0c()
{
  {
    init_simple_test("Ui_BFu33_BFu0c");
    static Ui_BFu33_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu33_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu33_BFu0c(Test_Ui_BFu33_BFu0c, "Ui_BFu33_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu33_BFu0i  {
  unsigned int v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Ui_BFu33_BFu0i) C1{ Fi FL:33 Fi:0}



static void Test_Ui_BFu33_BFu0i()
{
  {
    init_simple_test("Ui_BFu33_BFu0i");
    static Ui_BFu33_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu33_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu33_BFu0i(Test_Ui_BFu33_BFu0i, "Ui_BFu33_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu33_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Ui_BFu33_BFu0ll) C1{ Fi FL:33 FL:0}



static void Test_Ui_BFu33_BFu0ll()
{
  {
    init_simple_test("Ui_BFu33_BFu0ll");
    static Ui_BFu33_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu33_BFu0ll(Test_Ui_BFu33_BFu0ll, "Ui_BFu33_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu33_BFu0s  {
  unsigned int v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Ui_BFu33_BFu0s) C1{ Fi FL:33 Fs:0}



static void Test_Ui_BFu33_BFu0s()
{
  {
    init_simple_test("Ui_BFu33_BFu0s");
    static Ui_BFu33_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu33_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu33_BFu0s(Test_Ui_BFu33_BFu0s, "Ui_BFu33_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7c_BFu0c  {
  unsigned int v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Ui_BFu7c_BFu0c) C1{ Fi Fc:7 Fc:0}



static void Test_Ui_BFu7c_BFu0c()
{
  {
    init_simple_test("Ui_BFu7c_BFu0c");
    static Ui_BFu7c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu7c_BFu0c(Test_Ui_BFu7c_BFu0c, "Ui_BFu7c_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7c_BFu0i  {
  unsigned int v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Ui_BFu7c_BFu0i) C1{ Fi Fc:7 Fi:0}



static void Test_Ui_BFu7c_BFu0i()
{
  {
    init_simple_test("Ui_BFu7c_BFu0i");
    static Ui_BFu7c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu7c_BFu0i(Test_Ui_BFu7c_BFu0i, "Ui_BFu7c_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7c_BFu0ll  {
  unsigned int v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Ui_BFu7c_BFu0ll) C1{ Fi Fc:7 FL:0}



static void Test_Ui_BFu7c_BFu0ll()
{
  {
    init_simple_test("Ui_BFu7c_BFu0ll");
    static Ui_BFu7c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu7c_BFu0ll(Test_Ui_BFu7c_BFu0ll, "Ui_BFu7c_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7c_BFu0s  {
  unsigned int v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Ui_BFu7c_BFu0s) C1{ Fi Fc:7 Fs:0}



static void Test_Ui_BFu7c_BFu0s()
{
  {
    init_simple_test("Ui_BFu7c_BFu0s");
    static Ui_BFu7c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu7c_BFu0s(Test_Ui_BFu7c_BFu0s, "Ui_BFu7c_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7i_BFu0c  {
  unsigned int v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Ui_BFu7i_BFu0c) C1{ Fi Fi:7 Fc:0}



static void Test_Ui_BFu7i_BFu0c()
{
  {
    init_simple_test("Ui_BFu7i_BFu0c");
    static Ui_BFu7i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu7i_BFu0c(Test_Ui_BFu7i_BFu0c, "Ui_BFu7i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7i_BFu0i  {
  unsigned int v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Ui_BFu7i_BFu0i) C1{ Fi Fi:7 Fi:0}



static void Test_Ui_BFu7i_BFu0i()
{
  {
    init_simple_test("Ui_BFu7i_BFu0i");
    static Ui_BFu7i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu7i_BFu0i(Test_Ui_BFu7i_BFu0i, "Ui_BFu7i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Ui_BFu7i_BFu0ll) C1{ Fi Fi:7 FL:0}



static void Test_Ui_BFu7i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu7i_BFu0ll");
    static Ui_BFu7i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu7i_BFu0ll(Test_Ui_BFu7i_BFu0ll, "Ui_BFu7i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7i_BFu0s  {
  unsigned int v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Ui_BFu7i_BFu0s) C1{ Fi Fi:7 Fs:0}



static void Test_Ui_BFu7i_BFu0s()
{
  {
    init_simple_test("Ui_BFu7i_BFu0s");
    static Ui_BFu7i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu7i_BFu0s(Test_Ui_BFu7i_BFu0s, "Ui_BFu7i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Ui_BFu7ll_BFu0c) C1{ Fi FL:7 Fc:0}



static void Test_Ui_BFu7ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu7ll_BFu0c");
    static Ui_BFu7ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu7ll_BFu0c(Test_Ui_BFu7ll_BFu0c, "Ui_BFu7ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Ui_BFu7ll_BFu0i) C1{ Fi FL:7 Fi:0}



static void Test_Ui_BFu7ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu7ll_BFu0i");
    static Ui_BFu7ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu7ll_BFu0i(Test_Ui_BFu7ll_BFu0i, "Ui_BFu7ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Ui_BFu7ll_BFu0ll) C1{ Fi FL:7 FL:0}



static void Test_Ui_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu7ll_BFu0ll");
    static Ui_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu7ll_BFu0ll(Test_Ui_BFu7ll_BFu0ll, "Ui_BFu7ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Ui_BFu7ll_BFu0s) C1{ Fi FL:7 Fs:0}



static void Test_Ui_BFu7ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu7ll_BFu0s");
    static Ui_BFu7ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu7ll_BFu0s(Test_Ui_BFu7ll_BFu0s, "Ui_BFu7ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7s_BFu0c  {
  unsigned int v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Ui_BFu7s_BFu0c) C1{ Fi Fs:7 Fc:0}



static void Test_Ui_BFu7s_BFu0c()
{
  {
    init_simple_test("Ui_BFu7s_BFu0c");
    static Ui_BFu7s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu7s_BFu0c(Test_Ui_BFu7s_BFu0c, "Ui_BFu7s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7s_BFu0i  {
  unsigned int v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Ui_BFu7s_BFu0i) C1{ Fi Fs:7 Fi:0}



static void Test_Ui_BFu7s_BFu0i()
{
  {
    init_simple_test("Ui_BFu7s_BFu0i");
    static Ui_BFu7s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu7s_BFu0i(Test_Ui_BFu7s_BFu0i, "Ui_BFu7s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Ui_BFu7s_BFu0ll) C1{ Fi Fs:7 FL:0}



static void Test_Ui_BFu7s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu7s_BFu0ll");
    static Ui_BFu7s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu7s_BFu0ll(Test_Ui_BFu7s_BFu0ll, "Ui_BFu7s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu7s_BFu0s  {
  unsigned int v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Ui_BFu7s_BFu0s) C1{ Fi Fs:7 Fs:0}



static void Test_Ui_BFu7s_BFu0s()
{
  {
    init_simple_test("Ui_BFu7s_BFu0s");
    static Ui_BFu7s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu7s_BFu0s(Test_Ui_BFu7s_BFu0s, "Ui_BFu7s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8c_BFu0c  {
  unsigned int v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Ui_BFu8c_BFu0c) C1{ Fi Fc:8 Fc:0}



static void Test_Ui_BFu8c_BFu0c()
{
  {
    init_simple_test("Ui_BFu8c_BFu0c");
    static Ui_BFu8c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu8c_BFu0c(Test_Ui_BFu8c_BFu0c, "Ui_BFu8c_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8c_BFu0i  {
  unsigned int v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Ui_BFu8c_BFu0i) C1{ Fi Fc:8 Fi:0}



static void Test_Ui_BFu8c_BFu0i()
{
  {
    init_simple_test("Ui_BFu8c_BFu0i");
    static Ui_BFu8c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu8c_BFu0i(Test_Ui_BFu8c_BFu0i, "Ui_BFu8c_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8c_BFu0ll  {
  unsigned int v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Ui_BFu8c_BFu0ll) C1{ Fi Fc:8 FL:0}



static void Test_Ui_BFu8c_BFu0ll()
{
  {
    init_simple_test("Ui_BFu8c_BFu0ll");
    static Ui_BFu8c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu8c_BFu0ll(Test_Ui_BFu8c_BFu0ll, "Ui_BFu8c_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8c_BFu0s  {
  unsigned int v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Ui_BFu8c_BFu0s) C1{ Fi Fc:8 Fs:0}



static void Test_Ui_BFu8c_BFu0s()
{
  {
    init_simple_test("Ui_BFu8c_BFu0s");
    static Ui_BFu8c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu8c_BFu0s(Test_Ui_BFu8c_BFu0s, "Ui_BFu8c_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8i_BFu0c  {
  unsigned int v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Ui_BFu8i_BFu0c) C1{ Fi Fi:8 Fc:0}



static void Test_Ui_BFu8i_BFu0c()
{
  {
    init_simple_test("Ui_BFu8i_BFu0c");
    static Ui_BFu8i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu8i_BFu0c(Test_Ui_BFu8i_BFu0c, "Ui_BFu8i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8i_BFu0i  {
  unsigned int v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Ui_BFu8i_BFu0i) C1{ Fi Fi:8 Fi:0}



static void Test_Ui_BFu8i_BFu0i()
{
  {
    init_simple_test("Ui_BFu8i_BFu0i");
    static Ui_BFu8i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu8i_BFu0i(Test_Ui_BFu8i_BFu0i, "Ui_BFu8i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Ui_BFu8i_BFu0ll) C1{ Fi Fi:8 FL:0}



static void Test_Ui_BFu8i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu8i_BFu0ll");
    static Ui_BFu8i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu8i_BFu0ll(Test_Ui_BFu8i_BFu0ll, "Ui_BFu8i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8i_BFu0s  {
  unsigned int v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Ui_BFu8i_BFu0s) C1{ Fi Fi:8 Fs:0}



static void Test_Ui_BFu8i_BFu0s()
{
  {
    init_simple_test("Ui_BFu8i_BFu0s");
    static Ui_BFu8i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu8i_BFu0s(Test_Ui_BFu8i_BFu0s, "Ui_BFu8i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Ui_BFu8ll_BFu0c) C1{ Fi FL:8 Fc:0}



static void Test_Ui_BFu8ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu8ll_BFu0c");
    static Ui_BFu8ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu8ll_BFu0c(Test_Ui_BFu8ll_BFu0c, "Ui_BFu8ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Ui_BFu8ll_BFu0i) C1{ Fi FL:8 Fi:0}



static void Test_Ui_BFu8ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu8ll_BFu0i");
    static Ui_BFu8ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu8ll_BFu0i(Test_Ui_BFu8ll_BFu0i, "Ui_BFu8ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Ui_BFu8ll_BFu0ll) C1{ Fi FL:8 FL:0}



static void Test_Ui_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu8ll_BFu0ll");
    static Ui_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu8ll_BFu0ll(Test_Ui_BFu8ll_BFu0ll, "Ui_BFu8ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Ui_BFu8ll_BFu0s) C1{ Fi FL:8 Fs:0}



static void Test_Ui_BFu8ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu8ll_BFu0s");
    static Ui_BFu8ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu8ll_BFu0s(Test_Ui_BFu8ll_BFu0s, "Ui_BFu8ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8s_BFu0c  {
  unsigned int v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Ui_BFu8s_BFu0c) C1{ Fi Fs:8 Fc:0}



static void Test_Ui_BFu8s_BFu0c()
{
  {
    init_simple_test("Ui_BFu8s_BFu0c");
    static Ui_BFu8s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu8s_BFu0c(Test_Ui_BFu8s_BFu0c, "Ui_BFu8s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8s_BFu0i  {
  unsigned int v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Ui_BFu8s_BFu0i) C1{ Fi Fs:8 Fi:0}



static void Test_Ui_BFu8s_BFu0i()
{
  {
    init_simple_test("Ui_BFu8s_BFu0i");
    static Ui_BFu8s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu8s_BFu0i(Test_Ui_BFu8s_BFu0i, "Ui_BFu8s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Ui_BFu8s_BFu0ll) C1{ Fi Fs:8 FL:0}



static void Test_Ui_BFu8s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu8s_BFu0ll");
    static Ui_BFu8s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu8s_BFu0ll(Test_Ui_BFu8s_BFu0ll, "Ui_BFu8s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu8s_BFu0s  {
  unsigned int v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Ui_BFu8s_BFu0s) C1{ Fi Fs:8 Fs:0}



static void Test_Ui_BFu8s_BFu0s()
{
  {
    init_simple_test("Ui_BFu8s_BFu0s");
    static Ui_BFu8s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu8s_BFu0s(Test_Ui_BFu8s_BFu0s, "Ui_BFu8s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9i_BFu0c  {
  unsigned int v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Ui_BFu9i_BFu0c) C1{ Fi Fi:9 Fc:0}



static void Test_Ui_BFu9i_BFu0c()
{
  {
    init_simple_test("Ui_BFu9i_BFu0c");
    static Ui_BFu9i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu9i_BFu0c(Test_Ui_BFu9i_BFu0c, "Ui_BFu9i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9i_BFu0i  {
  unsigned int v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Ui_BFu9i_BFu0i) C1{ Fi Fi:9 Fi:0}



static void Test_Ui_BFu9i_BFu0i()
{
  {
    init_simple_test("Ui_BFu9i_BFu0i");
    static Ui_BFu9i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu9i_BFu0i(Test_Ui_BFu9i_BFu0i, "Ui_BFu9i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Ui_BFu9i_BFu0ll) C1{ Fi Fi:9 FL:0}



static void Test_Ui_BFu9i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu9i_BFu0ll");
    static Ui_BFu9i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu9i_BFu0ll(Test_Ui_BFu9i_BFu0ll, "Ui_BFu9i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9i_BFu0s  {
  unsigned int v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Ui_BFu9i_BFu0s) C1{ Fi Fi:9 Fs:0}



static void Test_Ui_BFu9i_BFu0s()
{
  {
    init_simple_test("Ui_BFu9i_BFu0s");
    static Ui_BFu9i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu9i_BFu0s(Test_Ui_BFu9i_BFu0s, "Ui_BFu9i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Ui_BFu9ll_BFu0c) C1{ Fi FL:9 Fc:0}



static void Test_Ui_BFu9ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu9ll_BFu0c");
    static Ui_BFu9ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu9ll_BFu0c(Test_Ui_BFu9ll_BFu0c, "Ui_BFu9ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Ui_BFu9ll_BFu0i) C1{ Fi FL:9 Fi:0}



static void Test_Ui_BFu9ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu9ll_BFu0i");
    static Ui_BFu9ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu9ll_BFu0i(Test_Ui_BFu9ll_BFu0i, "Ui_BFu9ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Ui_BFu9ll_BFu0ll) C1{ Fi FL:9 FL:0}



static void Test_Ui_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu9ll_BFu0ll");
    static Ui_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu9ll_BFu0ll(Test_Ui_BFu9ll_BFu0ll, "Ui_BFu9ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Ui_BFu9ll_BFu0s) C1{ Fi FL:9 Fs:0}



static void Test_Ui_BFu9ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu9ll_BFu0s");
    static Ui_BFu9ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu9ll_BFu0s(Test_Ui_BFu9ll_BFu0s, "Ui_BFu9ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9s_BFu0c  {
  unsigned int v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Ui_BFu9s_BFu0c) C1{ Fi Fs:9 Fc:0}



static void Test_Ui_BFu9s_BFu0c()
{
  {
    init_simple_test("Ui_BFu9s_BFu0c");
    static Ui_BFu9s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vUi_BFu9s_BFu0c(Test_Ui_BFu9s_BFu0c, "Ui_BFu9s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9s_BFu0i  {
  unsigned int v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Ui_BFu9s_BFu0i) C1{ Fi Fs:9 Fi:0}



static void Test_Ui_BFu9s_BFu0i()
{
  {
    init_simple_test("Ui_BFu9s_BFu0i");
    static Ui_BFu9s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vUi_BFu9s_BFu0i(Test_Ui_BFu9s_BFu0i, "Ui_BFu9s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Ui_BFu9s_BFu0ll) C1{ Fi Fs:9 FL:0}



static void Test_Ui_BFu9s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu9s_BFu0ll");
    static Ui_BFu9s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUi_BFu9s_BFu0ll(Test_Ui_BFu9s_BFu0ll, "Ui_BFu9s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_BFu9s_BFu0s  {
  unsigned int v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Ui_BFu9s_BFu0s) C1{ Fi Fs:9 Fs:0}



static void Test_Ui_BFu9s_BFu0s()
{
  {
    init_simple_test("Ui_BFu9s_BFu0s");
    static Ui_BFu9s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vUi_BFu9s_BFu0s(Test_Ui_BFu9s_BFu0s, "Ui_BFu9s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_C_BFu0c  {
  unsigned int v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Ui_C_BFu0c) C1{ Fi Fc Fc:0}



static void Test_Ui_C_BFu0c()
{
  {
    init_simple_test("Ui_C_BFu0c");
    static Ui_C_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_C_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_C_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_C_BFu0c(Test_Ui_C_BFu0c, "Ui_C_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_C_BFu0i  {
  unsigned int v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Ui_C_BFu0i) C1{ Fi Fc Fi:0}



static void Test_Ui_C_BFu0i()
{
  {
    init_simple_test("Ui_C_BFu0i");
    static Ui_C_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_C_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_C_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_C_BFu0i(Test_Ui_C_BFu0i, "Ui_C_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_C_BFu0ll  {
  unsigned int v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Ui_C_BFu0ll) C1{ Fi Fc FL:0}



static void Test_Ui_C_BFu0ll()
{
  {
    init_simple_test("Ui_C_BFu0ll");
    static Ui_C_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_C_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_C_BFu0ll(Test_Ui_C_BFu0ll, "Ui_C_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_C_BFu0s  {
  unsigned int v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Ui_C_BFu0s) C1{ Fi Fc Fs:0}



static void Test_Ui_C_BFu0s()
{
  {
    init_simple_test("Ui_C_BFu0s");
    static Ui_C_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_C_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_C_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_C_BFu0s(Test_Ui_C_BFu0s, "Ui_C_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_D_BFu0c  {
  unsigned int v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Ui_D_BFu0c) C1{ Fi FL Fc:0}



static void Test_Ui_D_BFu0c()
{
  {
    init_simple_test("Ui_D_BFu0c");
    static Ui_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_D_BFu0c(Test_Ui_D_BFu0c, "Ui_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_D_BFu0i  {
  unsigned int v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Ui_D_BFu0i) C1{ Fi FL Fi:0}



static void Test_Ui_D_BFu0i()
{
  {
    init_simple_test("Ui_D_BFu0i");
    static Ui_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_D_BFu0i(Test_Ui_D_BFu0i, "Ui_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_D_BFu0ll  {
  unsigned int v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Ui_D_BFu0ll) C1{ Fi FL FL:0}



static void Test_Ui_D_BFu0ll()
{
  {
    init_simple_test("Ui_D_BFu0ll");
    static Ui_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_D_BFu0ll(Test_Ui_D_BFu0ll, "Ui_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_D_BFu0s  {
  unsigned int v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Ui_D_BFu0s) C1{ Fi FL Fs:0}



static void Test_Ui_D_BFu0s()
{
  {
    init_simple_test("Ui_D_BFu0s");
    static Ui_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_D_BFu0s(Test_Ui_D_BFu0s, "Ui_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_F_BFu0c  {
  unsigned int v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Ui_F_BFu0c) C1{ Fi[2] Fc:0}



static void Test_Ui_F_BFu0c()
{
  {
    init_simple_test("Ui_F_BFu0c");
    static Ui_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_F_BFu0c(Test_Ui_F_BFu0c, "Ui_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_F_BFu0i  {
  unsigned int v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Ui_F_BFu0i) C1{ Fi[2] Fi:0}



static void Test_Ui_F_BFu0i()
{
  {
    init_simple_test("Ui_F_BFu0i");
    static Ui_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_F_BFu0i(Test_Ui_F_BFu0i, "Ui_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_F_BFu0ll  {
  unsigned int v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Ui_F_BFu0ll) C1{ Fi[2] FL:0}



static void Test_Ui_F_BFu0ll()
{
  {
    init_simple_test("Ui_F_BFu0ll");
    static Ui_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_F_BFu0ll(Test_Ui_F_BFu0ll, "Ui_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_F_BFu0s  {
  unsigned int v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Ui_F_BFu0s) C1{ Fi[2] Fs:0}



static void Test_Ui_F_BFu0s()
{
  {
    init_simple_test("Ui_F_BFu0s");
    static Ui_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_F_BFu0s(Test_Ui_F_BFu0s, "Ui_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_I_BFu0c  {
  unsigned int v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Ui_I_BFu0c) C1{ Fi[2] Fc:0}



static void Test_Ui_I_BFu0c()
{
  {
    init_simple_test("Ui_I_BFu0c");
    static Ui_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_I_BFu0c(Test_Ui_I_BFu0c, "Ui_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_I_BFu0i  {
  unsigned int v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Ui_I_BFu0i) C1{ Fi[2] Fi:0}



static void Test_Ui_I_BFu0i()
{
  {
    init_simple_test("Ui_I_BFu0i");
    static Ui_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_I_BFu0i(Test_Ui_I_BFu0i, "Ui_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_I_BFu0ll  {
  unsigned int v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Ui_I_BFu0ll) C1{ Fi[2] FL:0}



static void Test_Ui_I_BFu0ll()
{
  {
    init_simple_test("Ui_I_BFu0ll");
    static Ui_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_I_BFu0ll(Test_Ui_I_BFu0ll, "Ui_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_I_BFu0s  {
  unsigned int v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Ui_I_BFu0s) C1{ Fi[2] Fs:0}



static void Test_Ui_I_BFu0s()
{
  {
    init_simple_test("Ui_I_BFu0s");
    static Ui_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_I_BFu0s(Test_Ui_I_BFu0s, "Ui_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ip_BFu0c  {
  unsigned int v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Ui_Ip_BFu0c) C1{ Fi Fp Fc:0}



static void Test_Ui_Ip_BFu0c()
{
  {
    init_simple_test("Ui_Ip_BFu0c");
    static Ui_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_Ip_BFu0c(Test_Ui_Ip_BFu0c, "Ui_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ip_BFu0i  {
  unsigned int v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Ui_Ip_BFu0i) C1{ Fi Fp Fi:0}



static void Test_Ui_Ip_BFu0i()
{
  {
    init_simple_test("Ui_Ip_BFu0i");
    static Ui_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_Ip_BFu0i(Test_Ui_Ip_BFu0i, "Ui_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ip_BFu0ll  {
  unsigned int v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Ui_Ip_BFu0ll) C1{ Fi Fp FL:0}



static void Test_Ui_Ip_BFu0ll()
{
  {
    init_simple_test("Ui_Ip_BFu0ll");
    static Ui_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_Ip_BFu0ll(Test_Ui_Ip_BFu0ll, "Ui_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ip_BFu0s  {
  unsigned int v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Ui_Ip_BFu0s) C1{ Fi Fp Fs:0}



static void Test_Ui_Ip_BFu0s()
{
  {
    init_simple_test("Ui_Ip_BFu0s");
    static Ui_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_Ip_BFu0s(Test_Ui_Ip_BFu0s, "Ui_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_L_BFu0c  {
  unsigned int v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Ui_L_BFu0c) C1{ Fi FL Fc:0}



static void Test_Ui_L_BFu0c()
{
  {
    init_simple_test("Ui_L_BFu0c");
    static Ui_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_L_BFu0c(Test_Ui_L_BFu0c, "Ui_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_L_BFu0i  {
  unsigned int v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Ui_L_BFu0i) C1{ Fi FL Fi:0}



static void Test_Ui_L_BFu0i()
{
  {
    init_simple_test("Ui_L_BFu0i");
    static Ui_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_L_BFu0i(Test_Ui_L_BFu0i, "Ui_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_L_BFu0ll  {
  unsigned int v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Ui_L_BFu0ll) C1{ Fi FL FL:0}



static void Test_Ui_L_BFu0ll()
{
  {
    init_simple_test("Ui_L_BFu0ll");
    static Ui_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_L_BFu0ll(Test_Ui_L_BFu0ll, "Ui_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_L_BFu0s  {
  unsigned int v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Ui_L_BFu0s) C1{ Fi FL Fs:0}



static void Test_Ui_L_BFu0s()
{
  {
    init_simple_test("Ui_L_BFu0s");
    static Ui_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_L_BFu0s(Test_Ui_L_BFu0s, "Ui_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_S_BFu0c  {
  unsigned int v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Ui_S_BFu0c) C1{ Fi Fs Fc:0}



static void Test_Ui_S_BFu0c()
{
  {
    init_simple_test("Ui_S_BFu0c");
    static Ui_S_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_S_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_S_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_S_BFu0c(Test_Ui_S_BFu0c, "Ui_S_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_S_BFu0i  {
  unsigned int v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Ui_S_BFu0i) C1{ Fi Fs Fi:0}



static void Test_Ui_S_BFu0i()
{
  {
    init_simple_test("Ui_S_BFu0i");
    static Ui_S_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_S_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_S_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_S_BFu0i(Test_Ui_S_BFu0i, "Ui_S_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_S_BFu0ll  {
  unsigned int v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Ui_S_BFu0ll) C1{ Fi Fs FL:0}



static void Test_Ui_S_BFu0ll()
{
  {
    init_simple_test("Ui_S_BFu0ll");
    static Ui_S_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_S_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_S_BFu0ll(Test_Ui_S_BFu0ll, "Ui_S_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_S_BFu0s  {
  unsigned int v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Ui_S_BFu0s) C1{ Fi Fs Fs:0}



static void Test_Ui_S_BFu0s()
{
  {
    init_simple_test("Ui_S_BFu0s");
    static Ui_S_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_S_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_S_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_S_BFu0s(Test_Ui_S_BFu0s, "Ui_S_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Uc_BFu0c  {
  unsigned int v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Ui_Uc_BFu0c) C1{ Fi Fc Fc:0}



static void Test_Ui_Uc_BFu0c()
{
  {
    init_simple_test("Ui_Uc_BFu0c");
    static Ui_Uc_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Uc_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_Uc_BFu0c(Test_Ui_Uc_BFu0c, "Ui_Uc_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Uc_BFu0i  {
  unsigned int v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Ui_Uc_BFu0i) C1{ Fi Fc Fi:0}



static void Test_Ui_Uc_BFu0i()
{
  {
    init_simple_test("Ui_Uc_BFu0i");
    static Ui_Uc_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Uc_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_Uc_BFu0i(Test_Ui_Uc_BFu0i, "Ui_Uc_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Uc_BFu0ll  {
  unsigned int v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Ui_Uc_BFu0ll) C1{ Fi Fc FL:0}



static void Test_Ui_Uc_BFu0ll()
{
  {
    init_simple_test("Ui_Uc_BFu0ll");
    static Ui_Uc_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_Uc_BFu0ll(Test_Ui_Uc_BFu0ll, "Ui_Uc_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Uc_BFu0s  {
  unsigned int v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Ui_Uc_BFu0s) C1{ Fi Fc Fs:0}



static void Test_Ui_Uc_BFu0s()
{
  {
    init_simple_test("Ui_Uc_BFu0s");
    static Ui_Uc_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Uc_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_Uc_BFu0s(Test_Ui_Uc_BFu0s, "Ui_Uc_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ui_BFu0c  {
  unsigned int v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Ui_Ui_BFu0c) C1{ Fi[2] Fc:0}



static void Test_Ui_Ui_BFu0c()
{
  {
    init_simple_test("Ui_Ui_BFu0c");
    static Ui_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_Ui_BFu0c(Test_Ui_Ui_BFu0c, "Ui_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ui_BFu0i  {
  unsigned int v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Ui_Ui_BFu0i) C1{ Fi[2] Fi:0}



static void Test_Ui_Ui_BFu0i()
{
  {
    init_simple_test("Ui_Ui_BFu0i");
    static Ui_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_Ui_BFu0i(Test_Ui_Ui_BFu0i, "Ui_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ui_BFu0ll  {
  unsigned int v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Ui_Ui_BFu0ll) C1{ Fi[2] FL:0}



static void Test_Ui_Ui_BFu0ll()
{
  {
    init_simple_test("Ui_Ui_BFu0ll");
    static Ui_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_Ui_BFu0ll(Test_Ui_Ui_BFu0ll, "Ui_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ui_BFu0s  {
  unsigned int v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Ui_Ui_BFu0s) C1{ Fi[2] Fs:0}



static void Test_Ui_Ui_BFu0s()
{
  {
    init_simple_test("Ui_Ui_BFu0s");
    static Ui_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_Ui_BFu0s(Test_Ui_Ui_BFu0s, "Ui_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ul_BFu0c  {
  unsigned int v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Ui_Ul_BFu0c) C1{ Fi FL Fc:0}



static void Test_Ui_Ul_BFu0c()
{
  {
    init_simple_test("Ui_Ul_BFu0c");
    static Ui_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_Ul_BFu0c(Test_Ui_Ul_BFu0c, "Ui_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ul_BFu0i  {
  unsigned int v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Ui_Ul_BFu0i) C1{ Fi FL Fi:0}



static void Test_Ui_Ul_BFu0i()
{
  {
    init_simple_test("Ui_Ul_BFu0i");
    static Ui_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_Ul_BFu0i(Test_Ui_Ul_BFu0i, "Ui_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ul_BFu0ll  {
  unsigned int v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Ui_Ul_BFu0ll) C1{ Fi FL FL:0}



static void Test_Ui_Ul_BFu0ll()
{
  {
    init_simple_test("Ui_Ul_BFu0ll");
    static Ui_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_Ul_BFu0ll(Test_Ui_Ul_BFu0ll, "Ui_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Ul_BFu0s  {
  unsigned int v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Ui_Ul_BFu0s) C1{ Fi FL Fs:0}



static void Test_Ui_Ul_BFu0s()
{
  {
    init_simple_test("Ui_Ul_BFu0s");
    static Ui_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_Ul_BFu0s(Test_Ui_Ul_BFu0s, "Ui_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Us_BFu0c  {
  unsigned int v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Ui_Us_BFu0c) C1{ Fi Fs Fc:0}



static void Test_Ui_Us_BFu0c()
{
  {
    init_simple_test("Ui_Us_BFu0c");
    static Ui_Us_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Us_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Us_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_Us_BFu0c(Test_Ui_Us_BFu0c, "Ui_Us_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Us_BFu0i  {
  unsigned int v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Ui_Us_BFu0i) C1{ Fi Fs Fi:0}



static void Test_Ui_Us_BFu0i()
{
  {
    init_simple_test("Ui_Us_BFu0i");
    static Ui_Us_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Us_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Us_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_Us_BFu0i(Test_Ui_Us_BFu0i, "Ui_Us_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Us_BFu0ll  {
  unsigned int v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Ui_Us_BFu0ll) C1{ Fi Fs FL:0}



static void Test_Ui_Us_BFu0ll()
{
  {
    init_simple_test("Ui_Us_BFu0ll");
    static Ui_Us_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_Us_BFu0ll(Test_Ui_Us_BFu0ll, "Ui_Us_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Us_BFu0s  {
  unsigned int v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Ui_Us_BFu0s) C1{ Fi Fs Fs:0}



static void Test_Ui_Us_BFu0s()
{
  {
    init_simple_test("Ui_Us_BFu0s");
    static Ui_Us_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Us_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Us_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_Us_BFu0s(Test_Ui_Us_BFu0s, "Ui_Us_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Vp_BFu0c  {
  unsigned int v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Ui_Vp_BFu0c) C1{ Fi Fp Fc:0}



static void Test_Ui_Vp_BFu0c()
{
  {
    init_simple_test("Ui_Vp_BFu0c");
    static Ui_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUi_Vp_BFu0c(Test_Ui_Vp_BFu0c, "Ui_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Vp_BFu0i  {
  unsigned int v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Ui_Vp_BFu0i) C1{ Fi Fp Fi:0}



static void Test_Ui_Vp_BFu0i()
{
  {
    init_simple_test("Ui_Vp_BFu0i");
    static Ui_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUi_Vp_BFu0i(Test_Ui_Vp_BFu0i, "Ui_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Vp_BFu0ll  {
  unsigned int v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Ui_Vp_BFu0ll) C1{ Fi Fp FL:0}



static void Test_Ui_Vp_BFu0ll()
{
  {
    init_simple_test("Ui_Vp_BFu0ll");
    static Ui_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUi_Vp_BFu0ll(Test_Ui_Vp_BFu0ll, "Ui_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ui_Vp_BFu0s  {
  unsigned int v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Ui_Vp_BFu0s) C1{ Fi Fp Fs:0}



static void Test_Ui_Vp_BFu0s()
{
  {
    init_simple_test("Ui_Vp_BFu0s");
    static Ui_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUi_Vp_BFu0s(Test_Ui_Vp_BFu0s, "Ui_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c  {
  __tsu64 v1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0c) C1{ FL Fc:0}



static void Test_Ul_BFu0c()
{
  {
    init_simple_test("Ul_BFu0c");
    static Ul_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0c(Test_Ul_BFu0c, "Ul_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu0c  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0c_BFu0c) C1{ FL Fc:0 Fc:0}



static void Test_Ul_BFu0c_BFu0c()
{
  {
    init_simple_test("Ul_BFu0c_BFu0c");
    static Ul_BFu0c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu0c(Test_Ul_BFu0c_BFu0c, "Ul_BFu0c_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu0i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0c_BFu0i) C1{ FL Fc:0 Fi:0}



static void Test_Ul_BFu0c_BFu0i()
{
  {
    init_simple_test("Ul_BFu0c_BFu0i");
    static Ul_BFu0c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu0i(Test_Ul_BFu0c_BFu0i, "Ul_BFu0c_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu0ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0c_BFu0ll) C1{ FL Fc:0 FL:0}



static void Test_Ul_BFu0c_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu0ll");
    static Ul_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu0ll(Test_Ul_BFu0c_BFu0ll, "Ul_BFu0c_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu0s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0c_BFu0s) C1{ FL Fc:0 Fs:0}



static void Test_Ul_BFu0c_BFu0s()
{
  {
    init_simple_test("Ul_BFu0c_BFu0s");
    static Ul_BFu0c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu0s(Test_Ul_BFu0c_BFu0s, "Ul_BFu0c_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu15i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Ul_BFu0c_BFu15i) C1{ FL Fc:0 Fi:15}



static void Test_Ul_BFu0c_BFu15i()
{
  {
    init_simple_test("Ul_BFu0c_BFu15i");
    static Ul_BFu0c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu15i(Test_Ul_BFu0c_BFu15i, "Ul_BFu0c_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu15ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Ul_BFu0c_BFu15ll) C1{ FL Fc:0 FL:15}



static void Test_Ul_BFu0c_BFu15ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu15ll");
    static Ul_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu15ll(Test_Ul_BFu0c_BFu15ll, "Ul_BFu0c_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu15s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Ul_BFu0c_BFu15s) C1{ FL Fc:0 Fs:15}



static void Test_Ul_BFu0c_BFu15s()
{
  {
    init_simple_test("Ul_BFu0c_BFu15s");
    static Ul_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu15s(Test_Ul_BFu0c_BFu15s, "Ul_BFu0c_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu16i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Ul_BFu0c_BFu16i) C1{ FL Fc:0 Fi:16}



static void Test_Ul_BFu0c_BFu16i()
{
  {
    init_simple_test("Ul_BFu0c_BFu16i");
    static Ul_BFu0c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu16i(Test_Ul_BFu0c_BFu16i, "Ul_BFu0c_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu16ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Ul_BFu0c_BFu16ll) C1{ FL Fc:0 FL:16}



static void Test_Ul_BFu0c_BFu16ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu16ll");
    static Ul_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu16ll(Test_Ul_BFu0c_BFu16ll, "Ul_BFu0c_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu16s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Ul_BFu0c_BFu16s) C1{ FL Fc:0 Fs:16}



static void Test_Ul_BFu0c_BFu16s()
{
  {
    init_simple_test("Ul_BFu0c_BFu16s");
    static Ul_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu16s(Test_Ul_BFu0c_BFu16s, "Ul_BFu0c_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu17i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Ul_BFu0c_BFu17i) C1{ FL Fc:0 Fi:17}



static void Test_Ul_BFu0c_BFu17i()
{
  {
    init_simple_test("Ul_BFu0c_BFu17i");
    static Ul_BFu0c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu17i(Test_Ul_BFu0c_BFu17i, "Ul_BFu0c_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu17ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Ul_BFu0c_BFu17ll) C1{ FL Fc:0 FL:17}



static void Test_Ul_BFu0c_BFu17ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu17ll");
    static Ul_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu17ll(Test_Ul_BFu0c_BFu17ll, "Ul_BFu0c_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu1c  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Ul_BFu0c_BFu1c) C1{ FL Fc:0 Fc:1}



static void Test_Ul_BFu0c_BFu1c()
{
  {
    init_simple_test("Ul_BFu0c_BFu1c");
    static Ul_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu1c(Test_Ul_BFu0c_BFu1c, "Ul_BFu0c_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu1i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Ul_BFu0c_BFu1i) C1{ FL Fc:0 Fi:1}



static void Test_Ul_BFu0c_BFu1i()
{
  {
    init_simple_test("Ul_BFu0c_BFu1i");
    static Ul_BFu0c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu1i(Test_Ul_BFu0c_BFu1i, "Ul_BFu0c_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu1ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Ul_BFu0c_BFu1ll) C1{ FL Fc:0 FL:1}



static void Test_Ul_BFu0c_BFu1ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu1ll");
    static Ul_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu1ll(Test_Ul_BFu0c_BFu1ll, "Ul_BFu0c_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu1s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Ul_BFu0c_BFu1s) C1{ FL Fc:0 Fs:1}



static void Test_Ul_BFu0c_BFu1s()
{
  {
    init_simple_test("Ul_BFu0c_BFu1s");
    static Ul_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu1s(Test_Ul_BFu0c_BFu1s, "Ul_BFu0c_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu31i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Ul_BFu0c_BFu31i) C1{ FL Fc:0 Fi:31}



static void Test_Ul_BFu0c_BFu31i()
{
  {
    init_simple_test("Ul_BFu0c_BFu31i");
    static Ul_BFu0c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu31i(Test_Ul_BFu0c_BFu31i, "Ul_BFu0c_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu31ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Ul_BFu0c_BFu31ll) C1{ FL Fc:0 FL:31}



static void Test_Ul_BFu0c_BFu31ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu31ll");
    static Ul_BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu31ll(Test_Ul_BFu0c_BFu31ll, "Ul_BFu0c_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu32i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Ul_BFu0c_BFu32i) C1{ FL Fc:0 Fi:32}



static void Test_Ul_BFu0c_BFu32i()
{
  {
    init_simple_test("Ul_BFu0c_BFu32i");
    static Ul_BFu0c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu32i(Test_Ul_BFu0c_BFu32i, "Ul_BFu0c_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu32ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Ul_BFu0c_BFu32ll) C1{ FL Fc:0 FL:32}



static void Test_Ul_BFu0c_BFu32ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu32ll");
    static Ul_BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu32ll(Test_Ul_BFu0c_BFu32ll, "Ul_BFu0c_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu33  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Ul_BFu0c_BFu33) C1{ FL Fc:0 FL:33}



static void Test_Ul_BFu0c_BFu33()
{
  {
    init_simple_test("Ul_BFu0c_BFu33");
    static Ul_BFu0c_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu33(Test_Ul_BFu0c_BFu33, "Ul_BFu0c_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu7c  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Ul_BFu0c_BFu7c) C1{ FL Fc:0 Fc:7}



static void Test_Ul_BFu0c_BFu7c()
{
  {
    init_simple_test("Ul_BFu0c_BFu7c");
    static Ul_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu7c(Test_Ul_BFu0c_BFu7c, "Ul_BFu0c_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu7i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Ul_BFu0c_BFu7i) C1{ FL Fc:0 Fi:7}



static void Test_Ul_BFu0c_BFu7i()
{
  {
    init_simple_test("Ul_BFu0c_BFu7i");
    static Ul_BFu0c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu7i(Test_Ul_BFu0c_BFu7i, "Ul_BFu0c_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu7ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Ul_BFu0c_BFu7ll) C1{ FL Fc:0 FL:7}



static void Test_Ul_BFu0c_BFu7ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu7ll");
    static Ul_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu7ll(Test_Ul_BFu0c_BFu7ll, "Ul_BFu0c_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu7s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Ul_BFu0c_BFu7s) C1{ FL Fc:0 Fs:7}



static void Test_Ul_BFu0c_BFu7s()
{
  {
    init_simple_test("Ul_BFu0c_BFu7s");
    static Ul_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu7s(Test_Ul_BFu0c_BFu7s, "Ul_BFu0c_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu8c  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Ul_BFu0c_BFu8c) C1{ FL Fc:0 Fc:8}



static void Test_Ul_BFu0c_BFu8c()
{
  {
    init_simple_test("Ul_BFu0c_BFu8c");
    static Ul_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu8c(Test_Ul_BFu0c_BFu8c, "Ul_BFu0c_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu8i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Ul_BFu0c_BFu8i) C1{ FL Fc:0 Fi:8}



static void Test_Ul_BFu0c_BFu8i()
{
  {
    init_simple_test("Ul_BFu0c_BFu8i");
    static Ul_BFu0c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu8i(Test_Ul_BFu0c_BFu8i, "Ul_BFu0c_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu8ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Ul_BFu0c_BFu8ll) C1{ FL Fc:0 FL:8}



static void Test_Ul_BFu0c_BFu8ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu8ll");
    static Ul_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu8ll(Test_Ul_BFu0c_BFu8ll, "Ul_BFu0c_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu8s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Ul_BFu0c_BFu8s) C1{ FL Fc:0 Fs:8}



static void Test_Ul_BFu0c_BFu8s()
{
  {
    init_simple_test("Ul_BFu0c_BFu8s");
    static Ul_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu8s(Test_Ul_BFu0c_BFu8s, "Ul_BFu0c_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu9i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Ul_BFu0c_BFu9i) C1{ FL Fc:0 Fi:9}



static void Test_Ul_BFu0c_BFu9i()
{
  {
    init_simple_test("Ul_BFu0c_BFu9i");
    static Ul_BFu0c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu9i(Test_Ul_BFu0c_BFu9i, "Ul_BFu0c_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu9ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Ul_BFu0c_BFu9ll) C1{ FL Fc:0 FL:9}



static void Test_Ul_BFu0c_BFu9ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu9ll");
    static Ul_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu9ll(Test_Ul_BFu0c_BFu9ll, "Ul_BFu0c_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_BFu9s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Ul_BFu0c_BFu9s) C1{ FL Fc:0 Fs:9}



static void Test_Ul_BFu0c_BFu9s()
{
  {
    init_simple_test("Ul_BFu0c_BFu9s");
    static Ul_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_BFu9s(Test_Ul_BFu0c_BFu9s, "Ul_BFu0c_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_C  {
  __tsu64 v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Ul_BFu0c_C) C1{ FL Fc:0 Fc}



static void Test_Ul_BFu0c_C()
{
  {
    init_simple_test("Ul_BFu0c_C");
    static Ul_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_C.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_C(Test_Ul_BFu0c_C, "Ul_BFu0c_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_D  {
  __tsu64 v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Ul_BFu0c_D) C1{ FL Fc:0 FL}



static void Test_Ul_BFu0c_D()
{
  {
    init_simple_test("Ul_BFu0c_D");
    static Ul_BFu0c_D lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_D.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_D(Test_Ul_BFu0c_D, "Ul_BFu0c_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_F  {
  __tsu64 v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Ul_BFu0c_F) C1{ FL Fc:0 Fi}



static void Test_Ul_BFu0c_F()
{
  {
    init_simple_test("Ul_BFu0c_F");
    static Ul_BFu0c_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_F.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_F(Test_Ul_BFu0c_F, "Ul_BFu0c_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_I  {
  __tsu64 v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Ul_BFu0c_I) C1{ FL Fc:0 Fi}



static void Test_Ul_BFu0c_I()
{
  {
    init_simple_test("Ul_BFu0c_I");
    static Ul_BFu0c_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_I.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_I(Test_Ul_BFu0c_I, "Ul_BFu0c_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_Ip  {
  __tsu64 v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Ul_BFu0c_Ip) C1{ FL Fc:0 Fp}



static void Test_Ul_BFu0c_Ip()
{
  {
    init_simple_test("Ul_BFu0c_Ip");
    static Ul_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Ip.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_Ip(Test_Ul_BFu0c_Ip, "Ul_BFu0c_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_L  {
  __tsu64 v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Ul_BFu0c_L) C1{ FL Fc:0 FL}



static void Test_Ul_BFu0c_L()
{
  {
    init_simple_test("Ul_BFu0c_L");
    static Ul_BFu0c_L lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_L.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_L(Test_Ul_BFu0c_L, "Ul_BFu0c_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_S  {
  __tsu64 v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Ul_BFu0c_S) C1{ FL Fc:0 Fs}



static void Test_Ul_BFu0c_S()
{
  {
    init_simple_test("Ul_BFu0c_S");
    static Ul_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_S.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_S(Test_Ul_BFu0c_S, "Ul_BFu0c_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_Uc  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Ul_BFu0c_Uc) C1{ FL Fc:0 Fc}



static void Test_Ul_BFu0c_Uc()
{
  {
    init_simple_test("Ul_BFu0c_Uc");
    static Ul_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_Uc(Test_Ul_BFu0c_Uc, "Ul_BFu0c_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_Ui  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Ul_BFu0c_Ui) C1{ FL Fc:0 Fi}



static void Test_Ul_BFu0c_Ui()
{
  {
    init_simple_test("Ul_BFu0c_Ui");
    static Ul_BFu0c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_Ui(Test_Ul_BFu0c_Ui, "Ul_BFu0c_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_Ul  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Ul_BFu0c_Ul) C1{ FL Fc:0 FL}



static void Test_Ul_BFu0c_Ul()
{
  {
    init_simple_test("Ul_BFu0c_Ul");
    static Ul_BFu0c_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Ul.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_Ul(Test_Ul_BFu0c_Ul, "Ul_BFu0c_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_Us  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Ul_BFu0c_Us) C1{ FL Fc:0 Fs}



static void Test_Ul_BFu0c_Us()
{
  {
    init_simple_test("Ul_BFu0c_Us");
    static Ul_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Us.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_Us(Test_Ul_BFu0c_Us, "Ul_BFu0c_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0c_Vp  {
  __tsu64 v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Ul_BFu0c_Vp) C1{ FL Fc:0 Fp}



static void Test_Ul_BFu0c_Vp()
{
  {
    init_simple_test("Ul_BFu0c_Vp");
    static Ul_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Vp.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0c_Vp(Test_Ul_BFu0c_Vp, "Ul_BFu0c_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i  {
  __tsu64 v1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0i) C1{ FL Fi:0}



static void Test_Ul_BFu0i()
{
  {
    init_simple_test("Ul_BFu0i");
    static Ul_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0i(Test_Ul_BFu0i, "Ul_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu0c  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0i_BFu0c) C1{ FL Fi:0 Fc:0}



static void Test_Ul_BFu0i_BFu0c()
{
  {
    init_simple_test("Ul_BFu0i_BFu0c");
    static Ul_BFu0i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu0c(Test_Ul_BFu0i_BFu0c, "Ul_BFu0i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu0i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0i_BFu0i) C1{ FL Fi:0 Fi:0}



static void Test_Ul_BFu0i_BFu0i()
{
  {
    init_simple_test("Ul_BFu0i_BFu0i");
    static Ul_BFu0i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu0i(Test_Ul_BFu0i_BFu0i, "Ul_BFu0i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu0ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0i_BFu0ll) C1{ FL Fi:0 FL:0}



static void Test_Ul_BFu0i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu0ll");
    static Ul_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu0ll(Test_Ul_BFu0i_BFu0ll, "Ul_BFu0i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu0s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0i_BFu0s) C1{ FL Fi:0 Fs:0}



static void Test_Ul_BFu0i_BFu0s()
{
  {
    init_simple_test("Ul_BFu0i_BFu0s");
    static Ul_BFu0i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu0s(Test_Ul_BFu0i_BFu0s, "Ul_BFu0i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu15i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Ul_BFu0i_BFu15i) C1{ FL Fi:0 Fi:15}



static void Test_Ul_BFu0i_BFu15i()
{
  {
    init_simple_test("Ul_BFu0i_BFu15i");
    static Ul_BFu0i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu15i(Test_Ul_BFu0i_BFu15i, "Ul_BFu0i_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu15ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Ul_BFu0i_BFu15ll) C1{ FL Fi:0 FL:15}



static void Test_Ul_BFu0i_BFu15ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu15ll");
    static Ul_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu15ll(Test_Ul_BFu0i_BFu15ll, "Ul_BFu0i_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu15s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Ul_BFu0i_BFu15s) C1{ FL Fi:0 Fs:15}



static void Test_Ul_BFu0i_BFu15s()
{
  {
    init_simple_test("Ul_BFu0i_BFu15s");
    static Ul_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu15s(Test_Ul_BFu0i_BFu15s, "Ul_BFu0i_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu16i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Ul_BFu0i_BFu16i) C1{ FL Fi:0 Fi:16}



static void Test_Ul_BFu0i_BFu16i()
{
  {
    init_simple_test("Ul_BFu0i_BFu16i");
    static Ul_BFu0i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu16i(Test_Ul_BFu0i_BFu16i, "Ul_BFu0i_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu16ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Ul_BFu0i_BFu16ll) C1{ FL Fi:0 FL:16}



static void Test_Ul_BFu0i_BFu16ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu16ll");
    static Ul_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu16ll(Test_Ul_BFu0i_BFu16ll, "Ul_BFu0i_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu16s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Ul_BFu0i_BFu16s) C1{ FL Fi:0 Fs:16}



static void Test_Ul_BFu0i_BFu16s()
{
  {
    init_simple_test("Ul_BFu0i_BFu16s");
    static Ul_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu16s(Test_Ul_BFu0i_BFu16s, "Ul_BFu0i_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu17i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Ul_BFu0i_BFu17i) C1{ FL Fi:0 Fi:17}



static void Test_Ul_BFu0i_BFu17i()
{
  {
    init_simple_test("Ul_BFu0i_BFu17i");
    static Ul_BFu0i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu17i(Test_Ul_BFu0i_BFu17i, "Ul_BFu0i_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu17ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Ul_BFu0i_BFu17ll) C1{ FL Fi:0 FL:17}



static void Test_Ul_BFu0i_BFu17ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu17ll");
    static Ul_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu17ll(Test_Ul_BFu0i_BFu17ll, "Ul_BFu0i_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu1c  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Ul_BFu0i_BFu1c) C1{ FL Fi:0 Fc:1}



static void Test_Ul_BFu0i_BFu1c()
{
  {
    init_simple_test("Ul_BFu0i_BFu1c");
    static Ul_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu1c(Test_Ul_BFu0i_BFu1c, "Ul_BFu0i_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu1i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Ul_BFu0i_BFu1i) C1{ FL Fi:0 Fi:1}



static void Test_Ul_BFu0i_BFu1i()
{
  {
    init_simple_test("Ul_BFu0i_BFu1i");
    static Ul_BFu0i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu1i(Test_Ul_BFu0i_BFu1i, "Ul_BFu0i_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu1ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Ul_BFu0i_BFu1ll) C1{ FL Fi:0 FL:1}



static void Test_Ul_BFu0i_BFu1ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu1ll");
    static Ul_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu1ll(Test_Ul_BFu0i_BFu1ll, "Ul_BFu0i_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu1s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Ul_BFu0i_BFu1s) C1{ FL Fi:0 Fs:1}



static void Test_Ul_BFu0i_BFu1s()
{
  {
    init_simple_test("Ul_BFu0i_BFu1s");
    static Ul_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu1s(Test_Ul_BFu0i_BFu1s, "Ul_BFu0i_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu31i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Ul_BFu0i_BFu31i) C1{ FL Fi:0 Fi:31}



static void Test_Ul_BFu0i_BFu31i()
{
  {
    init_simple_test("Ul_BFu0i_BFu31i");
    static Ul_BFu0i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu31i(Test_Ul_BFu0i_BFu31i, "Ul_BFu0i_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu31ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Ul_BFu0i_BFu31ll) C1{ FL Fi:0 FL:31}



static void Test_Ul_BFu0i_BFu31ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu31ll");
    static Ul_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu31ll(Test_Ul_BFu0i_BFu31ll, "Ul_BFu0i_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu32i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Ul_BFu0i_BFu32i) C1{ FL Fi:0 Fi:32}



static void Test_Ul_BFu0i_BFu32i()
{
  {
    init_simple_test("Ul_BFu0i_BFu32i");
    static Ul_BFu0i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu32i(Test_Ul_BFu0i_BFu32i, "Ul_BFu0i_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu32ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Ul_BFu0i_BFu32ll) C1{ FL Fi:0 FL:32}



static void Test_Ul_BFu0i_BFu32ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu32ll");
    static Ul_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu32ll(Test_Ul_BFu0i_BFu32ll, "Ul_BFu0i_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu33  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Ul_BFu0i_BFu33) C1{ FL Fi:0 FL:33}



static void Test_Ul_BFu0i_BFu33()
{
  {
    init_simple_test("Ul_BFu0i_BFu33");
    static Ul_BFu0i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu0i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu33(Test_Ul_BFu0i_BFu33, "Ul_BFu0i_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu7c  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Ul_BFu0i_BFu7c) C1{ FL Fi:0 Fc:7}



static void Test_Ul_BFu0i_BFu7c()
{
  {
    init_simple_test("Ul_BFu0i_BFu7c");
    static Ul_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu7c(Test_Ul_BFu0i_BFu7c, "Ul_BFu0i_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu7i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Ul_BFu0i_BFu7i) C1{ FL Fi:0 Fi:7}



static void Test_Ul_BFu0i_BFu7i()
{
  {
    init_simple_test("Ul_BFu0i_BFu7i");
    static Ul_BFu0i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu7i(Test_Ul_BFu0i_BFu7i, "Ul_BFu0i_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu7ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Ul_BFu0i_BFu7ll) C1{ FL Fi:0 FL:7}



static void Test_Ul_BFu0i_BFu7ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu7ll");
    static Ul_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu7ll(Test_Ul_BFu0i_BFu7ll, "Ul_BFu0i_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu7s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Ul_BFu0i_BFu7s) C1{ FL Fi:0 Fs:7}



static void Test_Ul_BFu0i_BFu7s()
{
  {
    init_simple_test("Ul_BFu0i_BFu7s");
    static Ul_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu7s(Test_Ul_BFu0i_BFu7s, "Ul_BFu0i_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu8c  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Ul_BFu0i_BFu8c) C1{ FL Fi:0 Fc:8}



static void Test_Ul_BFu0i_BFu8c()
{
  {
    init_simple_test("Ul_BFu0i_BFu8c");
    static Ul_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu8c(Test_Ul_BFu0i_BFu8c, "Ul_BFu0i_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu8i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Ul_BFu0i_BFu8i) C1{ FL Fi:0 Fi:8}



static void Test_Ul_BFu0i_BFu8i()
{
  {
    init_simple_test("Ul_BFu0i_BFu8i");
    static Ul_BFu0i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu8i(Test_Ul_BFu0i_BFu8i, "Ul_BFu0i_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu8ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Ul_BFu0i_BFu8ll) C1{ FL Fi:0 FL:8}



static void Test_Ul_BFu0i_BFu8ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu8ll");
    static Ul_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu8ll(Test_Ul_BFu0i_BFu8ll, "Ul_BFu0i_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu8s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Ul_BFu0i_BFu8s) C1{ FL Fi:0 Fs:8}



static void Test_Ul_BFu0i_BFu8s()
{
  {
    init_simple_test("Ul_BFu0i_BFu8s");
    static Ul_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu8s(Test_Ul_BFu0i_BFu8s, "Ul_BFu0i_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu9i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Ul_BFu0i_BFu9i) C1{ FL Fi:0 Fi:9}



static void Test_Ul_BFu0i_BFu9i()
{
  {
    init_simple_test("Ul_BFu0i_BFu9i");
    static Ul_BFu0i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu9i(Test_Ul_BFu0i_BFu9i, "Ul_BFu0i_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu9ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Ul_BFu0i_BFu9ll) C1{ FL Fi:0 FL:9}



static void Test_Ul_BFu0i_BFu9ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu9ll");
    static Ul_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu9ll(Test_Ul_BFu0i_BFu9ll, "Ul_BFu0i_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_BFu9s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Ul_BFu0i_BFu9s) C1{ FL Fi:0 Fs:9}



static void Test_Ul_BFu0i_BFu9s()
{
  {
    init_simple_test("Ul_BFu0i_BFu9s");
    static Ul_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_BFu9s(Test_Ul_BFu0i_BFu9s, "Ul_BFu0i_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_C  {
  __tsu64 v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Ul_BFu0i_C) C1{ FL Fi:0 Fc}



static void Test_Ul_BFu0i_C()
{
  {
    init_simple_test("Ul_BFu0i_C");
    static Ul_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_C.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_C(Test_Ul_BFu0i_C, "Ul_BFu0i_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_D  {
  __tsu64 v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Ul_BFu0i_D) C1{ FL Fi:0 FL}



static void Test_Ul_BFu0i_D()
{
  {
    init_simple_test("Ul_BFu0i_D");
    static Ul_BFu0i_D lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_D.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_D(Test_Ul_BFu0i_D, "Ul_BFu0i_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_F  {
  __tsu64 v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Ul_BFu0i_F) C1{ FL Fi:0 Fi}



static void Test_Ul_BFu0i_F()
{
  {
    init_simple_test("Ul_BFu0i_F");
    static Ul_BFu0i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_F.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_F(Test_Ul_BFu0i_F, "Ul_BFu0i_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_I  {
  __tsu64 v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Ul_BFu0i_I) C1{ FL Fi:0 Fi}



static void Test_Ul_BFu0i_I()
{
  {
    init_simple_test("Ul_BFu0i_I");
    static Ul_BFu0i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_I.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_I(Test_Ul_BFu0i_I, "Ul_BFu0i_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_Ip  {
  __tsu64 v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Ul_BFu0i_Ip) C1{ FL Fi:0 Fp}



static void Test_Ul_BFu0i_Ip()
{
  {
    init_simple_test("Ul_BFu0i_Ip");
    static Ul_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Ip.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_Ip(Test_Ul_BFu0i_Ip, "Ul_BFu0i_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_L  {
  __tsu64 v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Ul_BFu0i_L) C1{ FL Fi:0 FL}



static void Test_Ul_BFu0i_L()
{
  {
    init_simple_test("Ul_BFu0i_L");
    static Ul_BFu0i_L lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_L.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_L(Test_Ul_BFu0i_L, "Ul_BFu0i_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_S  {
  __tsu64 v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Ul_BFu0i_S) C1{ FL Fi:0 Fs}



static void Test_Ul_BFu0i_S()
{
  {
    init_simple_test("Ul_BFu0i_S");
    static Ul_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_S.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_S(Test_Ul_BFu0i_S, "Ul_BFu0i_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_Uc  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Ul_BFu0i_Uc) C1{ FL Fi:0 Fc}



static void Test_Ul_BFu0i_Uc()
{
  {
    init_simple_test("Ul_BFu0i_Uc");
    static Ul_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_Uc(Test_Ul_BFu0i_Uc, "Ul_BFu0i_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_Ui  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Ul_BFu0i_Ui) C1{ FL Fi:0 Fi}



static void Test_Ul_BFu0i_Ui()
{
  {
    init_simple_test("Ul_BFu0i_Ui");
    static Ul_BFu0i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_Ui(Test_Ul_BFu0i_Ui, "Ul_BFu0i_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_Ul  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Ul_BFu0i_Ul) C1{ FL Fi:0 FL}



static void Test_Ul_BFu0i_Ul()
{
  {
    init_simple_test("Ul_BFu0i_Ul");
    static Ul_BFu0i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Ul.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_Ul(Test_Ul_BFu0i_Ul, "Ul_BFu0i_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_Us  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Ul_BFu0i_Us) C1{ FL Fi:0 Fs}



static void Test_Ul_BFu0i_Us()
{
  {
    init_simple_test("Ul_BFu0i_Us");
    static Ul_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Us.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_Us(Test_Ul_BFu0i_Us, "Ul_BFu0i_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0i_Vp  {
  __tsu64 v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Ul_BFu0i_Vp) C1{ FL Fi:0 Fp}



static void Test_Ul_BFu0i_Vp()
{
  {
    init_simple_test("Ul_BFu0i_Vp");
    static Ul_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Vp.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0i_Vp(Test_Ul_BFu0i_Vp, "Ul_BFu0i_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll  {
  __tsu64 v1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0ll) C1{ FL FL:0}



static void Test_Ul_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0ll");
    static Ul_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll(Test_Ul_BFu0ll, "Ul_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu0c  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0ll_BFu0c) C1{ FL FL:0 Fc:0}



static void Test_Ul_BFu0ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu0ll_BFu0c");
    static Ul_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu0c(Test_Ul_BFu0ll_BFu0c, "Ul_BFu0ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu0i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0ll_BFu0i) C1{ FL FL:0 Fi:0}



static void Test_Ul_BFu0ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu0i");
    static Ul_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu0i(Test_Ul_BFu0ll_BFu0i, "Ul_BFu0ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu0ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0ll_BFu0ll) C1{ FL FL:0 FL:0}



static void Test_Ul_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu0ll");
    static Ul_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu0ll(Test_Ul_BFu0ll_BFu0ll, "Ul_BFu0ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu0s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0ll_BFu0s) C1{ FL FL:0 Fs:0}



static void Test_Ul_BFu0ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu0s");
    static Ul_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu0s(Test_Ul_BFu0ll_BFu0s, "Ul_BFu0ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu15i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Ul_BFu0ll_BFu15i) C1{ FL FL:0 Fi:15}



static void Test_Ul_BFu0ll_BFu15i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu15i");
    static Ul_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu15i(Test_Ul_BFu0ll_BFu15i, "Ul_BFu0ll_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu15ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Ul_BFu0ll_BFu15ll) C1{ FL FL:0 FL:15}



static void Test_Ul_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu15ll");
    static Ul_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu15ll(Test_Ul_BFu0ll_BFu15ll, "Ul_BFu0ll_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu15s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Ul_BFu0ll_BFu15s) C1{ FL FL:0 Fs:15}



static void Test_Ul_BFu0ll_BFu15s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu15s");
    static Ul_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu15s(Test_Ul_BFu0ll_BFu15s, "Ul_BFu0ll_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu16i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Ul_BFu0ll_BFu16i) C1{ FL FL:0 Fi:16}



static void Test_Ul_BFu0ll_BFu16i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu16i");
    static Ul_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu16i(Test_Ul_BFu0ll_BFu16i, "Ul_BFu0ll_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu16ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Ul_BFu0ll_BFu16ll) C1{ FL FL:0 FL:16}



static void Test_Ul_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu16ll");
    static Ul_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu16ll(Test_Ul_BFu0ll_BFu16ll, "Ul_BFu0ll_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu16s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Ul_BFu0ll_BFu16s) C1{ FL FL:0 Fs:16}



static void Test_Ul_BFu0ll_BFu16s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu16s");
    static Ul_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu16s(Test_Ul_BFu0ll_BFu16s, "Ul_BFu0ll_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu17i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Ul_BFu0ll_BFu17i) C1{ FL FL:0 Fi:17}



static void Test_Ul_BFu0ll_BFu17i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu17i");
    static Ul_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu17i(Test_Ul_BFu0ll_BFu17i, "Ul_BFu0ll_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu17ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Ul_BFu0ll_BFu17ll) C1{ FL FL:0 FL:17}



static void Test_Ul_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu17ll");
    static Ul_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu17ll(Test_Ul_BFu0ll_BFu17ll, "Ul_BFu0ll_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu1c  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Ul_BFu0ll_BFu1c) C1{ FL FL:0 Fc:1}



static void Test_Ul_BFu0ll_BFu1c()
{
  {
    init_simple_test("Ul_BFu0ll_BFu1c");
    static Ul_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu1c(Test_Ul_BFu0ll_BFu1c, "Ul_BFu0ll_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu1i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Ul_BFu0ll_BFu1i) C1{ FL FL:0 Fi:1}



static void Test_Ul_BFu0ll_BFu1i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu1i");
    static Ul_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu1i(Test_Ul_BFu0ll_BFu1i, "Ul_BFu0ll_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu1ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Ul_BFu0ll_BFu1ll) C1{ FL FL:0 FL:1}



static void Test_Ul_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu1ll");
    static Ul_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu1ll(Test_Ul_BFu0ll_BFu1ll, "Ul_BFu0ll_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu1s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Ul_BFu0ll_BFu1s) C1{ FL FL:0 Fs:1}



static void Test_Ul_BFu0ll_BFu1s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu1s");
    static Ul_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu1s(Test_Ul_BFu0ll_BFu1s, "Ul_BFu0ll_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu31i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Ul_BFu0ll_BFu31i) C1{ FL FL:0 Fi:31}



static void Test_Ul_BFu0ll_BFu31i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu31i");
    static Ul_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu31i(Test_Ul_BFu0ll_BFu31i, "Ul_BFu0ll_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu31ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Ul_BFu0ll_BFu31ll) C1{ FL FL:0 FL:31}



static void Test_Ul_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu31ll");
    static Ul_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu31ll(Test_Ul_BFu0ll_BFu31ll, "Ul_BFu0ll_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu32i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Ul_BFu0ll_BFu32i) C1{ FL FL:0 Fi:32}



static void Test_Ul_BFu0ll_BFu32i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu32i");
    static Ul_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu32i(Test_Ul_BFu0ll_BFu32i, "Ul_BFu0ll_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu32ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Ul_BFu0ll_BFu32ll) C1{ FL FL:0 FL:32}



static void Test_Ul_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu32ll");
    static Ul_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu32ll(Test_Ul_BFu0ll_BFu32ll, "Ul_BFu0ll_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu33  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Ul_BFu0ll_BFu33) C1{ FL FL:0 FL:33}



static void Test_Ul_BFu0ll_BFu33()
{
  {
    init_simple_test("Ul_BFu0ll_BFu33");
    static Ul_BFu0ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu33(Test_Ul_BFu0ll_BFu33, "Ul_BFu0ll_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu7c  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Ul_BFu0ll_BFu7c) C1{ FL FL:0 Fc:7}



static void Test_Ul_BFu0ll_BFu7c()
{
  {
    init_simple_test("Ul_BFu0ll_BFu7c");
    static Ul_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu7c(Test_Ul_BFu0ll_BFu7c, "Ul_BFu0ll_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu7i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Ul_BFu0ll_BFu7i) C1{ FL FL:0 Fi:7}



static void Test_Ul_BFu0ll_BFu7i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu7i");
    static Ul_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu7i(Test_Ul_BFu0ll_BFu7i, "Ul_BFu0ll_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu7ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Ul_BFu0ll_BFu7ll) C1{ FL FL:0 FL:7}



static void Test_Ul_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu7ll");
    static Ul_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu7ll(Test_Ul_BFu0ll_BFu7ll, "Ul_BFu0ll_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu7s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Ul_BFu0ll_BFu7s) C1{ FL FL:0 Fs:7}



static void Test_Ul_BFu0ll_BFu7s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu7s");
    static Ul_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu7s(Test_Ul_BFu0ll_BFu7s, "Ul_BFu0ll_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu8c  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Ul_BFu0ll_BFu8c) C1{ FL FL:0 Fc:8}



static void Test_Ul_BFu0ll_BFu8c()
{
  {
    init_simple_test("Ul_BFu0ll_BFu8c");
    static Ul_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu8c(Test_Ul_BFu0ll_BFu8c, "Ul_BFu0ll_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu8i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Ul_BFu0ll_BFu8i) C1{ FL FL:0 Fi:8}



static void Test_Ul_BFu0ll_BFu8i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu8i");
    static Ul_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu8i(Test_Ul_BFu0ll_BFu8i, "Ul_BFu0ll_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu8ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Ul_BFu0ll_BFu8ll) C1{ FL FL:0 FL:8}



static void Test_Ul_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu8ll");
    static Ul_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu8ll(Test_Ul_BFu0ll_BFu8ll, "Ul_BFu0ll_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu8s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Ul_BFu0ll_BFu8s) C1{ FL FL:0 Fs:8}



static void Test_Ul_BFu0ll_BFu8s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu8s");
    static Ul_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu8s(Test_Ul_BFu0ll_BFu8s, "Ul_BFu0ll_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu9i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Ul_BFu0ll_BFu9i) C1{ FL FL:0 Fi:9}



static void Test_Ul_BFu0ll_BFu9i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu9i");
    static Ul_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu9i(Test_Ul_BFu0ll_BFu9i, "Ul_BFu0ll_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu9ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Ul_BFu0ll_BFu9ll) C1{ FL FL:0 FL:9}



static void Test_Ul_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu9ll");
    static Ul_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu9ll(Test_Ul_BFu0ll_BFu9ll, "Ul_BFu0ll_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_BFu9s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Ul_BFu0ll_BFu9s) C1{ FL FL:0 Fs:9}



static void Test_Ul_BFu0ll_BFu9s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu9s");
    static Ul_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_BFu9s(Test_Ul_BFu0ll_BFu9s, "Ul_BFu0ll_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_C  {
  __tsu64 v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Ul_BFu0ll_C) C1{ FL FL:0 Fc}



static void Test_Ul_BFu0ll_C()
{
  {
    init_simple_test("Ul_BFu0ll_C");
    static Ul_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_C.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_C(Test_Ul_BFu0ll_C, "Ul_BFu0ll_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_D  {
  __tsu64 v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Ul_BFu0ll_D) C1{ FL FL:0 FL}



static void Test_Ul_BFu0ll_D()
{
  {
    init_simple_test("Ul_BFu0ll_D");
    static Ul_BFu0ll_D lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_D.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_D(Test_Ul_BFu0ll_D, "Ul_BFu0ll_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_F  {
  __tsu64 v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Ul_BFu0ll_F) C1{ FL FL:0 Fi}



static void Test_Ul_BFu0ll_F()
{
  {
    init_simple_test("Ul_BFu0ll_F");
    static Ul_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_F.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_F(Test_Ul_BFu0ll_F, "Ul_BFu0ll_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_I  {
  __tsu64 v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Ul_BFu0ll_I) C1{ FL FL:0 Fi}



static void Test_Ul_BFu0ll_I()
{
  {
    init_simple_test("Ul_BFu0ll_I");
    static Ul_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_I.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_I(Test_Ul_BFu0ll_I, "Ul_BFu0ll_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_Ip  {
  __tsu64 v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Ul_BFu0ll_Ip) C1{ FL FL:0 Fp}



static void Test_Ul_BFu0ll_Ip()
{
  {
    init_simple_test("Ul_BFu0ll_Ip");
    static Ul_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_Ip(Test_Ul_BFu0ll_Ip, "Ul_BFu0ll_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_L  {
  __tsu64 v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Ul_BFu0ll_L) C1{ FL FL:0 FL}



static void Test_Ul_BFu0ll_L()
{
  {
    init_simple_test("Ul_BFu0ll_L");
    static Ul_BFu0ll_L lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_L.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_L(Test_Ul_BFu0ll_L, "Ul_BFu0ll_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_S  {
  __tsu64 v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Ul_BFu0ll_S) C1{ FL FL:0 Fs}



static void Test_Ul_BFu0ll_S()
{
  {
    init_simple_test("Ul_BFu0ll_S");
    static Ul_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_S.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_S(Test_Ul_BFu0ll_S, "Ul_BFu0ll_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_Uc  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Ul_BFu0ll_Uc) C1{ FL FL:0 Fc}



static void Test_Ul_BFu0ll_Uc()
{
  {
    init_simple_test("Ul_BFu0ll_Uc");
    static Ul_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_Uc(Test_Ul_BFu0ll_Uc, "Ul_BFu0ll_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_Ui  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Ul_BFu0ll_Ui) C1{ FL FL:0 Fi}



static void Test_Ul_BFu0ll_Ui()
{
  {
    init_simple_test("Ul_BFu0ll_Ui");
    static Ul_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_Ui(Test_Ul_BFu0ll_Ui, "Ul_BFu0ll_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_Ul  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Ul_BFu0ll_Ul) C1{ FL FL:0 FL}



static void Test_Ul_BFu0ll_Ul()
{
  {
    init_simple_test("Ul_BFu0ll_Ul");
    static Ul_BFu0ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_Ul(Test_Ul_BFu0ll_Ul, "Ul_BFu0ll_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_Us  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Ul_BFu0ll_Us) C1{ FL FL:0 Fs}



static void Test_Ul_BFu0ll_Us()
{
  {
    init_simple_test("Ul_BFu0ll_Us");
    static Ul_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Us.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_Us(Test_Ul_BFu0ll_Us, "Ul_BFu0ll_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0ll_Vp  {
  __tsu64 v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Ul_BFu0ll_Vp) C1{ FL FL:0 Fp}



static void Test_Ul_BFu0ll_Vp()
{
  {
    init_simple_test("Ul_BFu0ll_Vp");
    static Ul_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0ll_Vp(Test_Ul_BFu0ll_Vp, "Ul_BFu0ll_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s  {
  __tsu64 v1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0s) C1{ FL Fs:0}



static void Test_Ul_BFu0s()
{
  {
    init_simple_test("Ul_BFu0s");
    static Ul_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0s(Test_Ul_BFu0s, "Ul_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu0c  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0s_BFu0c) C1{ FL Fs:0 Fc:0}



static void Test_Ul_BFu0s_BFu0c()
{
  {
    init_simple_test("Ul_BFu0s_BFu0c");
    static Ul_BFu0s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu0c(Test_Ul_BFu0s_BFu0c, "Ul_BFu0s_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu0i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0s_BFu0i) C1{ FL Fs:0 Fi:0}



static void Test_Ul_BFu0s_BFu0i()
{
  {
    init_simple_test("Ul_BFu0s_BFu0i");
    static Ul_BFu0s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu0i(Test_Ul_BFu0s_BFu0i, "Ul_BFu0s_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu0ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0s_BFu0ll) C1{ FL Fs:0 FL:0}



static void Test_Ul_BFu0s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu0ll");
    static Ul_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu0ll(Test_Ul_BFu0s_BFu0ll, "Ul_BFu0s_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu0s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0s_BFu0s) C1{ FL Fs:0 Fs:0}



static void Test_Ul_BFu0s_BFu0s()
{
  {
    init_simple_test("Ul_BFu0s_BFu0s");
    static Ul_BFu0s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu0s(Test_Ul_BFu0s_BFu0s, "Ul_BFu0s_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu15i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Ul_BFu0s_BFu15i) C1{ FL Fs:0 Fi:15}



static void Test_Ul_BFu0s_BFu15i()
{
  {
    init_simple_test("Ul_BFu0s_BFu15i");
    static Ul_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu15i(Test_Ul_BFu0s_BFu15i, "Ul_BFu0s_BFu15i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu15ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Ul_BFu0s_BFu15ll) C1{ FL Fs:0 FL:15}



static void Test_Ul_BFu0s_BFu15ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu15ll");
    static Ul_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu15ll(Test_Ul_BFu0s_BFu15ll, "Ul_BFu0s_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu15s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Ul_BFu0s_BFu15s) C1{ FL Fs:0 Fs:15}



static void Test_Ul_BFu0s_BFu15s()
{
  {
    init_simple_test("Ul_BFu0s_BFu15s");
    static Ul_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu15s(Test_Ul_BFu0s_BFu15s, "Ul_BFu0s_BFu15s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu16i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Ul_BFu0s_BFu16i) C1{ FL Fs:0 Fi:16}



static void Test_Ul_BFu0s_BFu16i()
{
  {
    init_simple_test("Ul_BFu0s_BFu16i");
    static Ul_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu16i(Test_Ul_BFu0s_BFu16i, "Ul_BFu0s_BFu16i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu16ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Ul_BFu0s_BFu16ll) C1{ FL Fs:0 FL:16}



static void Test_Ul_BFu0s_BFu16ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu16ll");
    static Ul_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu16ll(Test_Ul_BFu0s_BFu16ll, "Ul_BFu0s_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu16s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Ul_BFu0s_BFu16s) C1{ FL Fs:0 Fs:16}



static void Test_Ul_BFu0s_BFu16s()
{
  {
    init_simple_test("Ul_BFu0s_BFu16s");
    static Ul_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu16s(Test_Ul_BFu0s_BFu16s, "Ul_BFu0s_BFu16s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu17i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Ul_BFu0s_BFu17i) C1{ FL Fs:0 Fi:17}



static void Test_Ul_BFu0s_BFu17i()
{
  {
    init_simple_test("Ul_BFu0s_BFu17i");
    static Ul_BFu0s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu17i(Test_Ul_BFu0s_BFu17i, "Ul_BFu0s_BFu17i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu17ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Ul_BFu0s_BFu17ll) C1{ FL Fs:0 FL:17}



static void Test_Ul_BFu0s_BFu17ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu17ll");
    static Ul_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu17ll(Test_Ul_BFu0s_BFu17ll, "Ul_BFu0s_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu1c  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Ul_BFu0s_BFu1c) C1{ FL Fs:0 Fc:1}



static void Test_Ul_BFu0s_BFu1c()
{
  {
    init_simple_test("Ul_BFu0s_BFu1c");
    static Ul_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu1c(Test_Ul_BFu0s_BFu1c, "Ul_BFu0s_BFu1c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu1i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Ul_BFu0s_BFu1i) C1{ FL Fs:0 Fi:1}



static void Test_Ul_BFu0s_BFu1i()
{
  {
    init_simple_test("Ul_BFu0s_BFu1i");
    static Ul_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu1i(Test_Ul_BFu0s_BFu1i, "Ul_BFu0s_BFu1i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu1ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Ul_BFu0s_BFu1ll) C1{ FL Fs:0 FL:1}



static void Test_Ul_BFu0s_BFu1ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu1ll");
    static Ul_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu1ll(Test_Ul_BFu0s_BFu1ll, "Ul_BFu0s_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu1s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Ul_BFu0s_BFu1s) C1{ FL Fs:0 Fs:1}



static void Test_Ul_BFu0s_BFu1s()
{
  {
    init_simple_test("Ul_BFu0s_BFu1s");
    static Ul_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu1s(Test_Ul_BFu0s_BFu1s, "Ul_BFu0s_BFu1s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu31i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Ul_BFu0s_BFu31i) C1{ FL Fs:0 Fi:31}



static void Test_Ul_BFu0s_BFu31i()
{
  {
    init_simple_test("Ul_BFu0s_BFu31i");
    static Ul_BFu0s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu31i(Test_Ul_BFu0s_BFu31i, "Ul_BFu0s_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu31ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Ul_BFu0s_BFu31ll) C1{ FL Fs:0 FL:31}



static void Test_Ul_BFu0s_BFu31ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu31ll");
    static Ul_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu31ll(Test_Ul_BFu0s_BFu31ll, "Ul_BFu0s_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu32i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Ul_BFu0s_BFu32i) C1{ FL Fs:0 Fi:32}



static void Test_Ul_BFu0s_BFu32i()
{
  {
    init_simple_test("Ul_BFu0s_BFu32i");
    static Ul_BFu0s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu32i(Test_Ul_BFu0s_BFu32i, "Ul_BFu0s_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu32ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Ul_BFu0s_BFu32ll) C1{ FL Fs:0 FL:32}



static void Test_Ul_BFu0s_BFu32ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu32ll");
    static Ul_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu32ll(Test_Ul_BFu0s_BFu32ll, "Ul_BFu0s_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu33  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Ul_BFu0s_BFu33) C1{ FL Fs:0 FL:33}



static void Test_Ul_BFu0s_BFu33()
{
  {
    init_simple_test("Ul_BFu0s_BFu33");
    static Ul_BFu0s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu33(Test_Ul_BFu0s_BFu33, "Ul_BFu0s_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu7c  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Ul_BFu0s_BFu7c) C1{ FL Fs:0 Fc:7}



static void Test_Ul_BFu0s_BFu7c()
{
  {
    init_simple_test("Ul_BFu0s_BFu7c");
    static Ul_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu7c(Test_Ul_BFu0s_BFu7c, "Ul_BFu0s_BFu7c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu7i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Ul_BFu0s_BFu7i) C1{ FL Fs:0 Fi:7}



static void Test_Ul_BFu0s_BFu7i()
{
  {
    init_simple_test("Ul_BFu0s_BFu7i");
    static Ul_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu7i(Test_Ul_BFu0s_BFu7i, "Ul_BFu0s_BFu7i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu7ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Ul_BFu0s_BFu7ll) C1{ FL Fs:0 FL:7}



static void Test_Ul_BFu0s_BFu7ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu7ll");
    static Ul_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu7ll(Test_Ul_BFu0s_BFu7ll, "Ul_BFu0s_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu7s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Ul_BFu0s_BFu7s) C1{ FL Fs:0 Fs:7}



static void Test_Ul_BFu0s_BFu7s()
{
  {
    init_simple_test("Ul_BFu0s_BFu7s");
    static Ul_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu7s(Test_Ul_BFu0s_BFu7s, "Ul_BFu0s_BFu7s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu8c  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Ul_BFu0s_BFu8c) C1{ FL Fs:0 Fc:8}



static void Test_Ul_BFu0s_BFu8c()
{
  {
    init_simple_test("Ul_BFu0s_BFu8c");
    static Ul_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu8c(Test_Ul_BFu0s_BFu8c, "Ul_BFu0s_BFu8c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu8i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Ul_BFu0s_BFu8i) C1{ FL Fs:0 Fi:8}



static void Test_Ul_BFu0s_BFu8i()
{
  {
    init_simple_test("Ul_BFu0s_BFu8i");
    static Ul_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu8i(Test_Ul_BFu0s_BFu8i, "Ul_BFu0s_BFu8i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu8ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Ul_BFu0s_BFu8ll) C1{ FL Fs:0 FL:8}



static void Test_Ul_BFu0s_BFu8ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu8ll");
    static Ul_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu8ll(Test_Ul_BFu0s_BFu8ll, "Ul_BFu0s_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu8s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Ul_BFu0s_BFu8s) C1{ FL Fs:0 Fs:8}



static void Test_Ul_BFu0s_BFu8s()
{
  {
    init_simple_test("Ul_BFu0s_BFu8s");
    static Ul_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu8s(Test_Ul_BFu0s_BFu8s, "Ul_BFu0s_BFu8s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu9i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Ul_BFu0s_BFu9i) C1{ FL Fs:0 Fi:9}



static void Test_Ul_BFu0s_BFu9i()
{
  {
    init_simple_test("Ul_BFu0s_BFu9i");
    static Ul_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu9i(Test_Ul_BFu0s_BFu9i, "Ul_BFu0s_BFu9i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu9ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Ul_BFu0s_BFu9ll) C1{ FL Fs:0 FL:9}



static void Test_Ul_BFu0s_BFu9ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu9ll");
    static Ul_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu9ll(Test_Ul_BFu0s_BFu9ll, "Ul_BFu0s_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_BFu9s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Ul_BFu0s_BFu9s) C1{ FL Fs:0 Fs:9}



static void Test_Ul_BFu0s_BFu9s()
{
  {
    init_simple_test("Ul_BFu0s_BFu9s");
    static Ul_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_BFu9s(Test_Ul_BFu0s_BFu9s, "Ul_BFu0s_BFu9s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_C  {
  __tsu64 v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Ul_BFu0s_C) C1{ FL Fs:0 Fc}



static void Test_Ul_BFu0s_C()
{
  {
    init_simple_test("Ul_BFu0s_C");
    static Ul_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_C.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_C(Test_Ul_BFu0s_C, "Ul_BFu0s_C", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_D  {
  __tsu64 v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Ul_BFu0s_D) C1{ FL Fs:0 FL}



static void Test_Ul_BFu0s_D()
{
  {
    init_simple_test("Ul_BFu0s_D");
    static Ul_BFu0s_D lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_D.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_D(Test_Ul_BFu0s_D, "Ul_BFu0s_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_F  {
  __tsu64 v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Ul_BFu0s_F) C1{ FL Fs:0 Fi}



static void Test_Ul_BFu0s_F()
{
  {
    init_simple_test("Ul_BFu0s_F");
    static Ul_BFu0s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_F.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_F(Test_Ul_BFu0s_F, "Ul_BFu0s_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_I  {
  __tsu64 v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Ul_BFu0s_I) C1{ FL Fs:0 Fi}



static void Test_Ul_BFu0s_I()
{
  {
    init_simple_test("Ul_BFu0s_I");
    static Ul_BFu0s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_I.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_I(Test_Ul_BFu0s_I, "Ul_BFu0s_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_Ip  {
  __tsu64 v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Ul_BFu0s_Ip) C1{ FL Fs:0 Fp}



static void Test_Ul_BFu0s_Ip()
{
  {
    init_simple_test("Ul_BFu0s_Ip");
    static Ul_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Ip.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_Ip(Test_Ul_BFu0s_Ip, "Ul_BFu0s_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_L  {
  __tsu64 v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Ul_BFu0s_L) C1{ FL Fs:0 FL}



static void Test_Ul_BFu0s_L()
{
  {
    init_simple_test("Ul_BFu0s_L");
    static Ul_BFu0s_L lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_L.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_L(Test_Ul_BFu0s_L, "Ul_BFu0s_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_S  {
  __tsu64 v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Ul_BFu0s_S) C1{ FL Fs:0 Fs}



static void Test_Ul_BFu0s_S()
{
  {
    init_simple_test("Ul_BFu0s_S");
    static Ul_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_S.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_S(Test_Ul_BFu0s_S, "Ul_BFu0s_S", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_Uc  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Ul_BFu0s_Uc) C1{ FL Fs:0 Fc}



static void Test_Ul_BFu0s_Uc()
{
  {
    init_simple_test("Ul_BFu0s_Uc");
    static Ul_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_Uc(Test_Ul_BFu0s_Uc, "Ul_BFu0s_Uc", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_Ui  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Ul_BFu0s_Ui) C1{ FL Fs:0 Fi}



static void Test_Ul_BFu0s_Ui()
{
  {
    init_simple_test("Ul_BFu0s_Ui");
    static Ul_BFu0s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_Ui(Test_Ul_BFu0s_Ui, "Ul_BFu0s_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_Ul  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Ul_BFu0s_Ul) C1{ FL Fs:0 FL}



static void Test_Ul_BFu0s_Ul()
{
  {
    init_simple_test("Ul_BFu0s_Ul");
    static Ul_BFu0s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Ul.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_Ul(Test_Ul_BFu0s_Ul, "Ul_BFu0s_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_Us  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Ul_BFu0s_Us) C1{ FL Fs:0 Fs}



static void Test_Ul_BFu0s_Us()
{
  {
    init_simple_test("Ul_BFu0s_Us");
    static Ul_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Us.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_Us(Test_Ul_BFu0s_Us, "Ul_BFu0s_Us", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu0s_Vp  {
  __tsu64 v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Ul_BFu0s_Vp) C1{ FL Fs:0 Fp}



static void Test_Ul_BFu0s_Vp()
{
  {
    init_simple_test("Ul_BFu0s_Vp");
    static Ul_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Vp.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vUl_BFu0s_Vp(Test_Ul_BFu0s_Vp, "Ul_BFu0s_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Ul_BFu15i_BFu0c) C1{ FL Fi:15 Fc:0}



static void Test_Ul_BFu15i_BFu0c()
{
  {
    init_simple_test("Ul_BFu15i_BFu0c");
    static Ul_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu15i_BFu0c(Test_Ul_BFu15i_BFu0c, "Ul_BFu15i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Ul_BFu15i_BFu0i) C1{ FL Fi:15 Fi:0}



static void Test_Ul_BFu15i_BFu0i()
{
  {
    init_simple_test("Ul_BFu15i_BFu0i");
    static Ul_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu15i_BFu0i(Test_Ul_BFu15i_BFu0i, "Ul_BFu15i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Ul_BFu15i_BFu0ll) C1{ FL Fi:15 FL:0}



static void Test_Ul_BFu15i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu15i_BFu0ll");
    static Ul_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu15i_BFu0ll(Test_Ul_BFu15i_BFu0ll, "Ul_BFu15i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Ul_BFu15i_BFu0s) C1{ FL Fi:15 Fs:0}



static void Test_Ul_BFu15i_BFu0s()
{
  {
    init_simple_test("Ul_BFu15i_BFu0s");
    static Ul_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu15i_BFu0s(Test_Ul_BFu15i_BFu0s, "Ul_BFu15i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Ul_BFu15ll_BFu0c) C1{ FL FL:15 Fc:0}



static void Test_Ul_BFu15ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu15ll_BFu0c");
    static Ul_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu15ll_BFu0c(Test_Ul_BFu15ll_BFu0c, "Ul_BFu15ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Ul_BFu15ll_BFu0i) C1{ FL FL:15 Fi:0}



static void Test_Ul_BFu15ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu15ll_BFu0i");
    static Ul_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu15ll_BFu0i(Test_Ul_BFu15ll_BFu0i, "Ul_BFu15ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Ul_BFu15ll_BFu0ll) C1{ FL FL:15 FL:0}



static void Test_Ul_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu15ll_BFu0ll");
    static Ul_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu15ll_BFu0ll(Test_Ul_BFu15ll_BFu0ll, "Ul_BFu15ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Ul_BFu15ll_BFu0s) C1{ FL FL:15 Fs:0}



static void Test_Ul_BFu15ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu15ll_BFu0s");
    static Ul_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu15ll_BFu0s(Test_Ul_BFu15ll_BFu0s, "Ul_BFu15ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Ul_BFu15s_BFu0c) C1{ FL Fs:15 Fc:0}



static void Test_Ul_BFu15s_BFu0c()
{
  {
    init_simple_test("Ul_BFu15s_BFu0c");
    static Ul_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu15s_BFu0c(Test_Ul_BFu15s_BFu0c, "Ul_BFu15s_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Ul_BFu15s_BFu0i) C1{ FL Fs:15 Fi:0}



static void Test_Ul_BFu15s_BFu0i()
{
  {
    init_simple_test("Ul_BFu15s_BFu0i");
    static Ul_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu15s_BFu0i(Test_Ul_BFu15s_BFu0i, "Ul_BFu15s_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Ul_BFu15s_BFu0ll) C1{ FL Fs:15 FL:0}



static void Test_Ul_BFu15s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu15s_BFu0ll");
    static Ul_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu15s_BFu0ll(Test_Ul_BFu15s_BFu0ll, "Ul_BFu15s_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu15s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Ul_BFu15s_BFu0s) C1{ FL Fs:15 Fs:0}



static void Test_Ul_BFu15s_BFu0s()
{
  {
    init_simple_test("Ul_BFu15s_BFu0s");
    static Ul_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu15s_BFu0s(Test_Ul_BFu15s_BFu0s, "Ul_BFu15s_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Ul_BFu16i_BFu0c) C1{ FL Fi:16 Fc:0}



static void Test_Ul_BFu16i_BFu0c()
{
  {
    init_simple_test("Ul_BFu16i_BFu0c");
    static Ul_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu16i_BFu0c(Test_Ul_BFu16i_BFu0c, "Ul_BFu16i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Ul_BFu16i_BFu0i) C1{ FL Fi:16 Fi:0}



static void Test_Ul_BFu16i_BFu0i()
{
  {
    init_simple_test("Ul_BFu16i_BFu0i");
    static Ul_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu16i_BFu0i(Test_Ul_BFu16i_BFu0i, "Ul_BFu16i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Ul_BFu16i_BFu0ll) C1{ FL Fi:16 FL:0}



static void Test_Ul_BFu16i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu16i_BFu0ll");
    static Ul_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu16i_BFu0ll(Test_Ul_BFu16i_BFu0ll, "Ul_BFu16i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Ul_BFu16i_BFu0s) C1{ FL Fi:16 Fs:0}



static void Test_Ul_BFu16i_BFu0s()
{
  {
    init_simple_test("Ul_BFu16i_BFu0s");
    static Ul_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu16i_BFu0s(Test_Ul_BFu16i_BFu0s, "Ul_BFu16i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Ul_BFu16ll_BFu0c) C1{ FL FL:16 Fc:0}



static void Test_Ul_BFu16ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu16ll_BFu0c");
    static Ul_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu16ll_BFu0c(Test_Ul_BFu16ll_BFu0c, "Ul_BFu16ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Ul_BFu16ll_BFu0i) C1{ FL FL:16 Fi:0}



static void Test_Ul_BFu16ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu16ll_BFu0i");
    static Ul_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu16ll_BFu0i(Test_Ul_BFu16ll_BFu0i, "Ul_BFu16ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Ul_BFu16ll_BFu0ll) C1{ FL FL:16 FL:0}



static void Test_Ul_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu16ll_BFu0ll");
    static Ul_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu16ll_BFu0ll(Test_Ul_BFu16ll_BFu0ll, "Ul_BFu16ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Ul_BFu16ll_BFu0s) C1{ FL FL:16 Fs:0}



static void Test_Ul_BFu16ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu16ll_BFu0s");
    static Ul_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu16ll_BFu0s(Test_Ul_BFu16ll_BFu0s, "Ul_BFu16ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Ul_BFu16s_BFu0c) C1{ FL Fs:16 Fc:0}



static void Test_Ul_BFu16s_BFu0c()
{
  {
    init_simple_test("Ul_BFu16s_BFu0c");
    static Ul_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu16s_BFu0c(Test_Ul_BFu16s_BFu0c, "Ul_BFu16s_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Ul_BFu16s_BFu0i) C1{ FL Fs:16 Fi:0}



static void Test_Ul_BFu16s_BFu0i()
{
  {
    init_simple_test("Ul_BFu16s_BFu0i");
    static Ul_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu16s_BFu0i(Test_Ul_BFu16s_BFu0i, "Ul_BFu16s_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Ul_BFu16s_BFu0ll) C1{ FL Fs:16 FL:0}



static void Test_Ul_BFu16s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu16s_BFu0ll");
    static Ul_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu16s_BFu0ll(Test_Ul_BFu16s_BFu0ll, "Ul_BFu16s_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu16s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Ul_BFu16s_BFu0s) C1{ FL Fs:16 Fs:0}



static void Test_Ul_BFu16s_BFu0s()
{
  {
    init_simple_test("Ul_BFu16s_BFu0s");
    static Ul_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu16s_BFu0s(Test_Ul_BFu16s_BFu0s, "Ul_BFu16s_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Ul_BFu17i_BFu0c) C1{ FL Fi:17 Fc:0}



static void Test_Ul_BFu17i_BFu0c()
{
  {
    init_simple_test("Ul_BFu17i_BFu0c");
    static Ul_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu17i_BFu0c(Test_Ul_BFu17i_BFu0c, "Ul_BFu17i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Ul_BFu17i_BFu0i) C1{ FL Fi:17 Fi:0}



static void Test_Ul_BFu17i_BFu0i()
{
  {
    init_simple_test("Ul_BFu17i_BFu0i");
    static Ul_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu17i_BFu0i(Test_Ul_BFu17i_BFu0i, "Ul_BFu17i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Ul_BFu17i_BFu0ll) C1{ FL Fi:17 FL:0}



static void Test_Ul_BFu17i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu17i_BFu0ll");
    static Ul_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu17i_BFu0ll(Test_Ul_BFu17i_BFu0ll, "Ul_BFu17i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Ul_BFu17i_BFu0s) C1{ FL Fi:17 Fs:0}



static void Test_Ul_BFu17i_BFu0s()
{
  {
    init_simple_test("Ul_BFu17i_BFu0s");
    static Ul_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu17i_BFu0s(Test_Ul_BFu17i_BFu0s, "Ul_BFu17i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Ul_BFu17ll_BFu0c) C1{ FL FL:17 Fc:0}



static void Test_Ul_BFu17ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu17ll_BFu0c");
    static Ul_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu17ll_BFu0c(Test_Ul_BFu17ll_BFu0c, "Ul_BFu17ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Ul_BFu17ll_BFu0i) C1{ FL FL:17 Fi:0}



static void Test_Ul_BFu17ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu17ll_BFu0i");
    static Ul_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu17ll_BFu0i(Test_Ul_BFu17ll_BFu0i, "Ul_BFu17ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Ul_BFu17ll_BFu0ll) C1{ FL FL:17 FL:0}



static void Test_Ul_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu17ll_BFu0ll");
    static Ul_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu17ll_BFu0ll(Test_Ul_BFu17ll_BFu0ll, "Ul_BFu17ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu17ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Ul_BFu17ll_BFu0s) C1{ FL FL:17 Fs:0}



static void Test_Ul_BFu17ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu17ll_BFu0s");
    static Ul_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu17ll_BFu0s(Test_Ul_BFu17ll_BFu0s, "Ul_BFu17ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1c_BFu0c  {
  __tsu64 v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu1c_BFu0c) C1{ FL Fc:1 Fc:0}



static void Test_Ul_BFu1c_BFu0c()
{
  {
    init_simple_test("Ul_BFu1c_BFu0c");
    static Ul_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu1c_BFu0c(Test_Ul_BFu1c_BFu0c, "Ul_BFu1c_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1c_BFu0i  {
  __tsu64 v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu1c_BFu0i) C1{ FL Fc:1 Fi:0}



static void Test_Ul_BFu1c_BFu0i()
{
  {
    init_simple_test("Ul_BFu1c_BFu0i");
    static Ul_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu1c_BFu0i(Test_Ul_BFu1c_BFu0i, "Ul_BFu1c_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1c_BFu0ll  {
  __tsu64 v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu1c_BFu0ll) C1{ FL Fc:1 FL:0}



static void Test_Ul_BFu1c_BFu0ll()
{
  {
    init_simple_test("Ul_BFu1c_BFu0ll");
    static Ul_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu1c_BFu0ll(Test_Ul_BFu1c_BFu0ll, "Ul_BFu1c_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1c_BFu0s  {
  __tsu64 v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu1c_BFu0s) C1{ FL Fc:1 Fs:0}



static void Test_Ul_BFu1c_BFu0s()
{
  {
    init_simple_test("Ul_BFu1c_BFu0s");
    static Ul_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu1c_BFu0s(Test_Ul_BFu1c_BFu0s, "Ul_BFu1c_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu1i_BFu0c) C1{ FL Fi:1 Fc:0}



static void Test_Ul_BFu1i_BFu0c()
{
  {
    init_simple_test("Ul_BFu1i_BFu0c");
    static Ul_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu1i_BFu0c(Test_Ul_BFu1i_BFu0c, "Ul_BFu1i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu1i_BFu0i) C1{ FL Fi:1 Fi:0}



static void Test_Ul_BFu1i_BFu0i()
{
  {
    init_simple_test("Ul_BFu1i_BFu0i");
    static Ul_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu1i_BFu0i(Test_Ul_BFu1i_BFu0i, "Ul_BFu1i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu1i_BFu0ll) C1{ FL Fi:1 FL:0}



static void Test_Ul_BFu1i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu1i_BFu0ll");
    static Ul_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu1i_BFu0ll(Test_Ul_BFu1i_BFu0ll, "Ul_BFu1i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu1i_BFu0s) C1{ FL Fi:1 Fs:0}



static void Test_Ul_BFu1i_BFu0s()
{
  {
    init_simple_test("Ul_BFu1i_BFu0s");
    static Ul_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu1i_BFu0s(Test_Ul_BFu1i_BFu0s, "Ul_BFu1i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu1ll_BFu0c) C1{ FL FL:1 Fc:0}



static void Test_Ul_BFu1ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu1ll_BFu0c");
    static Ul_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu1ll_BFu0c(Test_Ul_BFu1ll_BFu0c, "Ul_BFu1ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu1ll_BFu0i) C1{ FL FL:1 Fi:0}



static void Test_Ul_BFu1ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu1ll_BFu0i");
    static Ul_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu1ll_BFu0i(Test_Ul_BFu1ll_BFu0i, "Ul_BFu1ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu1ll_BFu0ll) C1{ FL FL:1 FL:0}



static void Test_Ul_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu1ll_BFu0ll");
    static Ul_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu1ll_BFu0ll(Test_Ul_BFu1ll_BFu0ll, "Ul_BFu1ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu1ll_BFu0s) C1{ FL FL:1 Fs:0}



static void Test_Ul_BFu1ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu1ll_BFu0s");
    static Ul_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu1ll_BFu0s(Test_Ul_BFu1ll_BFu0s, "Ul_BFu1ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu1s_BFu0c) C1{ FL Fs:1 Fc:0}



static void Test_Ul_BFu1s_BFu0c()
{
  {
    init_simple_test("Ul_BFu1s_BFu0c");
    static Ul_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu1s_BFu0c(Test_Ul_BFu1s_BFu0c, "Ul_BFu1s_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu1s_BFu0i) C1{ FL Fs:1 Fi:0}



static void Test_Ul_BFu1s_BFu0i()
{
  {
    init_simple_test("Ul_BFu1s_BFu0i");
    static Ul_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu1s_BFu0i(Test_Ul_BFu1s_BFu0i, "Ul_BFu1s_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu1s_BFu0ll) C1{ FL Fs:1 FL:0}



static void Test_Ul_BFu1s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu1s_BFu0ll");
    static Ul_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu1s_BFu0ll(Test_Ul_BFu1s_BFu0ll, "Ul_BFu1s_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu1s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu1s_BFu0s) C1{ FL Fs:1 Fs:0}



static void Test_Ul_BFu1s_BFu0s()
{
  {
    init_simple_test("Ul_BFu1s_BFu0s");
    static Ul_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu1s_BFu0s(Test_Ul_BFu1s_BFu0s, "Ul_BFu1s_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Ul_BFu31i_BFu0c) C1{ FL Fi:31 Fc:0}



static void Test_Ul_BFu31i_BFu0c()
{
  {
    init_simple_test("Ul_BFu31i_BFu0c");
    static Ul_BFu31i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu31i_BFu0c(Test_Ul_BFu31i_BFu0c, "Ul_BFu31i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Ul_BFu31i_BFu0i) C1{ FL Fi:31 Fi:0}



static void Test_Ul_BFu31i_BFu0i()
{
  {
    init_simple_test("Ul_BFu31i_BFu0i");
    static Ul_BFu31i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu31i_BFu0i(Test_Ul_BFu31i_BFu0i, "Ul_BFu31i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Ul_BFu31i_BFu0ll) C1{ FL Fi:31 FL:0}



static void Test_Ul_BFu31i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu31i_BFu0ll");
    static Ul_BFu31i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu31i_BFu0ll(Test_Ul_BFu31i_BFu0ll, "Ul_BFu31i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Ul_BFu31i_BFu0s) C1{ FL Fi:31 Fs:0}



static void Test_Ul_BFu31i_BFu0s()
{
  {
    init_simple_test("Ul_BFu31i_BFu0s");
    static Ul_BFu31i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu31i_BFu0s(Test_Ul_BFu31i_BFu0s, "Ul_BFu31i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Ul_BFu31ll_BFu0c) C1{ FL FL:31 Fc:0}



static void Test_Ul_BFu31ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu31ll_BFu0c");
    static Ul_BFu31ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu31ll_BFu0c(Test_Ul_BFu31ll_BFu0c, "Ul_BFu31ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Ul_BFu31ll_BFu0i) C1{ FL FL:31 Fi:0}



static void Test_Ul_BFu31ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu31ll_BFu0i");
    static Ul_BFu31ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu31ll_BFu0i(Test_Ul_BFu31ll_BFu0i, "Ul_BFu31ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Ul_BFu31ll_BFu0ll) C1{ FL FL:31 FL:0}



static void Test_Ul_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu31ll_BFu0ll");
    static Ul_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu31ll_BFu0ll(Test_Ul_BFu31ll_BFu0ll, "Ul_BFu31ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu31ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Ul_BFu31ll_BFu0s) C1{ FL FL:31 Fs:0}



static void Test_Ul_BFu31ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu31ll_BFu0s");
    static Ul_BFu31ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu31ll_BFu0s(Test_Ul_BFu31ll_BFu0s, "Ul_BFu31ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Ul_BFu32i_BFu0c) C1{ FL Fi:32 Fc:0}



static void Test_Ul_BFu32i_BFu0c()
{
  {
    init_simple_test("Ul_BFu32i_BFu0c");
    static Ul_BFu32i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu32i_BFu0c(Test_Ul_BFu32i_BFu0c, "Ul_BFu32i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Ul_BFu32i_BFu0i) C1{ FL Fi:32 Fi:0}



static void Test_Ul_BFu32i_BFu0i()
{
  {
    init_simple_test("Ul_BFu32i_BFu0i");
    static Ul_BFu32i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu32i_BFu0i(Test_Ul_BFu32i_BFu0i, "Ul_BFu32i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Ul_BFu32i_BFu0ll) C1{ FL Fi:32 FL:0}



static void Test_Ul_BFu32i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu32i_BFu0ll");
    static Ul_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu32i_BFu0ll(Test_Ul_BFu32i_BFu0ll, "Ul_BFu32i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Ul_BFu32i_BFu0s) C1{ FL Fi:32 Fs:0}



static void Test_Ul_BFu32i_BFu0s()
{
  {
    init_simple_test("Ul_BFu32i_BFu0s");
    static Ul_BFu32i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu32i_BFu0s(Test_Ul_BFu32i_BFu0s, "Ul_BFu32i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Ul_BFu32ll_BFu0c) C1{ FL FL:32 Fc:0}



static void Test_Ul_BFu32ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu32ll_BFu0c");
    static Ul_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu32ll_BFu0c(Test_Ul_BFu32ll_BFu0c, "Ul_BFu32ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Ul_BFu32ll_BFu0i) C1{ FL FL:32 Fi:0}



static void Test_Ul_BFu32ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu32ll_BFu0i");
    static Ul_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu32ll_BFu0i(Test_Ul_BFu32ll_BFu0i, "Ul_BFu32ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Ul_BFu32ll_BFu0ll) C1{ FL FL:32 FL:0}



static void Test_Ul_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu32ll_BFu0ll");
    static Ul_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu32ll_BFu0ll(Test_Ul_BFu32ll_BFu0ll, "Ul_BFu32ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu32ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Ul_BFu32ll_BFu0s) C1{ FL FL:32 Fs:0}



static void Test_Ul_BFu32ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu32ll_BFu0s");
    static Ul_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu32ll_BFu0s(Test_Ul_BFu32ll_BFu0s, "Ul_BFu32ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu33_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Ul_BFu33_BFu0c) C1{ FL FL:33 Fc:0}



static void Test_Ul_BFu33_BFu0c()
{
  {
    init_simple_test("Ul_BFu33_BFu0c");
    static Ul_BFu33_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu33_BFu0c(Test_Ul_BFu33_BFu0c, "Ul_BFu33_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu33_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Ul_BFu33_BFu0i) C1{ FL FL:33 Fi:0}



static void Test_Ul_BFu33_BFu0i()
{
  {
    init_simple_test("Ul_BFu33_BFu0i");
    static Ul_BFu33_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu33_BFu0i(Test_Ul_BFu33_BFu0i, "Ul_BFu33_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu33_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Ul_BFu33_BFu0ll) C1{ FL FL:33 FL:0}



static void Test_Ul_BFu33_BFu0ll()
{
  {
    init_simple_test("Ul_BFu33_BFu0ll");
    static Ul_BFu33_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu33_BFu0ll(Test_Ul_BFu33_BFu0ll, "Ul_BFu33_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu33_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Ul_BFu33_BFu0s) C1{ FL FL:33 Fs:0}



static void Test_Ul_BFu33_BFu0s()
{
  {
    init_simple_test("Ul_BFu33_BFu0s");
    static Ul_BFu33_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu33_BFu0s(Test_Ul_BFu33_BFu0s, "Ul_BFu33_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7c_BFu0c  {
  __tsu64 v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Ul_BFu7c_BFu0c) C1{ FL Fc:7 Fc:0}



static void Test_Ul_BFu7c_BFu0c()
{
  {
    init_simple_test("Ul_BFu7c_BFu0c");
    static Ul_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu7c_BFu0c(Test_Ul_BFu7c_BFu0c, "Ul_BFu7c_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7c_BFu0i  {
  __tsu64 v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Ul_BFu7c_BFu0i) C1{ FL Fc:7 Fi:0}



static void Test_Ul_BFu7c_BFu0i()
{
  {
    init_simple_test("Ul_BFu7c_BFu0i");
    static Ul_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu7c_BFu0i(Test_Ul_BFu7c_BFu0i, "Ul_BFu7c_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7c_BFu0ll  {
  __tsu64 v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Ul_BFu7c_BFu0ll) C1{ FL Fc:7 FL:0}



static void Test_Ul_BFu7c_BFu0ll()
{
  {
    init_simple_test("Ul_BFu7c_BFu0ll");
    static Ul_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu7c_BFu0ll(Test_Ul_BFu7c_BFu0ll, "Ul_BFu7c_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7c_BFu0s  {
  __tsu64 v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Ul_BFu7c_BFu0s) C1{ FL Fc:7 Fs:0}



static void Test_Ul_BFu7c_BFu0s()
{
  {
    init_simple_test("Ul_BFu7c_BFu0s");
    static Ul_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu7c_BFu0s(Test_Ul_BFu7c_BFu0s, "Ul_BFu7c_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Ul_BFu7i_BFu0c) C1{ FL Fi:7 Fc:0}



static void Test_Ul_BFu7i_BFu0c()
{
  {
    init_simple_test("Ul_BFu7i_BFu0c");
    static Ul_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu7i_BFu0c(Test_Ul_BFu7i_BFu0c, "Ul_BFu7i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Ul_BFu7i_BFu0i) C1{ FL Fi:7 Fi:0}



static void Test_Ul_BFu7i_BFu0i()
{
  {
    init_simple_test("Ul_BFu7i_BFu0i");
    static Ul_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu7i_BFu0i(Test_Ul_BFu7i_BFu0i, "Ul_BFu7i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Ul_BFu7i_BFu0ll) C1{ FL Fi:7 FL:0}



static void Test_Ul_BFu7i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu7i_BFu0ll");
    static Ul_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu7i_BFu0ll(Test_Ul_BFu7i_BFu0ll, "Ul_BFu7i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Ul_BFu7i_BFu0s) C1{ FL Fi:7 Fs:0}



static void Test_Ul_BFu7i_BFu0s()
{
  {
    init_simple_test("Ul_BFu7i_BFu0s");
    static Ul_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu7i_BFu0s(Test_Ul_BFu7i_BFu0s, "Ul_BFu7i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Ul_BFu7ll_BFu0c) C1{ FL FL:7 Fc:0}



static void Test_Ul_BFu7ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu7ll_BFu0c");
    static Ul_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu7ll_BFu0c(Test_Ul_BFu7ll_BFu0c, "Ul_BFu7ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Ul_BFu7ll_BFu0i) C1{ FL FL:7 Fi:0}



static void Test_Ul_BFu7ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu7ll_BFu0i");
    static Ul_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu7ll_BFu0i(Test_Ul_BFu7ll_BFu0i, "Ul_BFu7ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Ul_BFu7ll_BFu0ll) C1{ FL FL:7 FL:0}



static void Test_Ul_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu7ll_BFu0ll");
    static Ul_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu7ll_BFu0ll(Test_Ul_BFu7ll_BFu0ll, "Ul_BFu7ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Ul_BFu7ll_BFu0s) C1{ FL FL:7 Fs:0}



static void Test_Ul_BFu7ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu7ll_BFu0s");
    static Ul_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu7ll_BFu0s(Test_Ul_BFu7ll_BFu0s, "Ul_BFu7ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Ul_BFu7s_BFu0c) C1{ FL Fs:7 Fc:0}



static void Test_Ul_BFu7s_BFu0c()
{
  {
    init_simple_test("Ul_BFu7s_BFu0c");
    static Ul_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu7s_BFu0c(Test_Ul_BFu7s_BFu0c, "Ul_BFu7s_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Ul_BFu7s_BFu0i) C1{ FL Fs:7 Fi:0}



static void Test_Ul_BFu7s_BFu0i()
{
  {
    init_simple_test("Ul_BFu7s_BFu0i");
    static Ul_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu7s_BFu0i(Test_Ul_BFu7s_BFu0i, "Ul_BFu7s_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Ul_BFu7s_BFu0ll) C1{ FL Fs:7 FL:0}



static void Test_Ul_BFu7s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu7s_BFu0ll");
    static Ul_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu7s_BFu0ll(Test_Ul_BFu7s_BFu0ll, "Ul_BFu7s_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu7s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Ul_BFu7s_BFu0s) C1{ FL Fs:7 Fs:0}



static void Test_Ul_BFu7s_BFu0s()
{
  {
    init_simple_test("Ul_BFu7s_BFu0s");
    static Ul_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu7s_BFu0s(Test_Ul_BFu7s_BFu0s, "Ul_BFu7s_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8c_BFu0c  {
  __tsu64 v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Ul_BFu8c_BFu0c) C1{ FL Fc:8 Fc:0}



static void Test_Ul_BFu8c_BFu0c()
{
  {
    init_simple_test("Ul_BFu8c_BFu0c");
    static Ul_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu8c_BFu0c(Test_Ul_BFu8c_BFu0c, "Ul_BFu8c_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8c_BFu0i  {
  __tsu64 v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Ul_BFu8c_BFu0i) C1{ FL Fc:8 Fi:0}



static void Test_Ul_BFu8c_BFu0i()
{
  {
    init_simple_test("Ul_BFu8c_BFu0i");
    static Ul_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu8c_BFu0i(Test_Ul_BFu8c_BFu0i, "Ul_BFu8c_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8c_BFu0ll  {
  __tsu64 v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Ul_BFu8c_BFu0ll) C1{ FL Fc:8 FL:0}



static void Test_Ul_BFu8c_BFu0ll()
{
  {
    init_simple_test("Ul_BFu8c_BFu0ll");
    static Ul_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu8c_BFu0ll(Test_Ul_BFu8c_BFu0ll, "Ul_BFu8c_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8c_BFu0s  {
  __tsu64 v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Ul_BFu8c_BFu0s) C1{ FL Fc:8 Fs:0}



static void Test_Ul_BFu8c_BFu0s()
{
  {
    init_simple_test("Ul_BFu8c_BFu0s");
    static Ul_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu8c_BFu0s(Test_Ul_BFu8c_BFu0s, "Ul_BFu8c_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Ul_BFu8i_BFu0c) C1{ FL Fi:8 Fc:0}



static void Test_Ul_BFu8i_BFu0c()
{
  {
    init_simple_test("Ul_BFu8i_BFu0c");
    static Ul_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu8i_BFu0c(Test_Ul_BFu8i_BFu0c, "Ul_BFu8i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Ul_BFu8i_BFu0i) C1{ FL Fi:8 Fi:0}



static void Test_Ul_BFu8i_BFu0i()
{
  {
    init_simple_test("Ul_BFu8i_BFu0i");
    static Ul_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu8i_BFu0i(Test_Ul_BFu8i_BFu0i, "Ul_BFu8i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Ul_BFu8i_BFu0ll) C1{ FL Fi:8 FL:0}



static void Test_Ul_BFu8i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu8i_BFu0ll");
    static Ul_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu8i_BFu0ll(Test_Ul_BFu8i_BFu0ll, "Ul_BFu8i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Ul_BFu8i_BFu0s) C1{ FL Fi:8 Fs:0}



static void Test_Ul_BFu8i_BFu0s()
{
  {
    init_simple_test("Ul_BFu8i_BFu0s");
    static Ul_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu8i_BFu0s(Test_Ul_BFu8i_BFu0s, "Ul_BFu8i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Ul_BFu8ll_BFu0c) C1{ FL FL:8 Fc:0}



static void Test_Ul_BFu8ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu8ll_BFu0c");
    static Ul_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu8ll_BFu0c(Test_Ul_BFu8ll_BFu0c, "Ul_BFu8ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Ul_BFu8ll_BFu0i) C1{ FL FL:8 Fi:0}



static void Test_Ul_BFu8ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu8ll_BFu0i");
    static Ul_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu8ll_BFu0i(Test_Ul_BFu8ll_BFu0i, "Ul_BFu8ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Ul_BFu8ll_BFu0ll) C1{ FL FL:8 FL:0}



static void Test_Ul_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu8ll_BFu0ll");
    static Ul_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu8ll_BFu0ll(Test_Ul_BFu8ll_BFu0ll, "Ul_BFu8ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Ul_BFu8ll_BFu0s) C1{ FL FL:8 Fs:0}



static void Test_Ul_BFu8ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu8ll_BFu0s");
    static Ul_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu8ll_BFu0s(Test_Ul_BFu8ll_BFu0s, "Ul_BFu8ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Ul_BFu8s_BFu0c) C1{ FL Fs:8 Fc:0}



static void Test_Ul_BFu8s_BFu0c()
{
  {
    init_simple_test("Ul_BFu8s_BFu0c");
    static Ul_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu8s_BFu0c(Test_Ul_BFu8s_BFu0c, "Ul_BFu8s_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Ul_BFu8s_BFu0i) C1{ FL Fs:8 Fi:0}



static void Test_Ul_BFu8s_BFu0i()
{
  {
    init_simple_test("Ul_BFu8s_BFu0i");
    static Ul_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu8s_BFu0i(Test_Ul_BFu8s_BFu0i, "Ul_BFu8s_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Ul_BFu8s_BFu0ll) C1{ FL Fs:8 FL:0}



static void Test_Ul_BFu8s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu8s_BFu0ll");
    static Ul_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu8s_BFu0ll(Test_Ul_BFu8s_BFu0ll, "Ul_BFu8s_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu8s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Ul_BFu8s_BFu0s) C1{ FL Fs:8 Fs:0}



static void Test_Ul_BFu8s_BFu0s()
{
  {
    init_simple_test("Ul_BFu8s_BFu0s");
    static Ul_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu8s_BFu0s(Test_Ul_BFu8s_BFu0s, "Ul_BFu8s_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Ul_BFu9i_BFu0c) C1{ FL Fi:9 Fc:0}



static void Test_Ul_BFu9i_BFu0c()
{
  {
    init_simple_test("Ul_BFu9i_BFu0c");
    static Ul_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu9i_BFu0c(Test_Ul_BFu9i_BFu0c, "Ul_BFu9i_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Ul_BFu9i_BFu0i) C1{ FL Fi:9 Fi:0}



static void Test_Ul_BFu9i_BFu0i()
{
  {
    init_simple_test("Ul_BFu9i_BFu0i");
    static Ul_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu9i_BFu0i(Test_Ul_BFu9i_BFu0i, "Ul_BFu9i_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Ul_BFu9i_BFu0ll) C1{ FL Fi:9 FL:0}



static void Test_Ul_BFu9i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu9i_BFu0ll");
    static Ul_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu9i_BFu0ll(Test_Ul_BFu9i_BFu0ll, "Ul_BFu9i_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Ul_BFu9i_BFu0s) C1{ FL Fi:9 Fs:0}



static void Test_Ul_BFu9i_BFu0s()
{
  {
    init_simple_test("Ul_BFu9i_BFu0s");
    static Ul_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu9i_BFu0s(Test_Ul_BFu9i_BFu0s, "Ul_BFu9i_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Ul_BFu9ll_BFu0c) C1{ FL FL:9 Fc:0}



static void Test_Ul_BFu9ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu9ll_BFu0c");
    static Ul_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu9ll_BFu0c(Test_Ul_BFu9ll_BFu0c, "Ul_BFu9ll_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Ul_BFu9ll_BFu0i) C1{ FL FL:9 Fi:0}



static void Test_Ul_BFu9ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu9ll_BFu0i");
    static Ul_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu9ll_BFu0i(Test_Ul_BFu9ll_BFu0i, "Ul_BFu9ll_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Ul_BFu9ll_BFu0ll) C1{ FL FL:9 FL:0}



static void Test_Ul_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu9ll_BFu0ll");
    static Ul_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu9ll_BFu0ll(Test_Ul_BFu9ll_BFu0ll, "Ul_BFu9ll_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Ul_BFu9ll_BFu0s) C1{ FL FL:9 Fs:0}



static void Test_Ul_BFu9ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu9ll_BFu0s");
    static Ul_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu9ll_BFu0s(Test_Ul_BFu9ll_BFu0s, "Ul_BFu9ll_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Ul_BFu9s_BFu0c) C1{ FL Fs:9 Fc:0}



static void Test_Ul_BFu9s_BFu0c()
{
  {
    init_simple_test("Ul_BFu9s_BFu0c");
    static Ul_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vUl_BFu9s_BFu0c(Test_Ul_BFu9s_BFu0c, "Ul_BFu9s_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Ul_BFu9s_BFu0i) C1{ FL Fs:9 Fi:0}



static void Test_Ul_BFu9s_BFu0i()
{
  {
    init_simple_test("Ul_BFu9s_BFu0i");
    static Ul_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vUl_BFu9s_BFu0i(Test_Ul_BFu9s_BFu0i, "Ul_BFu9s_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Ul_BFu9s_BFu0ll) C1{ FL Fs:9 FL:0}



static void Test_Ul_BFu9s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu9s_BFu0ll");
    static Ul_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUl_BFu9s_BFu0ll(Test_Ul_BFu9s_BFu0ll, "Ul_BFu9s_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_BFu9s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Ul_BFu9s_BFu0s) C1{ FL Fs:9 Fs:0}



static void Test_Ul_BFu9s_BFu0s()
{
  {
    init_simple_test("Ul_BFu9s_BFu0s");
    static Ul_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vUl_BFu9s_BFu0s(Test_Ul_BFu9s_BFu0s, "Ul_BFu9s_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_C_BFu0c  {
  __tsu64 v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Ul_C_BFu0c) C1{ FL Fc Fc:0}



static void Test_Ul_C_BFu0c()
{
  {
    init_simple_test("Ul_C_BFu0c");
    static Ul_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_C_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_C_BFu0c(Test_Ul_C_BFu0c, "Ul_C_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_C_BFu0i  {
  __tsu64 v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Ul_C_BFu0i) C1{ FL Fc Fi:0}



static void Test_Ul_C_BFu0i()
{
  {
    init_simple_test("Ul_C_BFu0i");
    static Ul_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_C_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_C_BFu0i(Test_Ul_C_BFu0i, "Ul_C_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_C_BFu0ll  {
  __tsu64 v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Ul_C_BFu0ll) C1{ FL Fc FL:0}



static void Test_Ul_C_BFu0ll()
{
  {
    init_simple_test("Ul_C_BFu0ll");
    static Ul_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_C_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_C_BFu0ll(Test_Ul_C_BFu0ll, "Ul_C_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_C_BFu0s  {
  __tsu64 v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Ul_C_BFu0s) C1{ FL Fc Fs:0}



static void Test_Ul_C_BFu0s()
{
  {
    init_simple_test("Ul_C_BFu0s");
    static Ul_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_C_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_C_BFu0s(Test_Ul_C_BFu0s, "Ul_C_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_D_BFu0c  {
  __tsu64 v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Ul_D_BFu0c) C1{ FL[2] Fc:0}



static void Test_Ul_D_BFu0c()
{
  {
    init_simple_test("Ul_D_BFu0c");
    static Ul_D_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(Ul_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_D_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_D_BFu0c(Test_Ul_D_BFu0c, "Ul_D_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_D_BFu0i  {
  __tsu64 v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Ul_D_BFu0i) C1{ FL[2] Fi:0}



static void Test_Ul_D_BFu0i()
{
  {
    init_simple_test("Ul_D_BFu0i");
    static Ul_D_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(Ul_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_D_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_D_BFu0i(Test_Ul_D_BFu0i, "Ul_D_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_D_BFu0ll  {
  __tsu64 v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Ul_D_BFu0ll) C1{ FL[2] FL:0}



static void Test_Ul_D_BFu0ll()
{
  {
    init_simple_test("Ul_D_BFu0ll");
    static Ul_D_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(Ul_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_D_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_D_BFu0ll(Test_Ul_D_BFu0ll, "Ul_D_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_D_BFu0s  {
  __tsu64 v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Ul_D_BFu0s) C1{ FL[2] Fs:0}



static void Test_Ul_D_BFu0s()
{
  {
    init_simple_test("Ul_D_BFu0s");
    static Ul_D_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(Ul_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_D_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_D_BFu0s(Test_Ul_D_BFu0s, "Ul_D_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_F_BFu0c  {
  __tsu64 v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Ul_F_BFu0c) C1{ FL Fi Fc:0}



static void Test_Ul_F_BFu0c()
{
  {
    init_simple_test("Ul_F_BFu0c");
    static Ul_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_F_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_F_BFu0c(Test_Ul_F_BFu0c, "Ul_F_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_F_BFu0i  {
  __tsu64 v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Ul_F_BFu0i) C1{ FL Fi Fi:0}



static void Test_Ul_F_BFu0i()
{
  {
    init_simple_test("Ul_F_BFu0i");
    static Ul_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_F_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_F_BFu0i(Test_Ul_F_BFu0i, "Ul_F_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_F_BFu0ll  {
  __tsu64 v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Ul_F_BFu0ll) C1{ FL Fi FL:0}



static void Test_Ul_F_BFu0ll()
{
  {
    init_simple_test("Ul_F_BFu0ll");
    static Ul_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_F_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_F_BFu0ll(Test_Ul_F_BFu0ll, "Ul_F_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_F_BFu0s  {
  __tsu64 v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Ul_F_BFu0s) C1{ FL Fi Fs:0}



static void Test_Ul_F_BFu0s()
{
  {
    init_simple_test("Ul_F_BFu0s");
    static Ul_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_F_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_F_BFu0s(Test_Ul_F_BFu0s, "Ul_F_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_I_BFu0c  {
  __tsu64 v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Ul_I_BFu0c) C1{ FL Fi Fc:0}



static void Test_Ul_I_BFu0c()
{
  {
    init_simple_test("Ul_I_BFu0c");
    static Ul_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_I_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_I_BFu0c(Test_Ul_I_BFu0c, "Ul_I_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_I_BFu0i  {
  __tsu64 v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Ul_I_BFu0i) C1{ FL Fi Fi:0}



static void Test_Ul_I_BFu0i()
{
  {
    init_simple_test("Ul_I_BFu0i");
    static Ul_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_I_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_I_BFu0i(Test_Ul_I_BFu0i, "Ul_I_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_I_BFu0ll  {
  __tsu64 v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Ul_I_BFu0ll) C1{ FL Fi FL:0}



static void Test_Ul_I_BFu0ll()
{
  {
    init_simple_test("Ul_I_BFu0ll");
    static Ul_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_I_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_I_BFu0ll(Test_Ul_I_BFu0ll, "Ul_I_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_I_BFu0s  {
  __tsu64 v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Ul_I_BFu0s) C1{ FL Fi Fs:0}



static void Test_Ul_I_BFu0s()
{
  {
    init_simple_test("Ul_I_BFu0s");
    static Ul_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_I_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_I_BFu0s(Test_Ul_I_BFu0s, "Ul_I_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ip_BFu0c  {
  __tsu64 v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Ul_Ip_BFu0c) C1{ FL Fp Fc:0}



static void Test_Ul_Ip_BFu0c()
{
  {
    init_simple_test("Ul_Ip_BFu0c");
    static Ul_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Ip_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_Ip_BFu0c(Test_Ul_Ip_BFu0c, "Ul_Ip_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ip_BFu0i  {
  __tsu64 v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Ul_Ip_BFu0i) C1{ FL Fp Fi:0}



static void Test_Ul_Ip_BFu0i()
{
  {
    init_simple_test("Ul_Ip_BFu0i");
    static Ul_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Ip_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_Ip_BFu0i(Test_Ul_Ip_BFu0i, "Ul_Ip_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ip_BFu0ll  {
  __tsu64 v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Ul_Ip_BFu0ll) C1{ FL Fp FL:0}



static void Test_Ul_Ip_BFu0ll()
{
  {
    init_simple_test("Ul_Ip_BFu0ll");
    static Ul_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_Ip_BFu0ll(Test_Ul_Ip_BFu0ll, "Ul_Ip_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ip_BFu0s  {
  __tsu64 v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Ul_Ip_BFu0s) C1{ FL Fp Fs:0}



static void Test_Ul_Ip_BFu0s()
{
  {
    init_simple_test("Ul_Ip_BFu0s");
    static Ul_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Ip_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_Ip_BFu0s(Test_Ul_Ip_BFu0s, "Ul_Ip_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_L_BFu0c  {
  __tsu64 v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Ul_L_BFu0c) C1{ FL[2] Fc:0}



static void Test_Ul_L_BFu0c()
{
  {
    init_simple_test("Ul_L_BFu0c");
    static Ul_L_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(Ul_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_L_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_L_BFu0c(Test_Ul_L_BFu0c, "Ul_L_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_L_BFu0i  {
  __tsu64 v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Ul_L_BFu0i) C1{ FL[2] Fi:0}



static void Test_Ul_L_BFu0i()
{
  {
    init_simple_test("Ul_L_BFu0i");
    static Ul_L_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(Ul_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_L_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_L_BFu0i(Test_Ul_L_BFu0i, "Ul_L_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_L_BFu0ll  {
  __tsu64 v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Ul_L_BFu0ll) C1{ FL[2] FL:0}



static void Test_Ul_L_BFu0ll()
{
  {
    init_simple_test("Ul_L_BFu0ll");
    static Ul_L_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(Ul_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_L_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_L_BFu0ll(Test_Ul_L_BFu0ll, "Ul_L_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_L_BFu0s  {
  __tsu64 v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Ul_L_BFu0s) C1{ FL[2] Fs:0}



static void Test_Ul_L_BFu0s()
{
  {
    init_simple_test("Ul_L_BFu0s");
    static Ul_L_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(Ul_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_L_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_L_BFu0s(Test_Ul_L_BFu0s, "Ul_L_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_S_BFu0c  {
  __tsu64 v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Ul_S_BFu0c) C1{ FL Fs Fc:0}



static void Test_Ul_S_BFu0c()
{
  {
    init_simple_test("Ul_S_BFu0c");
    static Ul_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_S_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_S_BFu0c(Test_Ul_S_BFu0c, "Ul_S_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_S_BFu0i  {
  __tsu64 v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Ul_S_BFu0i) C1{ FL Fs Fi:0}



static void Test_Ul_S_BFu0i()
{
  {
    init_simple_test("Ul_S_BFu0i");
    static Ul_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_S_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_S_BFu0i(Test_Ul_S_BFu0i, "Ul_S_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_S_BFu0ll  {
  __tsu64 v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Ul_S_BFu0ll) C1{ FL Fs FL:0}



static void Test_Ul_S_BFu0ll()
{
  {
    init_simple_test("Ul_S_BFu0ll");
    static Ul_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_S_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_S_BFu0ll(Test_Ul_S_BFu0ll, "Ul_S_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_S_BFu0s  {
  __tsu64 v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Ul_S_BFu0s) C1{ FL Fs Fs:0}



static void Test_Ul_S_BFu0s()
{
  {
    init_simple_test("Ul_S_BFu0s");
    static Ul_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_S_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_S_BFu0s(Test_Ul_S_BFu0s, "Ul_S_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Uc_BFu0c  {
  __tsu64 v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Ul_Uc_BFu0c) C1{ FL Fc Fc:0}



static void Test_Ul_Uc_BFu0c()
{
  {
    init_simple_test("Ul_Uc_BFu0c");
    static Ul_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_Uc_BFu0c(Test_Ul_Uc_BFu0c, "Ul_Uc_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Uc_BFu0i  {
  __tsu64 v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Ul_Uc_BFu0i) C1{ FL Fc Fi:0}



static void Test_Ul_Uc_BFu0i()
{
  {
    init_simple_test("Ul_Uc_BFu0i");
    static Ul_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_Uc_BFu0i(Test_Ul_Uc_BFu0i, "Ul_Uc_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Uc_BFu0ll  {
  __tsu64 v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Ul_Uc_BFu0ll) C1{ FL Fc FL:0}



static void Test_Ul_Uc_BFu0ll()
{
  {
    init_simple_test("Ul_Uc_BFu0ll");
    static Ul_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_Uc_BFu0ll(Test_Ul_Uc_BFu0ll, "Ul_Uc_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Uc_BFu0s  {
  __tsu64 v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Ul_Uc_BFu0s) C1{ FL Fc Fs:0}



static void Test_Ul_Uc_BFu0s()
{
  {
    init_simple_test("Ul_Uc_BFu0s");
    static Ul_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_Uc_BFu0s(Test_Ul_Uc_BFu0s, "Ul_Uc_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ui_BFu0c  {
  __tsu64 v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Ul_Ui_BFu0c) C1{ FL Fi Fc:0}



static void Test_Ul_Ui_BFu0c()
{
  {
    init_simple_test("Ul_Ui_BFu0c");
    static Ul_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_Ui_BFu0c(Test_Ul_Ui_BFu0c, "Ul_Ui_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ui_BFu0i  {
  __tsu64 v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Ul_Ui_BFu0i) C1{ FL Fi Fi:0}



static void Test_Ul_Ui_BFu0i()
{
  {
    init_simple_test("Ul_Ui_BFu0i");
    static Ul_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_Ui_BFu0i(Test_Ul_Ui_BFu0i, "Ul_Ui_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ui_BFu0ll  {
  __tsu64 v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Ul_Ui_BFu0ll) C1{ FL Fi FL:0}



static void Test_Ul_Ui_BFu0ll()
{
  {
    init_simple_test("Ul_Ui_BFu0ll");
    static Ul_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_Ui_BFu0ll(Test_Ul_Ui_BFu0ll, "Ul_Ui_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ui_BFu0s  {
  __tsu64 v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Ul_Ui_BFu0s) C1{ FL Fi Fs:0}



static void Test_Ul_Ui_BFu0s()
{
  {
    init_simple_test("Ul_Ui_BFu0s");
    static Ul_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_Ui_BFu0s(Test_Ul_Ui_BFu0s, "Ul_Ui_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ul_BFu0c  {
  __tsu64 v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Ul_Ul_BFu0c) C1{ FL[2] Fc:0}



static void Test_Ul_Ul_BFu0c()
{
  {
    init_simple_test("Ul_Ul_BFu0c");
    static Ul_Ul_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Ul_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_Ul_BFu0c(Test_Ul_Ul_BFu0c, "Ul_Ul_BFu0c", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ul_BFu0i  {
  __tsu64 v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Ul_Ul_BFu0i) C1{ FL[2] Fi:0}



static void Test_Ul_Ul_BFu0i()
{
  {
    init_simple_test("Ul_Ul_BFu0i");
    static Ul_Ul_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Ul_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_Ul_BFu0i(Test_Ul_Ul_BFu0i, "Ul_Ul_BFu0i", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ul_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Ul_Ul_BFu0ll) C1{ FL[2] FL:0}



static void Test_Ul_Ul_BFu0ll()
{
  {
    init_simple_test("Ul_Ul_BFu0ll");
    static Ul_Ul_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_Ul_BFu0ll(Test_Ul_Ul_BFu0ll, "Ul_Ul_BFu0ll", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Ul_BFu0s  {
  __tsu64 v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Ul_Ul_BFu0s) C1{ FL[2] Fs:0}



static void Test_Ul_Ul_BFu0s()
{
  {
    init_simple_test("Ul_Ul_BFu0s");
    static Ul_Ul_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Ul_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_Ul_BFu0s(Test_Ul_Ul_BFu0s, "Ul_Ul_BFu0s", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Us_BFu0c  {
  __tsu64 v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Ul_Us_BFu0c) C1{ FL Fs Fc:0}



static void Test_Ul_Us_BFu0c()
{
  {
    init_simple_test("Ul_Us_BFu0c");
    static Ul_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Us_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_Us_BFu0c(Test_Ul_Us_BFu0c, "Ul_Us_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Us_BFu0i  {
  __tsu64 v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Ul_Us_BFu0i) C1{ FL Fs Fi:0}



static void Test_Ul_Us_BFu0i()
{
  {
    init_simple_test("Ul_Us_BFu0i");
    static Ul_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Us_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_Us_BFu0i(Test_Ul_Us_BFu0i, "Ul_Us_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Us_BFu0ll  {
  __tsu64 v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Ul_Us_BFu0ll) C1{ FL Fs FL:0}



static void Test_Ul_Us_BFu0ll()
{
  {
    init_simple_test("Ul_Us_BFu0ll");
    static Ul_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_Us_BFu0ll(Test_Ul_Us_BFu0ll, "Ul_Us_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Us_BFu0s  {
  __tsu64 v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Ul_Us_BFu0s) C1{ FL Fs Fs:0}



static void Test_Ul_Us_BFu0s()
{
  {
    init_simple_test("Ul_Us_BFu0s");
    static Ul_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Us_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_Us_BFu0s(Test_Ul_Us_BFu0s, "Ul_Us_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Vp_BFu0c  {
  __tsu64 v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Ul_Vp_BFu0c) C1{ FL Fp Fc:0}



static void Test_Ul_Vp_BFu0c()
{
  {
    init_simple_test("Ul_Vp_BFu0c");
    static Ul_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Vp_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUl_Vp_BFu0c(Test_Ul_Vp_BFu0c, "Ul_Vp_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Vp_BFu0i  {
  __tsu64 v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Ul_Vp_BFu0i) C1{ FL Fp Fi:0}



static void Test_Ul_Vp_BFu0i()
{
  {
    init_simple_test("Ul_Vp_BFu0i");
    static Ul_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Vp_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUl_Vp_BFu0i(Test_Ul_Vp_BFu0i, "Ul_Vp_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Vp_BFu0ll  {
  __tsu64 v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Ul_Vp_BFu0ll) C1{ FL Fp FL:0}



static void Test_Ul_Vp_BFu0ll()
{
  {
    init_simple_test("Ul_Vp_BFu0ll");
    static Ul_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUl_Vp_BFu0ll(Test_Ul_Vp_BFu0ll, "Ul_Vp_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Ul_Vp_BFu0s  {
  __tsu64 v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Ul_Vp_BFu0s) C1{ FL Fp Fs:0}



static void Test_Ul_Vp_BFu0s()
{
  {
    init_simple_test("Ul_Vp_BFu0s");
    static Ul_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Vp_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUl_Vp_BFu0s(Test_Ul_Vp_BFu0s, "Ul_Vp_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c  {
  unsigned short v1;
  unsigned char  :0;
};
//SIG(1 Us_BFu0c) C1{ Fs Fc:0}



static void Test_Us_BFu0c()
{
  {
    init_simple_test("Us_BFu0c");
    static Us_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0c(Test_Us_BFu0c, "Us_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu0c  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Us_BFu0c_BFu0c) C1{ Fs Fc:0 Fc:0}



static void Test_Us_BFu0c_BFu0c()
{
  {
    init_simple_test("Us_BFu0c_BFu0c");
    static Us_BFu0c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu0c(Test_Us_BFu0c_BFu0c, "Us_BFu0c_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu0i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Us_BFu0c_BFu0i) C1{ Fs Fc:0 Fi:0}



static void Test_Us_BFu0c_BFu0i()
{
  {
    init_simple_test("Us_BFu0c_BFu0i");
    static Us_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu0i(Test_Us_BFu0c_BFu0i, "Us_BFu0c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu0ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Us_BFu0c_BFu0ll) C1{ Fs Fc:0 FL:0}



static void Test_Us_BFu0c_BFu0ll()
{
  {
    init_simple_test("Us_BFu0c_BFu0ll");
    static Us_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu0ll(Test_Us_BFu0c_BFu0ll, "Us_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu0s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Us_BFu0c_BFu0s) C1{ Fs Fc:0 Fs:0}



static void Test_Us_BFu0c_BFu0s()
{
  {
    init_simple_test("Us_BFu0c_BFu0s");
    static Us_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu0s(Test_Us_BFu0c_BFu0s, "Us_BFu0c_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu15i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Us_BFu0c_BFu15i) C1{ Fs Fc:0 Fi:15}



static void Test_Us_BFu0c_BFu15i()
{
  {
    init_simple_test("Us_BFu0c_BFu15i");
    static Us_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu15i(Test_Us_BFu0c_BFu15i, "Us_BFu0c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu15ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Us_BFu0c_BFu15ll) C1{ Fs Fc:0 FL:15}



static void Test_Us_BFu0c_BFu15ll()
{
  {
    init_simple_test("Us_BFu0c_BFu15ll");
    static Us_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu15ll(Test_Us_BFu0c_BFu15ll, "Us_BFu0c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu15s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Us_BFu0c_BFu15s) C1{ Fs Fc:0 Fs:15}



static void Test_Us_BFu0c_BFu15s()
{
  {
    init_simple_test("Us_BFu0c_BFu15s");
    static Us_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu15s(Test_Us_BFu0c_BFu15s, "Us_BFu0c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu16i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Us_BFu0c_BFu16i) C1{ Fs Fc:0 Fi:16}



static void Test_Us_BFu0c_BFu16i()
{
  {
    init_simple_test("Us_BFu0c_BFu16i");
    static Us_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu16i(Test_Us_BFu0c_BFu16i, "Us_BFu0c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu16ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Us_BFu0c_BFu16ll) C1{ Fs Fc:0 FL:16}



static void Test_Us_BFu0c_BFu16ll()
{
  {
    init_simple_test("Us_BFu0c_BFu16ll");
    static Us_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu16ll(Test_Us_BFu0c_BFu16ll, "Us_BFu0c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu16s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Us_BFu0c_BFu16s) C1{ Fs Fc:0 Fs:16}



static void Test_Us_BFu0c_BFu16s()
{
  {
    init_simple_test("Us_BFu0c_BFu16s");
    static Us_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu16s(Test_Us_BFu0c_BFu16s, "Us_BFu0c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu17i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Us_BFu0c_BFu17i) C1{ Fs Fc:0 Fi:17}



static void Test_Us_BFu0c_BFu17i()
{
  {
    init_simple_test("Us_BFu0c_BFu17i");
    static Us_BFu0c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu17i(Test_Us_BFu0c_BFu17i, "Us_BFu0c_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu17ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Us_BFu0c_BFu17ll) C1{ Fs Fc:0 FL:17}



static void Test_Us_BFu0c_BFu17ll()
{
  {
    init_simple_test("Us_BFu0c_BFu17ll");
    static Us_BFu0c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu17ll(Test_Us_BFu0c_BFu17ll, "Us_BFu0c_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu1c  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Us_BFu0c_BFu1c) C1{ Fs Fc:0 Fc:1}



static void Test_Us_BFu0c_BFu1c()
{
  {
    init_simple_test("Us_BFu0c_BFu1c");
    static Us_BFu0c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu1c(Test_Us_BFu0c_BFu1c, "Us_BFu0c_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu1i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Us_BFu0c_BFu1i) C1{ Fs Fc:0 Fi:1}



static void Test_Us_BFu0c_BFu1i()
{
  {
    init_simple_test("Us_BFu0c_BFu1i");
    static Us_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu1i(Test_Us_BFu0c_BFu1i, "Us_BFu0c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu1ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Us_BFu0c_BFu1ll) C1{ Fs Fc:0 FL:1}



static void Test_Us_BFu0c_BFu1ll()
{
  {
    init_simple_test("Us_BFu0c_BFu1ll");
    static Us_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu1ll(Test_Us_BFu0c_BFu1ll, "Us_BFu0c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu1s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Us_BFu0c_BFu1s) C1{ Fs Fc:0 Fs:1}



static void Test_Us_BFu0c_BFu1s()
{
  {
    init_simple_test("Us_BFu0c_BFu1s");
    static Us_BFu0c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu1s(Test_Us_BFu0c_BFu1s, "Us_BFu0c_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu31i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Us_BFu0c_BFu31i) C1{ Fs Fc:0 Fi:31}



static void Test_Us_BFu0c_BFu31i()
{
  {
    init_simple_test("Us_BFu0c_BFu31i");
    static Us_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu31i(Test_Us_BFu0c_BFu31i, "Us_BFu0c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu31ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Us_BFu0c_BFu31ll) C1{ Fs Fc:0 FL:31}



static void Test_Us_BFu0c_BFu31ll()
{
  {
    init_simple_test("Us_BFu0c_BFu31ll");
    static Us_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu31ll(Test_Us_BFu0c_BFu31ll, "Us_BFu0c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu32i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Us_BFu0c_BFu32i) C1{ Fs Fc:0 Fi:32}



static void Test_Us_BFu0c_BFu32i()
{
  {
    init_simple_test("Us_BFu0c_BFu32i");
    static Us_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu32i(Test_Us_BFu0c_BFu32i, "Us_BFu0c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu32ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Us_BFu0c_BFu32ll) C1{ Fs Fc:0 FL:32}



static void Test_Us_BFu0c_BFu32ll()
{
  {
    init_simple_test("Us_BFu0c_BFu32ll");
    static Us_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu32ll(Test_Us_BFu0c_BFu32ll, "Us_BFu0c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu33  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Us_BFu0c_BFu33) C1{ Fs Fc:0 FL:33}



static void Test_Us_BFu0c_BFu33()
{
  {
    init_simple_test("Us_BFu0c_BFu33");
    static Us_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu33(Test_Us_BFu0c_BFu33, "Us_BFu0c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu7c  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Us_BFu0c_BFu7c) C1{ Fs Fc:0 Fc:7}



static void Test_Us_BFu0c_BFu7c()
{
  {
    init_simple_test("Us_BFu0c_BFu7c");
    static Us_BFu0c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu7c(Test_Us_BFu0c_BFu7c, "Us_BFu0c_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu7i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Us_BFu0c_BFu7i) C1{ Fs Fc:0 Fi:7}



static void Test_Us_BFu0c_BFu7i()
{
  {
    init_simple_test("Us_BFu0c_BFu7i");
    static Us_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu7i(Test_Us_BFu0c_BFu7i, "Us_BFu0c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu7ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Us_BFu0c_BFu7ll) C1{ Fs Fc:0 FL:7}



static void Test_Us_BFu0c_BFu7ll()
{
  {
    init_simple_test("Us_BFu0c_BFu7ll");
    static Us_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu7ll(Test_Us_BFu0c_BFu7ll, "Us_BFu0c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu7s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Us_BFu0c_BFu7s) C1{ Fs Fc:0 Fs:7}



static void Test_Us_BFu0c_BFu7s()
{
  {
    init_simple_test("Us_BFu0c_BFu7s");
    static Us_BFu0c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu7s(Test_Us_BFu0c_BFu7s, "Us_BFu0c_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu8c  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Us_BFu0c_BFu8c) C1{ Fs Fc:0 Fc:8}



static void Test_Us_BFu0c_BFu8c()
{
  {
    init_simple_test("Us_BFu0c_BFu8c");
    static Us_BFu0c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu8c(Test_Us_BFu0c_BFu8c, "Us_BFu0c_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu8i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Us_BFu0c_BFu8i) C1{ Fs Fc:0 Fi:8}



static void Test_Us_BFu0c_BFu8i()
{
  {
    init_simple_test("Us_BFu0c_BFu8i");
    static Us_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu8i(Test_Us_BFu0c_BFu8i, "Us_BFu0c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu8ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Us_BFu0c_BFu8ll) C1{ Fs Fc:0 FL:8}



static void Test_Us_BFu0c_BFu8ll()
{
  {
    init_simple_test("Us_BFu0c_BFu8ll");
    static Us_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu8ll(Test_Us_BFu0c_BFu8ll, "Us_BFu0c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu8s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Us_BFu0c_BFu8s) C1{ Fs Fc:0 Fs:8}



static void Test_Us_BFu0c_BFu8s()
{
  {
    init_simple_test("Us_BFu0c_BFu8s");
    static Us_BFu0c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu8s(Test_Us_BFu0c_BFu8s, "Us_BFu0c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu9i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Us_BFu0c_BFu9i) C1{ Fs Fc:0 Fi:9}



static void Test_Us_BFu0c_BFu9i()
{
  {
    init_simple_test("Us_BFu0c_BFu9i");
    static Us_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu9i(Test_Us_BFu0c_BFu9i, "Us_BFu0c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu9ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Us_BFu0c_BFu9ll) C1{ Fs Fc:0 FL:9}



static void Test_Us_BFu0c_BFu9ll()
{
  {
    init_simple_test("Us_BFu0c_BFu9ll");
    static Us_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu9ll(Test_Us_BFu0c_BFu9ll, "Us_BFu0c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_BFu9s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Us_BFu0c_BFu9s) C1{ Fs Fc:0 Fs:9}



static void Test_Us_BFu0c_BFu9s()
{
  {
    init_simple_test("Us_BFu0c_BFu9s");
    static Us_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_BFu9s(Test_Us_BFu0c_BFu9s, "Us_BFu0c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_C  {
  unsigned short v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Us_BFu0c_C) C1{ Fs Fc:0 Fc}



static void Test_Us_BFu0c_C()
{
  {
    init_simple_test("Us_BFu0c_C");
    static Us_BFu0c_C lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_C)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_C.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_C(Test_Us_BFu0c_C, "Us_BFu0c_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_D  {
  unsigned short v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Us_BFu0c_D) C1{ Fs Fc:0 FL}



static void Test_Us_BFu0c_D()
{
  {
    init_simple_test("Us_BFu0c_D");
    static Us_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_D(Test_Us_BFu0c_D, "Us_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_F  {
  unsigned short v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Us_BFu0c_F) C1{ Fs Fc:0 Fi}



static void Test_Us_BFu0c_F()
{
  {
    init_simple_test("Us_BFu0c_F");
    static Us_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_F(Test_Us_BFu0c_F, "Us_BFu0c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_I  {
  unsigned short v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Us_BFu0c_I) C1{ Fs Fc:0 Fi}



static void Test_Us_BFu0c_I()
{
  {
    init_simple_test("Us_BFu0c_I");
    static Us_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_I(Test_Us_BFu0c_I, "Us_BFu0c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_Ip  {
  unsigned short v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Us_BFu0c_Ip) C1{ Fs Fc:0 Fp}



static void Test_Us_BFu0c_Ip()
{
  {
    init_simple_test("Us_BFu0c_Ip");
    static Us_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_Ip(Test_Us_BFu0c_Ip, "Us_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_L  {
  unsigned short v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Us_BFu0c_L) C1{ Fs Fc:0 FL}



static void Test_Us_BFu0c_L()
{
  {
    init_simple_test("Us_BFu0c_L");
    static Us_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_L(Test_Us_BFu0c_L, "Us_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_S  {
  unsigned short v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Us_BFu0c_S) C1{ Fs Fc:0 Fs}



static void Test_Us_BFu0c_S()
{
  {
    init_simple_test("Us_BFu0c_S");
    static Us_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_S.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_S(Test_Us_BFu0c_S, "Us_BFu0c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_Uc  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Us_BFu0c_Uc) C1{ Fs Fc:0 Fc}



static void Test_Us_BFu0c_Uc()
{
  {
    init_simple_test("Us_BFu0c_Uc");
    static Us_BFu0c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_Uc(Test_Us_BFu0c_Uc, "Us_BFu0c_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_Ui  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Us_BFu0c_Ui) C1{ Fs Fc:0 Fi}



static void Test_Us_BFu0c_Ui()
{
  {
    init_simple_test("Us_BFu0c_Ui");
    static Us_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_Ui(Test_Us_BFu0c_Ui, "Us_BFu0c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_Ul  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Us_BFu0c_Ul) C1{ Fs Fc:0 FL}



static void Test_Us_BFu0c_Ul()
{
  {
    init_simple_test("Us_BFu0c_Ul");
    static Us_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_Ul(Test_Us_BFu0c_Ul, "Us_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_Us  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Us_BFu0c_Us) C1{ Fs Fc:0 Fs}



static void Test_Us_BFu0c_Us()
{
  {
    init_simple_test("Us_BFu0c_Us");
    static Us_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Us.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_Us(Test_Us_BFu0c_Us, "Us_BFu0c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0c_Vp  {
  unsigned short v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Us_BFu0c_Vp) C1{ Fs Fc:0 Fp}



static void Test_Us_BFu0c_Vp()
{
  {
    init_simple_test("Us_BFu0c_Vp");
    static Us_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0c_Vp(Test_Us_BFu0c_Vp, "Us_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i  {
  unsigned short v1;
  unsigned int  :0;
};
//SIG(1 Us_BFu0i) C1{ Fs Fi:0}



static void Test_Us_BFu0i()
{
  {
    init_simple_test("Us_BFu0i");
    static Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0i(Test_Us_BFu0i, "Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu0c  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Us_BFu0i_BFu0c) C1{ Fs Fi:0 Fc:0}



static void Test_Us_BFu0i_BFu0c()
{
  {
    init_simple_test("Us_BFu0i_BFu0c");
    static Us_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu0c(Test_Us_BFu0i_BFu0c, "Us_BFu0i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu0i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Us_BFu0i_BFu0i) C1{ Fs Fi:0 Fi:0}



static void Test_Us_BFu0i_BFu0i()
{
  {
    init_simple_test("Us_BFu0i_BFu0i");
    static Us_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu0i(Test_Us_BFu0i_BFu0i, "Us_BFu0i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu0ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Us_BFu0i_BFu0ll) C1{ Fs Fi:0 FL:0}



static void Test_Us_BFu0i_BFu0ll()
{
  {
    init_simple_test("Us_BFu0i_BFu0ll");
    static Us_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu0ll(Test_Us_BFu0i_BFu0ll, "Us_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu0s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Us_BFu0i_BFu0s) C1{ Fs Fi:0 Fs:0}



static void Test_Us_BFu0i_BFu0s()
{
  {
    init_simple_test("Us_BFu0i_BFu0s");
    static Us_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu0s(Test_Us_BFu0i_BFu0s, "Us_BFu0i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu15i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Us_BFu0i_BFu15i) C1{ Fs Fi:0 Fi:15}



static void Test_Us_BFu0i_BFu15i()
{
  {
    init_simple_test("Us_BFu0i_BFu15i");
    static Us_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Us_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Us_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu15i(Test_Us_BFu0i_BFu15i, "Us_BFu0i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu15ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Us_BFu0i_BFu15ll) C1{ Fs Fi:0 FL:15}



static void Test_Us_BFu0i_BFu15ll()
{
  {
    init_simple_test("Us_BFu0i_BFu15ll");
    static Us_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Us_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Us_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu15ll(Test_Us_BFu0i_BFu15ll, "Us_BFu0i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu15s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Us_BFu0i_BFu15s) C1{ Fs Fi:0 Fs:15}



static void Test_Us_BFu0i_BFu15s()
{
  {
    init_simple_test("Us_BFu0i_BFu15s");
    static Us_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Us_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Us_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu15s(Test_Us_BFu0i_BFu15s, "Us_BFu0i_BFu15s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu16i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Us_BFu0i_BFu16i) C1{ Fs Fi:0 Fi:16}



static void Test_Us_BFu0i_BFu16i()
{
  {
    init_simple_test("Us_BFu0i_BFu16i");
    static Us_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Us_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Us_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu16i(Test_Us_BFu0i_BFu16i, "Us_BFu0i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu16ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Us_BFu0i_BFu16ll) C1{ Fs Fi:0 FL:16}



static void Test_Us_BFu0i_BFu16ll()
{
  {
    init_simple_test("Us_BFu0i_BFu16ll");
    static Us_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Us_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Us_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu16ll(Test_Us_BFu0i_BFu16ll, "Us_BFu0i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu16s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Us_BFu0i_BFu16s) C1{ Fs Fi:0 Fs:16}



static void Test_Us_BFu0i_BFu16s()
{
  {
    init_simple_test("Us_BFu0i_BFu16s");
    static Us_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Us_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Us_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu16s(Test_Us_BFu0i_BFu16s, "Us_BFu0i_BFu16s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu17i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Us_BFu0i_BFu17i) C1{ Fs Fi:0 Fi:17}



static void Test_Us_BFu0i_BFu17i()
{
  {
    init_simple_test("Us_BFu0i_BFu17i");
    static Us_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu17i(Test_Us_BFu0i_BFu17i, "Us_BFu0i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu17ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Us_BFu0i_BFu17ll) C1{ Fs Fi:0 FL:17}



static void Test_Us_BFu0i_BFu17ll()
{
  {
    init_simple_test("Us_BFu0i_BFu17ll");
    static Us_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu17ll(Test_Us_BFu0i_BFu17ll, "Us_BFu0i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu1c  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Us_BFu0i_BFu1c) C1{ Fs Fi:0 Fc:1}



static void Test_Us_BFu0i_BFu1c()
{
  {
    init_simple_test("Us_BFu0i_BFu1c");
    static Us_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Us_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu1c(Test_Us_BFu0i_BFu1c, "Us_BFu0i_BFu1c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu1i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Us_BFu0i_BFu1i) C1{ Fs Fi:0 Fi:1}



static void Test_Us_BFu0i_BFu1i()
{
  {
    init_simple_test("Us_BFu0i_BFu1i");
    static Us_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Us_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu1i(Test_Us_BFu0i_BFu1i, "Us_BFu0i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu1ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Us_BFu0i_BFu1ll) C1{ Fs Fi:0 FL:1}



static void Test_Us_BFu0i_BFu1ll()
{
  {
    init_simple_test("Us_BFu0i_BFu1ll");
    static Us_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Us_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu1ll(Test_Us_BFu0i_BFu1ll, "Us_BFu0i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu1s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Us_BFu0i_BFu1s) C1{ Fs Fi:0 Fs:1}



static void Test_Us_BFu0i_BFu1s()
{
  {
    init_simple_test("Us_BFu0i_BFu1s");
    static Us_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Us_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu1s(Test_Us_BFu0i_BFu1s, "Us_BFu0i_BFu1s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu31i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Us_BFu0i_BFu31i) C1{ Fs Fi:0 Fi:31}



static void Test_Us_BFu0i_BFu31i()
{
  {
    init_simple_test("Us_BFu0i_BFu31i");
    static Us_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu31i(Test_Us_BFu0i_BFu31i, "Us_BFu0i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu31ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Us_BFu0i_BFu31ll) C1{ Fs Fi:0 FL:31}



static void Test_Us_BFu0i_BFu31ll()
{
  {
    init_simple_test("Us_BFu0i_BFu31ll");
    static Us_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu31ll(Test_Us_BFu0i_BFu31ll, "Us_BFu0i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu32i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Us_BFu0i_BFu32i) C1{ Fs Fi:0 Fi:32}



static void Test_Us_BFu0i_BFu32i()
{
  {
    init_simple_test("Us_BFu0i_BFu32i");
    static Us_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu32i(Test_Us_BFu0i_BFu32i, "Us_BFu0i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu32ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Us_BFu0i_BFu32ll) C1{ Fs Fi:0 FL:32}



static void Test_Us_BFu0i_BFu32ll()
{
  {
    init_simple_test("Us_BFu0i_BFu32ll");
    static Us_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu32ll(Test_Us_BFu0i_BFu32ll, "Us_BFu0i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu33  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Us_BFu0i_BFu33) C1{ Fs Fi:0 FL:33}



static void Test_Us_BFu0i_BFu33()
{
  {
    init_simple_test("Us_BFu0i_BFu33");
    static Us_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Us_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Us_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu33(Test_Us_BFu0i_BFu33, "Us_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu7c  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Us_BFu0i_BFu7c) C1{ Fs Fi:0 Fc:7}



static void Test_Us_BFu0i_BFu7c()
{
  {
    init_simple_test("Us_BFu0i_BFu7c");
    static Us_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Us_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Us_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu7c(Test_Us_BFu0i_BFu7c, "Us_BFu0i_BFu7c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu7i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Us_BFu0i_BFu7i) C1{ Fs Fi:0 Fi:7}



static void Test_Us_BFu0i_BFu7i()
{
  {
    init_simple_test("Us_BFu0i_BFu7i");
    static Us_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Us_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Us_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu7i(Test_Us_BFu0i_BFu7i, "Us_BFu0i_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu7ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Us_BFu0i_BFu7ll) C1{ Fs Fi:0 FL:7}



static void Test_Us_BFu0i_BFu7ll()
{
  {
    init_simple_test("Us_BFu0i_BFu7ll");
    static Us_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Us_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Us_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu7ll(Test_Us_BFu0i_BFu7ll, "Us_BFu0i_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu7s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Us_BFu0i_BFu7s) C1{ Fs Fi:0 Fs:7}



static void Test_Us_BFu0i_BFu7s()
{
  {
    init_simple_test("Us_BFu0i_BFu7s");
    static Us_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Us_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Us_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu7s(Test_Us_BFu0i_BFu7s, "Us_BFu0i_BFu7s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu8c  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Us_BFu0i_BFu8c) C1{ Fs Fi:0 Fc:8}



static void Test_Us_BFu0i_BFu8c()
{
  {
    init_simple_test("Us_BFu0i_BFu8c");
    static Us_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Us_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Us_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu8c(Test_Us_BFu0i_BFu8c, "Us_BFu0i_BFu8c", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu8i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Us_BFu0i_BFu8i) C1{ Fs Fi:0 Fi:8}



static void Test_Us_BFu0i_BFu8i()
{
  {
    init_simple_test("Us_BFu0i_BFu8i");
    static Us_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Us_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Us_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu8i(Test_Us_BFu0i_BFu8i, "Us_BFu0i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu8ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Us_BFu0i_BFu8ll) C1{ Fs Fi:0 FL:8}



static void Test_Us_BFu0i_BFu8ll()
{
  {
    init_simple_test("Us_BFu0i_BFu8ll");
    static Us_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Us_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Us_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu8ll(Test_Us_BFu0i_BFu8ll, "Us_BFu0i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu8s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Us_BFu0i_BFu8s) C1{ Fs Fi:0 Fs:8}



static void Test_Us_BFu0i_BFu8s()
{
  {
    init_simple_test("Us_BFu0i_BFu8s");
    static Us_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Us_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Us_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu8s(Test_Us_BFu0i_BFu8s, "Us_BFu0i_BFu8s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu9i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Us_BFu0i_BFu9i) C1{ Fs Fi:0 Fi:9}



static void Test_Us_BFu0i_BFu9i()
{
  {
    init_simple_test("Us_BFu0i_BFu9i");
    static Us_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Us_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Us_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu9i(Test_Us_BFu0i_BFu9i, "Us_BFu0i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu9ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Us_BFu0i_BFu9ll) C1{ Fs Fi:0 FL:9}



static void Test_Us_BFu0i_BFu9ll()
{
  {
    init_simple_test("Us_BFu0i_BFu9ll");
    static Us_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Us_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Us_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu9ll(Test_Us_BFu0i_BFu9ll, "Us_BFu0i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_BFu9s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Us_BFu0i_BFu9s) C1{ Fs Fi:0 Fs:9}



static void Test_Us_BFu0i_BFu9s()
{
  {
    init_simple_test("Us_BFu0i_BFu9s");
    static Us_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Us_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Us_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_BFu9s(Test_Us_BFu0i_BFu9s, "Us_BFu0i_BFu9s", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_C  {
  unsigned short v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Us_BFu0i_C) C1{ Fs Fi:0 Fc}



static void Test_Us_BFu0i_C()
{
  {
    init_simple_test("Us_BFu0i_C");
    static Us_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_C(Test_Us_BFu0i_C, "Us_BFu0i_C", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_D  {
  unsigned short v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Us_BFu0i_D) C1{ Fs Fi:0 FL}



static void Test_Us_BFu0i_D()
{
  {
    init_simple_test("Us_BFu0i_D");
    static Us_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_D(Test_Us_BFu0i_D, "Us_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_F  {
  unsigned short v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Us_BFu0i_F) C1{ Fs Fi:0 Fi}



static void Test_Us_BFu0i_F()
{
  {
    init_simple_test("Us_BFu0i_F");
    static Us_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_F(Test_Us_BFu0i_F, "Us_BFu0i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_I  {
  unsigned short v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Us_BFu0i_I) C1{ Fs Fi:0 Fi}



static void Test_Us_BFu0i_I()
{
  {
    init_simple_test("Us_BFu0i_I");
    static Us_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_I(Test_Us_BFu0i_I, "Us_BFu0i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_Ip  {
  unsigned short v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Us_BFu0i_Ip) C1{ Fs Fi:0 Fp}



static void Test_Us_BFu0i_Ip()
{
  {
    init_simple_test("Us_BFu0i_Ip");
    static Us_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_Ip(Test_Us_BFu0i_Ip, "Us_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_L  {
  unsigned short v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Us_BFu0i_L) C1{ Fs Fi:0 FL}



static void Test_Us_BFu0i_L()
{
  {
    init_simple_test("Us_BFu0i_L");
    static Us_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_L(Test_Us_BFu0i_L, "Us_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_S  {
  unsigned short v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Us_BFu0i_S) C1{ Fs Fi:0 Fs}



static void Test_Us_BFu0i_S()
{
  {
    init_simple_test("Us_BFu0i_S");
    static Us_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_S(Test_Us_BFu0i_S, "Us_BFu0i_S", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_Uc  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Us_BFu0i_Uc) C1{ Fs Fi:0 Fc}



static void Test_Us_BFu0i_Uc()
{
  {
    init_simple_test("Us_BFu0i_Uc");
    static Us_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_Uc(Test_Us_BFu0i_Uc, "Us_BFu0i_Uc", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_Ui  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Us_BFu0i_Ui) C1{ Fs Fi:0 Fi}



static void Test_Us_BFu0i_Ui()
{
  {
    init_simple_test("Us_BFu0i_Ui");
    static Us_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_Ui(Test_Us_BFu0i_Ui, "Us_BFu0i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_Ul  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Us_BFu0i_Ul) C1{ Fs Fi:0 FL}



static void Test_Us_BFu0i_Ul()
{
  {
    init_simple_test("Us_BFu0i_Ul");
    static Us_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_Ul(Test_Us_BFu0i_Ul, "Us_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_Us  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Us_BFu0i_Us) C1{ Fs Fi:0 Fs}



static void Test_Us_BFu0i_Us()
{
  {
    init_simple_test("Us_BFu0i_Us");
    static Us_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_Us(Test_Us_BFu0i_Us, "Us_BFu0i_Us", ABISELECT(6,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0i_Vp  {
  unsigned short v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Us_BFu0i_Vp) C1{ Fs Fi:0 Fp}



static void Test_Us_BFu0i_Vp()
{
  {
    init_simple_test("Us_BFu0i_Vp");
    static Us_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0i_Vp(Test_Us_BFu0i_Vp, "Us_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll  {
  unsigned short v1;
  __tsu64  :0;
};
//SIG(1 Us_BFu0ll) C1{ Fs FL:0}



static void Test_Us_BFu0ll()
{
  {
    init_simple_test("Us_BFu0ll");
    static Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll(Test_Us_BFu0ll, "Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu0c  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Us_BFu0ll_BFu0c) C1{ Fs FL:0 Fc:0}



static void Test_Us_BFu0ll_BFu0c()
{
  {
    init_simple_test("Us_BFu0ll_BFu0c");
    static Us_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu0c(Test_Us_BFu0ll_BFu0c, "Us_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu0i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Us_BFu0ll_BFu0i) C1{ Fs FL:0 Fi:0}



static void Test_Us_BFu0ll_BFu0i()
{
  {
    init_simple_test("Us_BFu0ll_BFu0i");
    static Us_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu0i(Test_Us_BFu0ll_BFu0i, "Us_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu0ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Us_BFu0ll_BFu0ll) C1{ Fs FL:0 FL:0}



static void Test_Us_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu0ll");
    static Us_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu0ll(Test_Us_BFu0ll_BFu0ll, "Us_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu0s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Us_BFu0ll_BFu0s) C1{ Fs FL:0 Fs:0}



static void Test_Us_BFu0ll_BFu0s()
{
  {
    init_simple_test("Us_BFu0ll_BFu0s");
    static Us_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu0s(Test_Us_BFu0ll_BFu0s, "Us_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu15i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Us_BFu0ll_BFu15i) C1{ Fs FL:0 Fi:15}



static void Test_Us_BFu0ll_BFu15i()
{
  {
    init_simple_test("Us_BFu0ll_BFu15i");
    static Us_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Us_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Us_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu15i(Test_Us_BFu0ll_BFu15i, "Us_BFu0ll_BFu15i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu15ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Us_BFu0ll_BFu15ll) C1{ Fs FL:0 FL:15}



static void Test_Us_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu15ll");
    static Us_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Us_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Us_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu15ll(Test_Us_BFu0ll_BFu15ll, "Us_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu15s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Us_BFu0ll_BFu15s) C1{ Fs FL:0 Fs:15}



static void Test_Us_BFu0ll_BFu15s()
{
  {
    init_simple_test("Us_BFu0ll_BFu15s");
    static Us_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Us_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Us_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu15s(Test_Us_BFu0ll_BFu15s, "Us_BFu0ll_BFu15s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu16i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Us_BFu0ll_BFu16i) C1{ Fs FL:0 Fi:16}



static void Test_Us_BFu0ll_BFu16i()
{
  {
    init_simple_test("Us_BFu0ll_BFu16i");
    static Us_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Us_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Us_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu16i(Test_Us_BFu0ll_BFu16i, "Us_BFu0ll_BFu16i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu16ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Us_BFu0ll_BFu16ll) C1{ Fs FL:0 FL:16}



static void Test_Us_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu16ll");
    static Us_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Us_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Us_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu16ll(Test_Us_BFu0ll_BFu16ll, "Us_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu16s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Us_BFu0ll_BFu16s) C1{ Fs FL:0 Fs:16}



static void Test_Us_BFu0ll_BFu16s()
{
  {
    init_simple_test("Us_BFu0ll_BFu16s");
    static Us_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Us_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Us_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu16s(Test_Us_BFu0ll_BFu16s, "Us_BFu0ll_BFu16s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu17i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Us_BFu0ll_BFu17i) C1{ Fs FL:0 Fi:17}



static void Test_Us_BFu0ll_BFu17i()
{
  {
    init_simple_test("Us_BFu0ll_BFu17i");
    static Us_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Us_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Us_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu17i(Test_Us_BFu0ll_BFu17i, "Us_BFu0ll_BFu17i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu17ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Us_BFu0ll_BFu17ll) C1{ Fs FL:0 FL:17}



static void Test_Us_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu17ll");
    static Us_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Us_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Us_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu17ll(Test_Us_BFu0ll_BFu17ll, "Us_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu1c  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Us_BFu0ll_BFu1c) C1{ Fs FL:0 Fc:1}



static void Test_Us_BFu0ll_BFu1c()
{
  {
    init_simple_test("Us_BFu0ll_BFu1c");
    static Us_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Us_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu1c(Test_Us_BFu0ll_BFu1c, "Us_BFu0ll_BFu1c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu1i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Us_BFu0ll_BFu1i) C1{ Fs FL:0 Fi:1}



static void Test_Us_BFu0ll_BFu1i()
{
  {
    init_simple_test("Us_BFu0ll_BFu1i");
    static Us_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Us_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu1i(Test_Us_BFu0ll_BFu1i, "Us_BFu0ll_BFu1i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu1ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Us_BFu0ll_BFu1ll) C1{ Fs FL:0 FL:1}



static void Test_Us_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu1ll");
    static Us_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Us_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu1ll(Test_Us_BFu0ll_BFu1ll, "Us_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu1s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Us_BFu0ll_BFu1s) C1{ Fs FL:0 Fs:1}



static void Test_Us_BFu0ll_BFu1s()
{
  {
    init_simple_test("Us_BFu0ll_BFu1s");
    static Us_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Us_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu1s(Test_Us_BFu0ll_BFu1s, "Us_BFu0ll_BFu1s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu31i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Us_BFu0ll_BFu31i) C1{ Fs FL:0 Fi:31}



static void Test_Us_BFu0ll_BFu31i()
{
  {
    init_simple_test("Us_BFu0ll_BFu31i");
    static Us_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Us_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Us_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu31i(Test_Us_BFu0ll_BFu31i, "Us_BFu0ll_BFu31i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu31ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Us_BFu0ll_BFu31ll) C1{ Fs FL:0 FL:31}



static void Test_Us_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu31ll");
    static Us_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Us_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Us_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu31ll(Test_Us_BFu0ll_BFu31ll, "Us_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu32i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Us_BFu0ll_BFu32i) C1{ Fs FL:0 Fi:32}



static void Test_Us_BFu0ll_BFu32i()
{
  {
    init_simple_test("Us_BFu0ll_BFu32i");
    static Us_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Us_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Us_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu32i(Test_Us_BFu0ll_BFu32i, "Us_BFu0ll_BFu32i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu32ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Us_BFu0ll_BFu32ll) C1{ Fs FL:0 FL:32}



static void Test_Us_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu32ll");
    static Us_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Us_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Us_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu32ll(Test_Us_BFu0ll_BFu32ll, "Us_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu33  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Us_BFu0ll_BFu33) C1{ Fs FL:0 FL:33}



static void Test_Us_BFu0ll_BFu33()
{
  {
    init_simple_test("Us_BFu0ll_BFu33");
    static Us_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Us_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Us_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu33(Test_Us_BFu0ll_BFu33, "Us_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu7c  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Us_BFu0ll_BFu7c) C1{ Fs FL:0 Fc:7}



static void Test_Us_BFu0ll_BFu7c()
{
  {
    init_simple_test("Us_BFu0ll_BFu7c");
    static Us_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Us_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Us_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu7c(Test_Us_BFu0ll_BFu7c, "Us_BFu0ll_BFu7c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu7i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Us_BFu0ll_BFu7i) C1{ Fs FL:0 Fi:7}



static void Test_Us_BFu0ll_BFu7i()
{
  {
    init_simple_test("Us_BFu0ll_BFu7i");
    static Us_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Us_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Us_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu7i(Test_Us_BFu0ll_BFu7i, "Us_BFu0ll_BFu7i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu7ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Us_BFu0ll_BFu7ll) C1{ Fs FL:0 FL:7}



static void Test_Us_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu7ll");
    static Us_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Us_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Us_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu7ll(Test_Us_BFu0ll_BFu7ll, "Us_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu7s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Us_BFu0ll_BFu7s) C1{ Fs FL:0 Fs:7}



static void Test_Us_BFu0ll_BFu7s()
{
  {
    init_simple_test("Us_BFu0ll_BFu7s");
    static Us_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Us_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Us_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu7s(Test_Us_BFu0ll_BFu7s, "Us_BFu0ll_BFu7s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu8c  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Us_BFu0ll_BFu8c) C1{ Fs FL:0 Fc:8}



static void Test_Us_BFu0ll_BFu8c()
{
  {
    init_simple_test("Us_BFu0ll_BFu8c");
    static Us_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Us_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Us_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu8c(Test_Us_BFu0ll_BFu8c, "Us_BFu0ll_BFu8c", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu8i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Us_BFu0ll_BFu8i) C1{ Fs FL:0 Fi:8}



static void Test_Us_BFu0ll_BFu8i()
{
  {
    init_simple_test("Us_BFu0ll_BFu8i");
    static Us_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Us_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Us_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu8i(Test_Us_BFu0ll_BFu8i, "Us_BFu0ll_BFu8i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu8ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Us_BFu0ll_BFu8ll) C1{ Fs FL:0 FL:8}



static void Test_Us_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu8ll");
    static Us_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Us_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Us_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu8ll(Test_Us_BFu0ll_BFu8ll, "Us_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu8s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Us_BFu0ll_BFu8s) C1{ Fs FL:0 Fs:8}



static void Test_Us_BFu0ll_BFu8s()
{
  {
    init_simple_test("Us_BFu0ll_BFu8s");
    static Us_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Us_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Us_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu8s(Test_Us_BFu0ll_BFu8s, "Us_BFu0ll_BFu8s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu9i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Us_BFu0ll_BFu9i) C1{ Fs FL:0 Fi:9}



static void Test_Us_BFu0ll_BFu9i()
{
  {
    init_simple_test("Us_BFu0ll_BFu9i");
    static Us_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Us_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Us_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu9i(Test_Us_BFu0ll_BFu9i, "Us_BFu0ll_BFu9i", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu9ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Us_BFu0ll_BFu9ll) C1{ Fs FL:0 FL:9}



static void Test_Us_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu9ll");
    static Us_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Us_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Us_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu9ll(Test_Us_BFu0ll_BFu9ll, "Us_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_BFu9s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Us_BFu0ll_BFu9s) C1{ Fs FL:0 Fs:9}



static void Test_Us_BFu0ll_BFu9s()
{
  {
    init_simple_test("Us_BFu0ll_BFu9s");
    static Us_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Us_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Us_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_BFu9s(Test_Us_BFu0ll_BFu9s, "Us_BFu0ll_BFu9s", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_C  {
  unsigned short v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Us_BFu0ll_C) C1{ Fs FL:0 Fc}



static void Test_Us_BFu0ll_C()
{
  {
    init_simple_test("Us_BFu0ll_C");
    static Us_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_C(Test_Us_BFu0ll_C, "Us_BFu0ll_C", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_D  {
  unsigned short v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Us_BFu0ll_D) C1{ Fs FL:0 FL}



static void Test_Us_BFu0ll_D()
{
  {
    init_simple_test("Us_BFu0ll_D");
    static Us_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_D(Test_Us_BFu0ll_D, "Us_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_F  {
  unsigned short v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Us_BFu0ll_F) C1{ Fs FL:0 Fi}



static void Test_Us_BFu0ll_F()
{
  {
    init_simple_test("Us_BFu0ll_F");
    static Us_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_F(Test_Us_BFu0ll_F, "Us_BFu0ll_F", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_I  {
  unsigned short v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Us_BFu0ll_I) C1{ Fs FL:0 Fi}



static void Test_Us_BFu0ll_I()
{
  {
    init_simple_test("Us_BFu0ll_I");
    static Us_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_I(Test_Us_BFu0ll_I, "Us_BFu0ll_I", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_Ip  {
  unsigned short v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Us_BFu0ll_Ip) C1{ Fs FL:0 Fp}



static void Test_Us_BFu0ll_Ip()
{
  {
    init_simple_test("Us_BFu0ll_Ip");
    static Us_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_Ip(Test_Us_BFu0ll_Ip, "Us_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_L  {
  unsigned short v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Us_BFu0ll_L) C1{ Fs FL:0 FL}



static void Test_Us_BFu0ll_L()
{
  {
    init_simple_test("Us_BFu0ll_L");
    static Us_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_L(Test_Us_BFu0ll_L, "Us_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_S  {
  unsigned short v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Us_BFu0ll_S) C1{ Fs FL:0 Fs}



static void Test_Us_BFu0ll_S()
{
  {
    init_simple_test("Us_BFu0ll_S");
    static Us_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_S(Test_Us_BFu0ll_S, "Us_BFu0ll_S", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_Uc  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Us_BFu0ll_Uc) C1{ Fs FL:0 Fc}



static void Test_Us_BFu0ll_Uc()
{
  {
    init_simple_test("Us_BFu0ll_Uc");
    static Us_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_Uc(Test_Us_BFu0ll_Uc, "Us_BFu0ll_Uc", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_Ui  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Us_BFu0ll_Ui) C1{ Fs FL:0 Fi}



static void Test_Us_BFu0ll_Ui()
{
  {
    init_simple_test("Us_BFu0ll_Ui");
    static Us_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_Ui(Test_Us_BFu0ll_Ui, "Us_BFu0ll_Ui", ABISELECT(12,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_Ul  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Us_BFu0ll_Ul) C1{ Fs FL:0 FL}



static void Test_Us_BFu0ll_Ul()
{
  {
    init_simple_test("Us_BFu0ll_Ul");
    static Us_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_Ul(Test_Us_BFu0ll_Ul, "Us_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_Us  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Us_BFu0ll_Us) C1{ Fs FL:0 Fs}



static void Test_Us_BFu0ll_Us()
{
  {
    init_simple_test("Us_BFu0ll_Us");
    static Us_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_Us(Test_Us_BFu0ll_Us, "Us_BFu0ll_Us", ABISELECT(10,6));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0ll_Vp  {
  unsigned short v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Us_BFu0ll_Vp) C1{ Fs FL:0 Fp}



static void Test_Us_BFu0ll_Vp()
{
  {
    init_simple_test("Us_BFu0ll_Vp");
    static Us_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0ll_Vp(Test_Us_BFu0ll_Vp, "Us_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s  {
  unsigned short v1;
  unsigned short  :0;
};
//SIG(1 Us_BFu0s) C1{ Fs Fs:0}



static void Test_Us_BFu0s()
{
  {
    init_simple_test("Us_BFu0s");
    static Us_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0s(Test_Us_BFu0s, "Us_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu0c  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Us_BFu0s_BFu0c) C1{ Fs Fs:0 Fc:0}



static void Test_Us_BFu0s_BFu0c()
{
  {
    init_simple_test("Us_BFu0s_BFu0c");
    static Us_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu0c(Test_Us_BFu0s_BFu0c, "Us_BFu0s_BFu0c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu0i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Us_BFu0s_BFu0i) C1{ Fs Fs:0 Fi:0}



static void Test_Us_BFu0s_BFu0i()
{
  {
    init_simple_test("Us_BFu0s_BFu0i");
    static Us_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu0i(Test_Us_BFu0s_BFu0i, "Us_BFu0s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu0ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Us_BFu0s_BFu0ll) C1{ Fs Fs:0 FL:0}



static void Test_Us_BFu0s_BFu0ll()
{
  {
    init_simple_test("Us_BFu0s_BFu0ll");
    static Us_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu0ll(Test_Us_BFu0s_BFu0ll, "Us_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu0s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Us_BFu0s_BFu0s) C1{ Fs Fs:0 Fs:0}



static void Test_Us_BFu0s_BFu0s()
{
  {
    init_simple_test("Us_BFu0s_BFu0s");
    static Us_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu0s(Test_Us_BFu0s_BFu0s, "Us_BFu0s_BFu0s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu15i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Us_BFu0s_BFu15i) C1{ Fs Fs:0 Fi:15}



static void Test_Us_BFu0s_BFu15i()
{
  {
    init_simple_test("Us_BFu0s_BFu15i");
    static Us_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu15i(Test_Us_BFu0s_BFu15i, "Us_BFu0s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu15ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Us_BFu0s_BFu15ll) C1{ Fs Fs:0 FL:15}



static void Test_Us_BFu0s_BFu15ll()
{
  {
    init_simple_test("Us_BFu0s_BFu15ll");
    static Us_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu15ll(Test_Us_BFu0s_BFu15ll, "Us_BFu0s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu15s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Us_BFu0s_BFu15s) C1{ Fs Fs:0 Fs:15}



static void Test_Us_BFu0s_BFu15s()
{
  {
    init_simple_test("Us_BFu0s_BFu15s");
    static Us_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu15s(Test_Us_BFu0s_BFu15s, "Us_BFu0s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu16i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Us_BFu0s_BFu16i) C1{ Fs Fs:0 Fi:16}



static void Test_Us_BFu0s_BFu16i()
{
  {
    init_simple_test("Us_BFu0s_BFu16i");
    static Us_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu16i(Test_Us_BFu0s_BFu16i, "Us_BFu0s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu16ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Us_BFu0s_BFu16ll) C1{ Fs Fs:0 FL:16}



static void Test_Us_BFu0s_BFu16ll()
{
  {
    init_simple_test("Us_BFu0s_BFu16ll");
    static Us_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu16ll(Test_Us_BFu0s_BFu16ll, "Us_BFu0s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu16s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Us_BFu0s_BFu16s) C1{ Fs Fs:0 Fs:16}



static void Test_Us_BFu0s_BFu16s()
{
  {
    init_simple_test("Us_BFu0s_BFu16s");
    static Us_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu16s(Test_Us_BFu0s_BFu16s, "Us_BFu0s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu17i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Us_BFu0s_BFu17i) C1{ Fs Fs:0 Fi:17}



static void Test_Us_BFu0s_BFu17i()
{
  {
    init_simple_test("Us_BFu0s_BFu17i");
    static Us_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu17i(Test_Us_BFu0s_BFu17i, "Us_BFu0s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu17ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Us_BFu0s_BFu17ll) C1{ Fs Fs:0 FL:17}



static void Test_Us_BFu0s_BFu17ll()
{
  {
    init_simple_test("Us_BFu0s_BFu17ll");
    static Us_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu17ll(Test_Us_BFu0s_BFu17ll, "Us_BFu0s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu1c  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Us_BFu0s_BFu1c) C1{ Fs Fs:0 Fc:1}



static void Test_Us_BFu0s_BFu1c()
{
  {
    init_simple_test("Us_BFu0s_BFu1c");
    static Us_BFu0s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu1c(Test_Us_BFu0s_BFu1c, "Us_BFu0s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu1i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Us_BFu0s_BFu1i) C1{ Fs Fs:0 Fi:1}



static void Test_Us_BFu0s_BFu1i()
{
  {
    init_simple_test("Us_BFu0s_BFu1i");
    static Us_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu1i(Test_Us_BFu0s_BFu1i, "Us_BFu0s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu1ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Us_BFu0s_BFu1ll) C1{ Fs Fs:0 FL:1}



static void Test_Us_BFu0s_BFu1ll()
{
  {
    init_simple_test("Us_BFu0s_BFu1ll");
    static Us_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu1ll(Test_Us_BFu0s_BFu1ll, "Us_BFu0s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu1s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Us_BFu0s_BFu1s) C1{ Fs Fs:0 Fs:1}



static void Test_Us_BFu0s_BFu1s()
{
  {
    init_simple_test("Us_BFu0s_BFu1s");
    static Us_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu1s(Test_Us_BFu0s_BFu1s, "Us_BFu0s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu31i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Us_BFu0s_BFu31i) C1{ Fs Fs:0 Fi:31}



static void Test_Us_BFu0s_BFu31i()
{
  {
    init_simple_test("Us_BFu0s_BFu31i");
    static Us_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu31i(Test_Us_BFu0s_BFu31i, "Us_BFu0s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu31ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Us_BFu0s_BFu31ll) C1{ Fs Fs:0 FL:31}



static void Test_Us_BFu0s_BFu31ll()
{
  {
    init_simple_test("Us_BFu0s_BFu31ll");
    static Us_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu31ll(Test_Us_BFu0s_BFu31ll, "Us_BFu0s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu32i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Us_BFu0s_BFu32i) C1{ Fs Fs:0 Fi:32}



static void Test_Us_BFu0s_BFu32i()
{
  {
    init_simple_test("Us_BFu0s_BFu32i");
    static Us_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu32i(Test_Us_BFu0s_BFu32i, "Us_BFu0s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu32ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Us_BFu0s_BFu32ll) C1{ Fs Fs:0 FL:32}



static void Test_Us_BFu0s_BFu32ll()
{
  {
    init_simple_test("Us_BFu0s_BFu32ll");
    static Us_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu32ll(Test_Us_BFu0s_BFu32ll, "Us_BFu0s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu33  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Us_BFu0s_BFu33) C1{ Fs Fs:0 FL:33}



static void Test_Us_BFu0s_BFu33()
{
  {
    init_simple_test("Us_BFu0s_BFu33");
    static Us_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu33(Test_Us_BFu0s_BFu33, "Us_BFu0s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu7c  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Us_BFu0s_BFu7c) C1{ Fs Fs:0 Fc:7}



static void Test_Us_BFu0s_BFu7c()
{
  {
    init_simple_test("Us_BFu0s_BFu7c");
    static Us_BFu0s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu7c(Test_Us_BFu0s_BFu7c, "Us_BFu0s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu7i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Us_BFu0s_BFu7i) C1{ Fs Fs:0 Fi:7}



static void Test_Us_BFu0s_BFu7i()
{
  {
    init_simple_test("Us_BFu0s_BFu7i");
    static Us_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu7i(Test_Us_BFu0s_BFu7i, "Us_BFu0s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu7ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Us_BFu0s_BFu7ll) C1{ Fs Fs:0 FL:7}



static void Test_Us_BFu0s_BFu7ll()
{
  {
    init_simple_test("Us_BFu0s_BFu7ll");
    static Us_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu7ll(Test_Us_BFu0s_BFu7ll, "Us_BFu0s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu7s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Us_BFu0s_BFu7s) C1{ Fs Fs:0 Fs:7}



static void Test_Us_BFu0s_BFu7s()
{
  {
    init_simple_test("Us_BFu0s_BFu7s");
    static Us_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu7s(Test_Us_BFu0s_BFu7s, "Us_BFu0s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu8c  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Us_BFu0s_BFu8c) C1{ Fs Fs:0 Fc:8}



static void Test_Us_BFu0s_BFu8c()
{
  {
    init_simple_test("Us_BFu0s_BFu8c");
    static Us_BFu0s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu8c(Test_Us_BFu0s_BFu8c, "Us_BFu0s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu8i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Us_BFu0s_BFu8i) C1{ Fs Fs:0 Fi:8}



static void Test_Us_BFu0s_BFu8i()
{
  {
    init_simple_test("Us_BFu0s_BFu8i");
    static Us_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu8i(Test_Us_BFu0s_BFu8i, "Us_BFu0s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu8ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Us_BFu0s_BFu8ll) C1{ Fs Fs:0 FL:8}



static void Test_Us_BFu0s_BFu8ll()
{
  {
    init_simple_test("Us_BFu0s_BFu8ll");
    static Us_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu8ll(Test_Us_BFu0s_BFu8ll, "Us_BFu0s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu8s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Us_BFu0s_BFu8s) C1{ Fs Fs:0 Fs:8}



static void Test_Us_BFu0s_BFu8s()
{
  {
    init_simple_test("Us_BFu0s_BFu8s");
    static Us_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu8s(Test_Us_BFu0s_BFu8s, "Us_BFu0s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu9i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Us_BFu0s_BFu9i) C1{ Fs Fs:0 Fi:9}



static void Test_Us_BFu0s_BFu9i()
{
  {
    init_simple_test("Us_BFu0s_BFu9i");
    static Us_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu9i(Test_Us_BFu0s_BFu9i, "Us_BFu0s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu9ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Us_BFu0s_BFu9ll) C1{ Fs Fs:0 FL:9}



static void Test_Us_BFu0s_BFu9ll()
{
  {
    init_simple_test("Us_BFu0s_BFu9ll");
    static Us_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu9ll(Test_Us_BFu0s_BFu9ll, "Us_BFu0s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_BFu9s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Us_BFu0s_BFu9s) C1{ Fs Fs:0 Fs:9}



static void Test_Us_BFu0s_BFu9s()
{
  {
    init_simple_test("Us_BFu0s_BFu9s");
    static Us_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_BFu9s(Test_Us_BFu0s_BFu9s, "Us_BFu0s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_C  {
  unsigned short v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Us_BFu0s_C) C1{ Fs Fs:0 Fc}



static void Test_Us_BFu0s_C()
{
  {
    init_simple_test("Us_BFu0s_C");
    static Us_BFu0s_C lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_C)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_C.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_C(Test_Us_BFu0s_C, "Us_BFu0s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_D  {
  unsigned short v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Us_BFu0s_D) C1{ Fs Fs:0 FL}



static void Test_Us_BFu0s_D()
{
  {
    init_simple_test("Us_BFu0s_D");
    static Us_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_D(Test_Us_BFu0s_D, "Us_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_F  {
  unsigned short v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Us_BFu0s_F) C1{ Fs Fs:0 Fi}



static void Test_Us_BFu0s_F()
{
  {
    init_simple_test("Us_BFu0s_F");
    static Us_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_F(Test_Us_BFu0s_F, "Us_BFu0s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_I  {
  unsigned short v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Us_BFu0s_I) C1{ Fs Fs:0 Fi}



static void Test_Us_BFu0s_I()
{
  {
    init_simple_test("Us_BFu0s_I");
    static Us_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_I(Test_Us_BFu0s_I, "Us_BFu0s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_Ip  {
  unsigned short v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Us_BFu0s_Ip) C1{ Fs Fs:0 Fp}



static void Test_Us_BFu0s_Ip()
{
  {
    init_simple_test("Us_BFu0s_Ip");
    static Us_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_Ip(Test_Us_BFu0s_Ip, "Us_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_L  {
  unsigned short v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Us_BFu0s_L) C1{ Fs Fs:0 FL}



static void Test_Us_BFu0s_L()
{
  {
    init_simple_test("Us_BFu0s_L");
    static Us_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_L(Test_Us_BFu0s_L, "Us_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_S  {
  unsigned short v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Us_BFu0s_S) C1{ Fs Fs:0 Fs}



static void Test_Us_BFu0s_S()
{
  {
    init_simple_test("Us_BFu0s_S");
    static Us_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_S.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_S(Test_Us_BFu0s_S, "Us_BFu0s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_Uc  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Us_BFu0s_Uc) C1{ Fs Fs:0 Fc}



static void Test_Us_BFu0s_Uc()
{
  {
    init_simple_test("Us_BFu0s_Uc");
    static Us_BFu0s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_Uc(Test_Us_BFu0s_Uc, "Us_BFu0s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_Ui  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Us_BFu0s_Ui) C1{ Fs Fs:0 Fi}



static void Test_Us_BFu0s_Ui()
{
  {
    init_simple_test("Us_BFu0s_Ui");
    static Us_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_Ui(Test_Us_BFu0s_Ui, "Us_BFu0s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_Ul  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Us_BFu0s_Ul) C1{ Fs Fs:0 FL}



static void Test_Us_BFu0s_Ul()
{
  {
    init_simple_test("Us_BFu0s_Ul");
    static Us_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_Ul(Test_Us_BFu0s_Ul, "Us_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_Us  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Us_BFu0s_Us) C1{ Fs Fs:0 Fs}



static void Test_Us_BFu0s_Us()
{
  {
    init_simple_test("Us_BFu0s_Us");
    static Us_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Us.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_Us(Test_Us_BFu0s_Us, "Us_BFu0s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu0s_Vp  {
  unsigned short v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Us_BFu0s_Vp) C1{ Fs Fs:0 Fp}



static void Test_Us_BFu0s_Vp()
{
  {
    init_simple_test("Us_BFu0s_Vp");
    static Us_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vUs_BFu0s_Vp(Test_Us_BFu0s_Vp, "Us_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15i_BFu0c  {
  unsigned short v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Us_BFu15i_BFu0c) C1{ Fs Fi:15 Fc:0}



static void Test_Us_BFu15i_BFu0c()
{
  {
    init_simple_test("Us_BFu15i_BFu0c");
    static Us_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu15i_BFu0c(Test_Us_BFu15i_BFu0c, "Us_BFu15i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15i_BFu0i  {
  unsigned short v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Us_BFu15i_BFu0i) C1{ Fs Fi:15 Fi:0}



static void Test_Us_BFu15i_BFu0i()
{
  {
    init_simple_test("Us_BFu15i_BFu0i");
    static Us_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu15i_BFu0i(Test_Us_BFu15i_BFu0i, "Us_BFu15i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Us_BFu15i_BFu0ll) C1{ Fs Fi:15 FL:0}



static void Test_Us_BFu15i_BFu0ll()
{
  {
    init_simple_test("Us_BFu15i_BFu0ll");
    static Us_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu15i_BFu0ll(Test_Us_BFu15i_BFu0ll, "Us_BFu15i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15i_BFu0s  {
  unsigned short v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Us_BFu15i_BFu0s) C1{ Fs Fi:15 Fs:0}



static void Test_Us_BFu15i_BFu0s()
{
  {
    init_simple_test("Us_BFu15i_BFu0s");
    static Us_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu15i_BFu0s(Test_Us_BFu15i_BFu0s, "Us_BFu15i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Us_BFu15ll_BFu0c) C1{ Fs FL:15 Fc:0}



static void Test_Us_BFu15ll_BFu0c()
{
  {
    init_simple_test("Us_BFu15ll_BFu0c");
    static Us_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu15ll_BFu0c(Test_Us_BFu15ll_BFu0c, "Us_BFu15ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Us_BFu15ll_BFu0i) C1{ Fs FL:15 Fi:0}



static void Test_Us_BFu15ll_BFu0i()
{
  {
    init_simple_test("Us_BFu15ll_BFu0i");
    static Us_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu15ll_BFu0i(Test_Us_BFu15ll_BFu0i, "Us_BFu15ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Us_BFu15ll_BFu0ll) C1{ Fs FL:15 FL:0}



static void Test_Us_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu15ll_BFu0ll");
    static Us_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu15ll_BFu0ll(Test_Us_BFu15ll_BFu0ll, "Us_BFu15ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Us_BFu15ll_BFu0s) C1{ Fs FL:15 Fs:0}



static void Test_Us_BFu15ll_BFu0s()
{
  {
    init_simple_test("Us_BFu15ll_BFu0s");
    static Us_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu15ll_BFu0s(Test_Us_BFu15ll_BFu0s, "Us_BFu15ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15s_BFu0c  {
  unsigned short v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Us_BFu15s_BFu0c) C1{ Fs Fs:15 Fc:0}



static void Test_Us_BFu15s_BFu0c()
{
  {
    init_simple_test("Us_BFu15s_BFu0c");
    static Us_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu15s_BFu0c(Test_Us_BFu15s_BFu0c, "Us_BFu15s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15s_BFu0i  {
  unsigned short v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Us_BFu15s_BFu0i) C1{ Fs Fs:15 Fi:0}



static void Test_Us_BFu15s_BFu0i()
{
  {
    init_simple_test("Us_BFu15s_BFu0i");
    static Us_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu15s_BFu0i(Test_Us_BFu15s_BFu0i, "Us_BFu15s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Us_BFu15s_BFu0ll) C1{ Fs Fs:15 FL:0}



static void Test_Us_BFu15s_BFu0ll()
{
  {
    init_simple_test("Us_BFu15s_BFu0ll");
    static Us_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu15s_BFu0ll(Test_Us_BFu15s_BFu0ll, "Us_BFu15s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu15s_BFu0s  {
  unsigned short v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Us_BFu15s_BFu0s) C1{ Fs Fs:15 Fs:0}



static void Test_Us_BFu15s_BFu0s()
{
  {
    init_simple_test("Us_BFu15s_BFu0s");
    static Us_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu15s_BFu0s(Test_Us_BFu15s_BFu0s, "Us_BFu15s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16i_BFu0c  {
  unsigned short v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Us_BFu16i_BFu0c) C1{ Fs Fi:16 Fc:0}



static void Test_Us_BFu16i_BFu0c()
{
  {
    init_simple_test("Us_BFu16i_BFu0c");
    static Us_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu16i_BFu0c(Test_Us_BFu16i_BFu0c, "Us_BFu16i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16i_BFu0i  {
  unsigned short v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Us_BFu16i_BFu0i) C1{ Fs Fi:16 Fi:0}



static void Test_Us_BFu16i_BFu0i()
{
  {
    init_simple_test("Us_BFu16i_BFu0i");
    static Us_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu16i_BFu0i(Test_Us_BFu16i_BFu0i, "Us_BFu16i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Us_BFu16i_BFu0ll) C1{ Fs Fi:16 FL:0}



static void Test_Us_BFu16i_BFu0ll()
{
  {
    init_simple_test("Us_BFu16i_BFu0ll");
    static Us_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu16i_BFu0ll(Test_Us_BFu16i_BFu0ll, "Us_BFu16i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16i_BFu0s  {
  unsigned short v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Us_BFu16i_BFu0s) C1{ Fs Fi:16 Fs:0}



static void Test_Us_BFu16i_BFu0s()
{
  {
    init_simple_test("Us_BFu16i_BFu0s");
    static Us_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu16i_BFu0s(Test_Us_BFu16i_BFu0s, "Us_BFu16i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Us_BFu16ll_BFu0c) C1{ Fs FL:16 Fc:0}



static void Test_Us_BFu16ll_BFu0c()
{
  {
    init_simple_test("Us_BFu16ll_BFu0c");
    static Us_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu16ll_BFu0c(Test_Us_BFu16ll_BFu0c, "Us_BFu16ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Us_BFu16ll_BFu0i) C1{ Fs FL:16 Fi:0}



static void Test_Us_BFu16ll_BFu0i()
{
  {
    init_simple_test("Us_BFu16ll_BFu0i");
    static Us_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu16ll_BFu0i(Test_Us_BFu16ll_BFu0i, "Us_BFu16ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Us_BFu16ll_BFu0ll) C1{ Fs FL:16 FL:0}



static void Test_Us_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu16ll_BFu0ll");
    static Us_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu16ll_BFu0ll(Test_Us_BFu16ll_BFu0ll, "Us_BFu16ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Us_BFu16ll_BFu0s) C1{ Fs FL:16 Fs:0}



static void Test_Us_BFu16ll_BFu0s()
{
  {
    init_simple_test("Us_BFu16ll_BFu0s");
    static Us_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu16ll_BFu0s(Test_Us_BFu16ll_BFu0s, "Us_BFu16ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16s_BFu0c  {
  unsigned short v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Us_BFu16s_BFu0c) C1{ Fs Fs:16 Fc:0}



static void Test_Us_BFu16s_BFu0c()
{
  {
    init_simple_test("Us_BFu16s_BFu0c");
    static Us_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu16s_BFu0c(Test_Us_BFu16s_BFu0c, "Us_BFu16s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16s_BFu0i  {
  unsigned short v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Us_BFu16s_BFu0i) C1{ Fs Fs:16 Fi:0}



static void Test_Us_BFu16s_BFu0i()
{
  {
    init_simple_test("Us_BFu16s_BFu0i");
    static Us_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu16s_BFu0i(Test_Us_BFu16s_BFu0i, "Us_BFu16s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Us_BFu16s_BFu0ll) C1{ Fs Fs:16 FL:0}



static void Test_Us_BFu16s_BFu0ll()
{
  {
    init_simple_test("Us_BFu16s_BFu0ll");
    static Us_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu16s_BFu0ll(Test_Us_BFu16s_BFu0ll, "Us_BFu16s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu16s_BFu0s  {
  unsigned short v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Us_BFu16s_BFu0s) C1{ Fs Fs:16 Fs:0}



static void Test_Us_BFu16s_BFu0s()
{
  {
    init_simple_test("Us_BFu16s_BFu0s");
    static Us_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu16s_BFu0s(Test_Us_BFu16s_BFu0s, "Us_BFu16s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17i_BFu0c  {
  unsigned short v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Us_BFu17i_BFu0c) C1{ Fs Fi:17 Fc:0}



static void Test_Us_BFu17i_BFu0c()
{
  {
    init_simple_test("Us_BFu17i_BFu0c");
    static Us_BFu17i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu17i_BFu0c(Test_Us_BFu17i_BFu0c, "Us_BFu17i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17i_BFu0i  {
  unsigned short v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Us_BFu17i_BFu0i) C1{ Fs Fi:17 Fi:0}



static void Test_Us_BFu17i_BFu0i()
{
  {
    init_simple_test("Us_BFu17i_BFu0i");
    static Us_BFu17i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu17i_BFu0i(Test_Us_BFu17i_BFu0i, "Us_BFu17i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Us_BFu17i_BFu0ll) C1{ Fs Fi:17 FL:0}



static void Test_Us_BFu17i_BFu0ll()
{
  {
    init_simple_test("Us_BFu17i_BFu0ll");
    static Us_BFu17i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu17i_BFu0ll(Test_Us_BFu17i_BFu0ll, "Us_BFu17i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17i_BFu0s  {
  unsigned short v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Us_BFu17i_BFu0s) C1{ Fs Fi:17 Fs:0}



static void Test_Us_BFu17i_BFu0s()
{
  {
    init_simple_test("Us_BFu17i_BFu0s");
    static Us_BFu17i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu17i_BFu0s(Test_Us_BFu17i_BFu0s, "Us_BFu17i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Us_BFu17ll_BFu0c) C1{ Fs FL:17 Fc:0}



static void Test_Us_BFu17ll_BFu0c()
{
  {
    init_simple_test("Us_BFu17ll_BFu0c");
    static Us_BFu17ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu17ll_BFu0c(Test_Us_BFu17ll_BFu0c, "Us_BFu17ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Us_BFu17ll_BFu0i) C1{ Fs FL:17 Fi:0}



static void Test_Us_BFu17ll_BFu0i()
{
  {
    init_simple_test("Us_BFu17ll_BFu0i");
    static Us_BFu17ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu17ll_BFu0i(Test_Us_BFu17ll_BFu0i, "Us_BFu17ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Us_BFu17ll_BFu0ll) C1{ Fs FL:17 FL:0}



static void Test_Us_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu17ll_BFu0ll");
    static Us_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu17ll_BFu0ll(Test_Us_BFu17ll_BFu0ll, "Us_BFu17ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu17ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Us_BFu17ll_BFu0s) C1{ Fs FL:17 Fs:0}



static void Test_Us_BFu17ll_BFu0s()
{
  {
    init_simple_test("Us_BFu17ll_BFu0s");
    static Us_BFu17ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu17ll_BFu0s(Test_Us_BFu17ll_BFu0s, "Us_BFu17ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1c_BFu0c  {
  unsigned short v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Us_BFu1c_BFu0c) C1{ Fs Fc:1 Fc:0}



static void Test_Us_BFu1c_BFu0c()
{
  {
    init_simple_test("Us_BFu1c_BFu0c");
    static Us_BFu1c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu1c_BFu0c(Test_Us_BFu1c_BFu0c, "Us_BFu1c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1c_BFu0i  {
  unsigned short v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Us_BFu1c_BFu0i) C1{ Fs Fc:1 Fi:0}



static void Test_Us_BFu1c_BFu0i()
{
  {
    init_simple_test("Us_BFu1c_BFu0i");
    static Us_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu1c_BFu0i(Test_Us_BFu1c_BFu0i, "Us_BFu1c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1c_BFu0ll  {
  unsigned short v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Us_BFu1c_BFu0ll) C1{ Fs Fc:1 FL:0}



static void Test_Us_BFu1c_BFu0ll()
{
  {
    init_simple_test("Us_BFu1c_BFu0ll");
    static Us_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu1c_BFu0ll(Test_Us_BFu1c_BFu0ll, "Us_BFu1c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1c_BFu0s  {
  unsigned short v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Us_BFu1c_BFu0s) C1{ Fs Fc:1 Fs:0}



static void Test_Us_BFu1c_BFu0s()
{
  {
    init_simple_test("Us_BFu1c_BFu0s");
    static Us_BFu1c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu1c_BFu0s(Test_Us_BFu1c_BFu0s, "Us_BFu1c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1i_BFu0c  {
  unsigned short v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Us_BFu1i_BFu0c) C1{ Fs Fi:1 Fc:0}



static void Test_Us_BFu1i_BFu0c()
{
  {
    init_simple_test("Us_BFu1i_BFu0c");
    static Us_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu1i_BFu0c(Test_Us_BFu1i_BFu0c, "Us_BFu1i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1i_BFu0i  {
  unsigned short v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Us_BFu1i_BFu0i) C1{ Fs Fi:1 Fi:0}



static void Test_Us_BFu1i_BFu0i()
{
  {
    init_simple_test("Us_BFu1i_BFu0i");
    static Us_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu1i_BFu0i(Test_Us_BFu1i_BFu0i, "Us_BFu1i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Us_BFu1i_BFu0ll) C1{ Fs Fi:1 FL:0}



static void Test_Us_BFu1i_BFu0ll()
{
  {
    init_simple_test("Us_BFu1i_BFu0ll");
    static Us_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu1i_BFu0ll(Test_Us_BFu1i_BFu0ll, "Us_BFu1i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1i_BFu0s  {
  unsigned short v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Us_BFu1i_BFu0s) C1{ Fs Fi:1 Fs:0}



static void Test_Us_BFu1i_BFu0s()
{
  {
    init_simple_test("Us_BFu1i_BFu0s");
    static Us_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu1i_BFu0s(Test_Us_BFu1i_BFu0s, "Us_BFu1i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Us_BFu1ll_BFu0c) C1{ Fs FL:1 Fc:0}



static void Test_Us_BFu1ll_BFu0c()
{
  {
    init_simple_test("Us_BFu1ll_BFu0c");
    static Us_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu1ll_BFu0c(Test_Us_BFu1ll_BFu0c, "Us_BFu1ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Us_BFu1ll_BFu0i) C1{ Fs FL:1 Fi:0}



static void Test_Us_BFu1ll_BFu0i()
{
  {
    init_simple_test("Us_BFu1ll_BFu0i");
    static Us_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu1ll_BFu0i(Test_Us_BFu1ll_BFu0i, "Us_BFu1ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Us_BFu1ll_BFu0ll) C1{ Fs FL:1 FL:0}



static void Test_Us_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu1ll_BFu0ll");
    static Us_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu1ll_BFu0ll(Test_Us_BFu1ll_BFu0ll, "Us_BFu1ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Us_BFu1ll_BFu0s) C1{ Fs FL:1 Fs:0}



static void Test_Us_BFu1ll_BFu0s()
{
  {
    init_simple_test("Us_BFu1ll_BFu0s");
    static Us_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu1ll_BFu0s(Test_Us_BFu1ll_BFu0s, "Us_BFu1ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1s_BFu0c  {
  unsigned short v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Us_BFu1s_BFu0c) C1{ Fs Fs:1 Fc:0}



static void Test_Us_BFu1s_BFu0c()
{
  {
    init_simple_test("Us_BFu1s_BFu0c");
    static Us_BFu1s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu1s_BFu0c(Test_Us_BFu1s_BFu0c, "Us_BFu1s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1s_BFu0i  {
  unsigned short v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Us_BFu1s_BFu0i) C1{ Fs Fs:1 Fi:0}



static void Test_Us_BFu1s_BFu0i()
{
  {
    init_simple_test("Us_BFu1s_BFu0i");
    static Us_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu1s_BFu0i(Test_Us_BFu1s_BFu0i, "Us_BFu1s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Us_BFu1s_BFu0ll) C1{ Fs Fs:1 FL:0}



static void Test_Us_BFu1s_BFu0ll()
{
  {
    init_simple_test("Us_BFu1s_BFu0ll");
    static Us_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu1s_BFu0ll(Test_Us_BFu1s_BFu0ll, "Us_BFu1s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu1s_BFu0s  {
  unsigned short v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Us_BFu1s_BFu0s) C1{ Fs Fs:1 Fs:0}



static void Test_Us_BFu1s_BFu0s()
{
  {
    init_simple_test("Us_BFu1s_BFu0s");
    static Us_BFu1s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu1s_BFu0s(Test_Us_BFu1s_BFu0s, "Us_BFu1s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31i_BFu0c  {
  unsigned short v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Us_BFu31i_BFu0c) C1{ Fs Fi:31 Fc:0}



static void Test_Us_BFu31i_BFu0c()
{
  {
    init_simple_test("Us_BFu31i_BFu0c");
    static Us_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu31i_BFu0c(Test_Us_BFu31i_BFu0c, "Us_BFu31i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31i_BFu0i  {
  unsigned short v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Us_BFu31i_BFu0i) C1{ Fs Fi:31 Fi:0}



static void Test_Us_BFu31i_BFu0i()
{
  {
    init_simple_test("Us_BFu31i_BFu0i");
    static Us_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu31i_BFu0i(Test_Us_BFu31i_BFu0i, "Us_BFu31i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Us_BFu31i_BFu0ll) C1{ Fs Fi:31 FL:0}



static void Test_Us_BFu31i_BFu0ll()
{
  {
    init_simple_test("Us_BFu31i_BFu0ll");
    static Us_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu31i_BFu0ll(Test_Us_BFu31i_BFu0ll, "Us_BFu31i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31i_BFu0s  {
  unsigned short v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Us_BFu31i_BFu0s) C1{ Fs Fi:31 Fs:0}



static void Test_Us_BFu31i_BFu0s()
{
  {
    init_simple_test("Us_BFu31i_BFu0s");
    static Us_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu31i_BFu0s(Test_Us_BFu31i_BFu0s, "Us_BFu31i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Us_BFu31ll_BFu0c) C1{ Fs FL:31 Fc:0}



static void Test_Us_BFu31ll_BFu0c()
{
  {
    init_simple_test("Us_BFu31ll_BFu0c");
    static Us_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu31ll_BFu0c(Test_Us_BFu31ll_BFu0c, "Us_BFu31ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Us_BFu31ll_BFu0i) C1{ Fs FL:31 Fi:0}



static void Test_Us_BFu31ll_BFu0i()
{
  {
    init_simple_test("Us_BFu31ll_BFu0i");
    static Us_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu31ll_BFu0i(Test_Us_BFu31ll_BFu0i, "Us_BFu31ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Us_BFu31ll_BFu0ll) C1{ Fs FL:31 FL:0}



static void Test_Us_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu31ll_BFu0ll");
    static Us_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu31ll_BFu0ll(Test_Us_BFu31ll_BFu0ll, "Us_BFu31ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu31ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Us_BFu31ll_BFu0s) C1{ Fs FL:31 Fs:0}



static void Test_Us_BFu31ll_BFu0s()
{
  {
    init_simple_test("Us_BFu31ll_BFu0s");
    static Us_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu31ll_BFu0s(Test_Us_BFu31ll_BFu0s, "Us_BFu31ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32i_BFu0c  {
  unsigned short v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Us_BFu32i_BFu0c) C1{ Fs Fi:32 Fc:0}



static void Test_Us_BFu32i_BFu0c()
{
  {
    init_simple_test("Us_BFu32i_BFu0c");
    static Us_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu32i_BFu0c(Test_Us_BFu32i_BFu0c, "Us_BFu32i_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32i_BFu0i  {
  unsigned short v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Us_BFu32i_BFu0i) C1{ Fs Fi:32 Fi:0}



static void Test_Us_BFu32i_BFu0i()
{
  {
    init_simple_test("Us_BFu32i_BFu0i");
    static Us_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu32i_BFu0i(Test_Us_BFu32i_BFu0i, "Us_BFu32i_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Us_BFu32i_BFu0ll) C1{ Fs Fi:32 FL:0}



static void Test_Us_BFu32i_BFu0ll()
{
  {
    init_simple_test("Us_BFu32i_BFu0ll");
    static Us_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu32i_BFu0ll(Test_Us_BFu32i_BFu0ll, "Us_BFu32i_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32i_BFu0s  {
  unsigned short v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Us_BFu32i_BFu0s) C1{ Fs Fi:32 Fs:0}



static void Test_Us_BFu32i_BFu0s()
{
  {
    init_simple_test("Us_BFu32i_BFu0s");
    static Us_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu32i_BFu0s(Test_Us_BFu32i_BFu0s, "Us_BFu32i_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Us_BFu32ll_BFu0c) C1{ Fs FL:32 Fc:0}



static void Test_Us_BFu32ll_BFu0c()
{
  {
    init_simple_test("Us_BFu32ll_BFu0c");
    static Us_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu32ll_BFu0c(Test_Us_BFu32ll_BFu0c, "Us_BFu32ll_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Us_BFu32ll_BFu0i) C1{ Fs FL:32 Fi:0}



static void Test_Us_BFu32ll_BFu0i()
{
  {
    init_simple_test("Us_BFu32ll_BFu0i");
    static Us_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu32ll_BFu0i(Test_Us_BFu32ll_BFu0i, "Us_BFu32ll_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Us_BFu32ll_BFu0ll) C1{ Fs FL:32 FL:0}



static void Test_Us_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu32ll_BFu0ll");
    static Us_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu32ll_BFu0ll(Test_Us_BFu32ll_BFu0ll, "Us_BFu32ll_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu32ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Us_BFu32ll_BFu0s) C1{ Fs FL:32 Fs:0}



static void Test_Us_BFu32ll_BFu0s()
{
  {
    init_simple_test("Us_BFu32ll_BFu0s");
    static Us_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu32ll_BFu0s(Test_Us_BFu32ll_BFu0s, "Us_BFu32ll_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu33_BFu0c  {
  unsigned short v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Us_BFu33_BFu0c) C1{ Fs FL:33 Fc:0}



static void Test_Us_BFu33_BFu0c()
{
  {
    init_simple_test("Us_BFu33_BFu0c");
    static Us_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu33_BFu0c(Test_Us_BFu33_BFu0c, "Us_BFu33_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu33_BFu0i  {
  unsigned short v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Us_BFu33_BFu0i) C1{ Fs FL:33 Fi:0}



static void Test_Us_BFu33_BFu0i()
{
  {
    init_simple_test("Us_BFu33_BFu0i");
    static Us_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu33_BFu0i(Test_Us_BFu33_BFu0i, "Us_BFu33_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu33_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Us_BFu33_BFu0ll) C1{ Fs FL:33 FL:0}



static void Test_Us_BFu33_BFu0ll()
{
  {
    init_simple_test("Us_BFu33_BFu0ll");
    static Us_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu33_BFu0ll(Test_Us_BFu33_BFu0ll, "Us_BFu33_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu33_BFu0s  {
  unsigned short v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Us_BFu33_BFu0s) C1{ Fs FL:33 Fs:0}



static void Test_Us_BFu33_BFu0s()
{
  {
    init_simple_test("Us_BFu33_BFu0s");
    static Us_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu33_BFu0s(Test_Us_BFu33_BFu0s, "Us_BFu33_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7c_BFu0c  {
  unsigned short v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Us_BFu7c_BFu0c) C1{ Fs Fc:7 Fc:0}



static void Test_Us_BFu7c_BFu0c()
{
  {
    init_simple_test("Us_BFu7c_BFu0c");
    static Us_BFu7c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu7c_BFu0c(Test_Us_BFu7c_BFu0c, "Us_BFu7c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7c_BFu0i  {
  unsigned short v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Us_BFu7c_BFu0i) C1{ Fs Fc:7 Fi:0}



static void Test_Us_BFu7c_BFu0i()
{
  {
    init_simple_test("Us_BFu7c_BFu0i");
    static Us_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu7c_BFu0i(Test_Us_BFu7c_BFu0i, "Us_BFu7c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7c_BFu0ll  {
  unsigned short v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Us_BFu7c_BFu0ll) C1{ Fs Fc:7 FL:0}



static void Test_Us_BFu7c_BFu0ll()
{
  {
    init_simple_test("Us_BFu7c_BFu0ll");
    static Us_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu7c_BFu0ll(Test_Us_BFu7c_BFu0ll, "Us_BFu7c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7c_BFu0s  {
  unsigned short v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Us_BFu7c_BFu0s) C1{ Fs Fc:7 Fs:0}



static void Test_Us_BFu7c_BFu0s()
{
  {
    init_simple_test("Us_BFu7c_BFu0s");
    static Us_BFu7c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu7c_BFu0s(Test_Us_BFu7c_BFu0s, "Us_BFu7c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7i_BFu0c  {
  unsigned short v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Us_BFu7i_BFu0c) C1{ Fs Fi:7 Fc:0}



static void Test_Us_BFu7i_BFu0c()
{
  {
    init_simple_test("Us_BFu7i_BFu0c");
    static Us_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu7i_BFu0c(Test_Us_BFu7i_BFu0c, "Us_BFu7i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7i_BFu0i  {
  unsigned short v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Us_BFu7i_BFu0i) C1{ Fs Fi:7 Fi:0}



static void Test_Us_BFu7i_BFu0i()
{
  {
    init_simple_test("Us_BFu7i_BFu0i");
    static Us_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu7i_BFu0i(Test_Us_BFu7i_BFu0i, "Us_BFu7i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Us_BFu7i_BFu0ll) C1{ Fs Fi:7 FL:0}



static void Test_Us_BFu7i_BFu0ll()
{
  {
    init_simple_test("Us_BFu7i_BFu0ll");
    static Us_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu7i_BFu0ll(Test_Us_BFu7i_BFu0ll, "Us_BFu7i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7i_BFu0s  {
  unsigned short v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Us_BFu7i_BFu0s) C1{ Fs Fi:7 Fs:0}



static void Test_Us_BFu7i_BFu0s()
{
  {
    init_simple_test("Us_BFu7i_BFu0s");
    static Us_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu7i_BFu0s(Test_Us_BFu7i_BFu0s, "Us_BFu7i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Us_BFu7ll_BFu0c) C1{ Fs FL:7 Fc:0}



static void Test_Us_BFu7ll_BFu0c()
{
  {
    init_simple_test("Us_BFu7ll_BFu0c");
    static Us_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu7ll_BFu0c(Test_Us_BFu7ll_BFu0c, "Us_BFu7ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Us_BFu7ll_BFu0i) C1{ Fs FL:7 Fi:0}



static void Test_Us_BFu7ll_BFu0i()
{
  {
    init_simple_test("Us_BFu7ll_BFu0i");
    static Us_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu7ll_BFu0i(Test_Us_BFu7ll_BFu0i, "Us_BFu7ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Us_BFu7ll_BFu0ll) C1{ Fs FL:7 FL:0}



static void Test_Us_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu7ll_BFu0ll");
    static Us_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu7ll_BFu0ll(Test_Us_BFu7ll_BFu0ll, "Us_BFu7ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Us_BFu7ll_BFu0s) C1{ Fs FL:7 Fs:0}



static void Test_Us_BFu7ll_BFu0s()
{
  {
    init_simple_test("Us_BFu7ll_BFu0s");
    static Us_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu7ll_BFu0s(Test_Us_BFu7ll_BFu0s, "Us_BFu7ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7s_BFu0c  {
  unsigned short v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Us_BFu7s_BFu0c) C1{ Fs Fs:7 Fc:0}



static void Test_Us_BFu7s_BFu0c()
{
  {
    init_simple_test("Us_BFu7s_BFu0c");
    static Us_BFu7s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu7s_BFu0c(Test_Us_BFu7s_BFu0c, "Us_BFu7s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7s_BFu0i  {
  unsigned short v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Us_BFu7s_BFu0i) C1{ Fs Fs:7 Fi:0}



static void Test_Us_BFu7s_BFu0i()
{
  {
    init_simple_test("Us_BFu7s_BFu0i");
    static Us_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu7s_BFu0i(Test_Us_BFu7s_BFu0i, "Us_BFu7s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Us_BFu7s_BFu0ll) C1{ Fs Fs:7 FL:0}



static void Test_Us_BFu7s_BFu0ll()
{
  {
    init_simple_test("Us_BFu7s_BFu0ll");
    static Us_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu7s_BFu0ll(Test_Us_BFu7s_BFu0ll, "Us_BFu7s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu7s_BFu0s  {
  unsigned short v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Us_BFu7s_BFu0s) C1{ Fs Fs:7 Fs:0}



static void Test_Us_BFu7s_BFu0s()
{
  {
    init_simple_test("Us_BFu7s_BFu0s");
    static Us_BFu7s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu7s_BFu0s(Test_Us_BFu7s_BFu0s, "Us_BFu7s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8c_BFu0c  {
  unsigned short v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Us_BFu8c_BFu0c) C1{ Fs Fc:8 Fc:0}



static void Test_Us_BFu8c_BFu0c()
{
  {
    init_simple_test("Us_BFu8c_BFu0c");
    static Us_BFu8c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu8c_BFu0c(Test_Us_BFu8c_BFu0c, "Us_BFu8c_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8c_BFu0i  {
  unsigned short v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Us_BFu8c_BFu0i) C1{ Fs Fc:8 Fi:0}



static void Test_Us_BFu8c_BFu0i()
{
  {
    init_simple_test("Us_BFu8c_BFu0i");
    static Us_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu8c_BFu0i(Test_Us_BFu8c_BFu0i, "Us_BFu8c_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8c_BFu0ll  {
  unsigned short v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Us_BFu8c_BFu0ll) C1{ Fs Fc:8 FL:0}



static void Test_Us_BFu8c_BFu0ll()
{
  {
    init_simple_test("Us_BFu8c_BFu0ll");
    static Us_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu8c_BFu0ll(Test_Us_BFu8c_BFu0ll, "Us_BFu8c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8c_BFu0s  {
  unsigned short v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Us_BFu8c_BFu0s) C1{ Fs Fc:8 Fs:0}



static void Test_Us_BFu8c_BFu0s()
{
  {
    init_simple_test("Us_BFu8c_BFu0s");
    static Us_BFu8c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu8c_BFu0s(Test_Us_BFu8c_BFu0s, "Us_BFu8c_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8i_BFu0c  {
  unsigned short v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Us_BFu8i_BFu0c) C1{ Fs Fi:8 Fc:0}



static void Test_Us_BFu8i_BFu0c()
{
  {
    init_simple_test("Us_BFu8i_BFu0c");
    static Us_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu8i_BFu0c(Test_Us_BFu8i_BFu0c, "Us_BFu8i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8i_BFu0i  {
  unsigned short v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Us_BFu8i_BFu0i) C1{ Fs Fi:8 Fi:0}



static void Test_Us_BFu8i_BFu0i()
{
  {
    init_simple_test("Us_BFu8i_BFu0i");
    static Us_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu8i_BFu0i(Test_Us_BFu8i_BFu0i, "Us_BFu8i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Us_BFu8i_BFu0ll) C1{ Fs Fi:8 FL:0}



static void Test_Us_BFu8i_BFu0ll()
{
  {
    init_simple_test("Us_BFu8i_BFu0ll");
    static Us_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu8i_BFu0ll(Test_Us_BFu8i_BFu0ll, "Us_BFu8i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8i_BFu0s  {
  unsigned short v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Us_BFu8i_BFu0s) C1{ Fs Fi:8 Fs:0}



static void Test_Us_BFu8i_BFu0s()
{
  {
    init_simple_test("Us_BFu8i_BFu0s");
    static Us_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu8i_BFu0s(Test_Us_BFu8i_BFu0s, "Us_BFu8i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Us_BFu8ll_BFu0c) C1{ Fs FL:8 Fc:0}



static void Test_Us_BFu8ll_BFu0c()
{
  {
    init_simple_test("Us_BFu8ll_BFu0c");
    static Us_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu8ll_BFu0c(Test_Us_BFu8ll_BFu0c, "Us_BFu8ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Us_BFu8ll_BFu0i) C1{ Fs FL:8 Fi:0}



static void Test_Us_BFu8ll_BFu0i()
{
  {
    init_simple_test("Us_BFu8ll_BFu0i");
    static Us_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu8ll_BFu0i(Test_Us_BFu8ll_BFu0i, "Us_BFu8ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Us_BFu8ll_BFu0ll) C1{ Fs FL:8 FL:0}



static void Test_Us_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu8ll_BFu0ll");
    static Us_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu8ll_BFu0ll(Test_Us_BFu8ll_BFu0ll, "Us_BFu8ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Us_BFu8ll_BFu0s) C1{ Fs FL:8 Fs:0}



static void Test_Us_BFu8ll_BFu0s()
{
  {
    init_simple_test("Us_BFu8ll_BFu0s");
    static Us_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu8ll_BFu0s(Test_Us_BFu8ll_BFu0s, "Us_BFu8ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8s_BFu0c  {
  unsigned short v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Us_BFu8s_BFu0c) C1{ Fs Fs:8 Fc:0}



static void Test_Us_BFu8s_BFu0c()
{
  {
    init_simple_test("Us_BFu8s_BFu0c");
    static Us_BFu8s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu8s_BFu0c(Test_Us_BFu8s_BFu0c, "Us_BFu8s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8s_BFu0i  {
  unsigned short v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Us_BFu8s_BFu0i) C1{ Fs Fs:8 Fi:0}



static void Test_Us_BFu8s_BFu0i()
{
  {
    init_simple_test("Us_BFu8s_BFu0i");
    static Us_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu8s_BFu0i(Test_Us_BFu8s_BFu0i, "Us_BFu8s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Us_BFu8s_BFu0ll) C1{ Fs Fs:8 FL:0}



static void Test_Us_BFu8s_BFu0ll()
{
  {
    init_simple_test("Us_BFu8s_BFu0ll");
    static Us_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu8s_BFu0ll(Test_Us_BFu8s_BFu0ll, "Us_BFu8s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu8s_BFu0s  {
  unsigned short v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Us_BFu8s_BFu0s) C1{ Fs Fs:8 Fs:0}



static void Test_Us_BFu8s_BFu0s()
{
  {
    init_simple_test("Us_BFu8s_BFu0s");
    static Us_BFu8s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu8s_BFu0s(Test_Us_BFu8s_BFu0s, "Us_BFu8s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9i_BFu0c  {
  unsigned short v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Us_BFu9i_BFu0c) C1{ Fs Fi:9 Fc:0}



static void Test_Us_BFu9i_BFu0c()
{
  {
    init_simple_test("Us_BFu9i_BFu0c");
    static Us_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu9i_BFu0c(Test_Us_BFu9i_BFu0c, "Us_BFu9i_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9i_BFu0i  {
  unsigned short v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Us_BFu9i_BFu0i) C1{ Fs Fi:9 Fi:0}



static void Test_Us_BFu9i_BFu0i()
{
  {
    init_simple_test("Us_BFu9i_BFu0i");
    static Us_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu9i_BFu0i(Test_Us_BFu9i_BFu0i, "Us_BFu9i_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Us_BFu9i_BFu0ll) C1{ Fs Fi:9 FL:0}



static void Test_Us_BFu9i_BFu0ll()
{
  {
    init_simple_test("Us_BFu9i_BFu0ll");
    static Us_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu9i_BFu0ll(Test_Us_BFu9i_BFu0ll, "Us_BFu9i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9i_BFu0s  {
  unsigned short v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Us_BFu9i_BFu0s) C1{ Fs Fi:9 Fs:0}



static void Test_Us_BFu9i_BFu0s()
{
  {
    init_simple_test("Us_BFu9i_BFu0s");
    static Us_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu9i_BFu0s(Test_Us_BFu9i_BFu0s, "Us_BFu9i_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Us_BFu9ll_BFu0c) C1{ Fs FL:9 Fc:0}



static void Test_Us_BFu9ll_BFu0c()
{
  {
    init_simple_test("Us_BFu9ll_BFu0c");
    static Us_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu9ll_BFu0c(Test_Us_BFu9ll_BFu0c, "Us_BFu9ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Us_BFu9ll_BFu0i) C1{ Fs FL:9 Fi:0}



static void Test_Us_BFu9ll_BFu0i()
{
  {
    init_simple_test("Us_BFu9ll_BFu0i");
    static Us_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu9ll_BFu0i(Test_Us_BFu9ll_BFu0i, "Us_BFu9ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Us_BFu9ll_BFu0ll) C1{ Fs FL:9 FL:0}



static void Test_Us_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu9ll_BFu0ll");
    static Us_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu9ll_BFu0ll(Test_Us_BFu9ll_BFu0ll, "Us_BFu9ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Us_BFu9ll_BFu0s) C1{ Fs FL:9 Fs:0}



static void Test_Us_BFu9ll_BFu0s()
{
  {
    init_simple_test("Us_BFu9ll_BFu0s");
    static Us_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu9ll_BFu0s(Test_Us_BFu9ll_BFu0s, "Us_BFu9ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9s_BFu0c  {
  unsigned short v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Us_BFu9s_BFu0c) C1{ Fs Fs:9 Fc:0}



static void Test_Us_BFu9s_BFu0c()
{
  {
    init_simple_test("Us_BFu9s_BFu0c");
    static Us_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vUs_BFu9s_BFu0c(Test_Us_BFu9s_BFu0c, "Us_BFu9s_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9s_BFu0i  {
  unsigned short v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Us_BFu9s_BFu0i) C1{ Fs Fs:9 Fi:0}



static void Test_Us_BFu9s_BFu0i()
{
  {
    init_simple_test("Us_BFu9s_BFu0i");
    static Us_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vUs_BFu9s_BFu0i(Test_Us_BFu9s_BFu0i, "Us_BFu9s_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Us_BFu9s_BFu0ll) C1{ Fs Fs:9 FL:0}



static void Test_Us_BFu9s_BFu0ll()
{
  {
    init_simple_test("Us_BFu9s_BFu0ll");
    static Us_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vUs_BFu9s_BFu0ll(Test_Us_BFu9s_BFu0ll, "Us_BFu9s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_BFu9s_BFu0s  {
  unsigned short v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Us_BFu9s_BFu0s) C1{ Fs Fs:9 Fs:0}



static void Test_Us_BFu9s_BFu0s()
{
  {
    init_simple_test("Us_BFu9s_BFu0s");
    static Us_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vUs_BFu9s_BFu0s(Test_Us_BFu9s_BFu0s, "Us_BFu9s_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_C_BFu0c  {
  unsigned short v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Us_C_BFu0c) C1{ Fs Fc Fc:0}



static void Test_Us_C_BFu0c()
{
  {
    init_simple_test("Us_C_BFu0c");
    static Us_C_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_C_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_C_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Us_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_C_BFu0c(Test_Us_C_BFu0c, "Us_C_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_C_BFu0i  {
  unsigned short v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Us_C_BFu0i) C1{ Fs Fc Fi:0}



static void Test_Us_C_BFu0i()
{
  {
    init_simple_test("Us_C_BFu0i");
    static Us_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_C_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Us_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_C_BFu0i(Test_Us_C_BFu0i, "Us_C_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_C_BFu0ll  {
  unsigned short v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Us_C_BFu0ll) C1{ Fs Fc FL:0}



static void Test_Us_C_BFu0ll()
{
  {
    init_simple_test("Us_C_BFu0ll");
    static Us_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_C_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Us_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_C_BFu0ll(Test_Us_C_BFu0ll, "Us_C_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_C_BFu0s  {
  unsigned short v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Us_C_BFu0s) C1{ Fs Fc Fs:0}



static void Test_Us_C_BFu0s()
{
  {
    init_simple_test("Us_C_BFu0s");
    static Us_C_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_C_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_C_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Us_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_C_BFu0s(Test_Us_C_BFu0s, "Us_C_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_D_BFu0c  {
  unsigned short v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Us_D_BFu0c) C1{ Fs FL Fc:0}



static void Test_Us_D_BFu0c()
{
  {
    init_simple_test("Us_D_BFu0c");
    static Us_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_D_BFu0c(Test_Us_D_BFu0c, "Us_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_D_BFu0i  {
  unsigned short v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Us_D_BFu0i) C1{ Fs FL Fi:0}



static void Test_Us_D_BFu0i()
{
  {
    init_simple_test("Us_D_BFu0i");
    static Us_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_D_BFu0i(Test_Us_D_BFu0i, "Us_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_D_BFu0ll  {
  unsigned short v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Us_D_BFu0ll) C1{ Fs FL FL:0}



static void Test_Us_D_BFu0ll()
{
  {
    init_simple_test("Us_D_BFu0ll");
    static Us_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_D_BFu0ll(Test_Us_D_BFu0ll, "Us_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_D_BFu0s  {
  unsigned short v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Us_D_BFu0s) C1{ Fs FL Fs:0}



static void Test_Us_D_BFu0s()
{
  {
    init_simple_test("Us_D_BFu0s");
    static Us_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_D_BFu0s(Test_Us_D_BFu0s, "Us_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_F_BFu0c  {
  unsigned short v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Us_F_BFu0c) C1{ Fs Fi Fc:0}



static void Test_Us_F_BFu0c()
{
  {
    init_simple_test("Us_F_BFu0c");
    static Us_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Us_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_F_BFu0c(Test_Us_F_BFu0c, "Us_F_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_F_BFu0i  {
  unsigned short v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Us_F_BFu0i) C1{ Fs Fi Fi:0}



static void Test_Us_F_BFu0i()
{
  {
    init_simple_test("Us_F_BFu0i");
    static Us_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Us_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_F_BFu0i(Test_Us_F_BFu0i, "Us_F_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_F_BFu0ll  {
  unsigned short v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Us_F_BFu0ll) C1{ Fs Fi FL:0}



static void Test_Us_F_BFu0ll()
{
  {
    init_simple_test("Us_F_BFu0ll");
    static Us_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Us_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_F_BFu0ll(Test_Us_F_BFu0ll, "Us_F_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_F_BFu0s  {
  unsigned short v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Us_F_BFu0s) C1{ Fs Fi Fs:0}



static void Test_Us_F_BFu0s()
{
  {
    init_simple_test("Us_F_BFu0s");
    static Us_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Us_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_F_BFu0s(Test_Us_F_BFu0s, "Us_F_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_I_BFu0c  {
  unsigned short v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Us_I_BFu0c) C1{ Fs Fi Fc:0}



static void Test_Us_I_BFu0c()
{
  {
    init_simple_test("Us_I_BFu0c");
    static Us_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Us_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_I_BFu0c(Test_Us_I_BFu0c, "Us_I_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_I_BFu0i  {
  unsigned short v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Us_I_BFu0i) C1{ Fs Fi Fi:0}



static void Test_Us_I_BFu0i()
{
  {
    init_simple_test("Us_I_BFu0i");
    static Us_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Us_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_I_BFu0i(Test_Us_I_BFu0i, "Us_I_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_I_BFu0ll  {
  unsigned short v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Us_I_BFu0ll) C1{ Fs Fi FL:0}



static void Test_Us_I_BFu0ll()
{
  {
    init_simple_test("Us_I_BFu0ll");
    static Us_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Us_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_I_BFu0ll(Test_Us_I_BFu0ll, "Us_I_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_I_BFu0s  {
  unsigned short v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Us_I_BFu0s) C1{ Fs Fi Fs:0}



static void Test_Us_I_BFu0s()
{
  {
    init_simple_test("Us_I_BFu0s");
    static Us_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Us_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_I_BFu0s(Test_Us_I_BFu0s, "Us_I_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ip_BFu0c  {
  unsigned short v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Us_Ip_BFu0c) C1{ Fs Fp Fc:0}



static void Test_Us_Ip_BFu0c()
{
  {
    init_simple_test("Us_Ip_BFu0c");
    static Us_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_Ip_BFu0c(Test_Us_Ip_BFu0c, "Us_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ip_BFu0i  {
  unsigned short v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Us_Ip_BFu0i) C1{ Fs Fp Fi:0}



static void Test_Us_Ip_BFu0i()
{
  {
    init_simple_test("Us_Ip_BFu0i");
    static Us_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_Ip_BFu0i(Test_Us_Ip_BFu0i, "Us_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ip_BFu0ll  {
  unsigned short v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Us_Ip_BFu0ll) C1{ Fs Fp FL:0}



static void Test_Us_Ip_BFu0ll()
{
  {
    init_simple_test("Us_Ip_BFu0ll");
    static Us_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_Ip_BFu0ll(Test_Us_Ip_BFu0ll, "Us_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ip_BFu0s  {
  unsigned short v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Us_Ip_BFu0s) C1{ Fs Fp Fs:0}



static void Test_Us_Ip_BFu0s()
{
  {
    init_simple_test("Us_Ip_BFu0s");
    static Us_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_Ip_BFu0s(Test_Us_Ip_BFu0s, "Us_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_L_BFu0c  {
  unsigned short v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Us_L_BFu0c) C1{ Fs FL Fc:0}



static void Test_Us_L_BFu0c()
{
  {
    init_simple_test("Us_L_BFu0c");
    static Us_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_L_BFu0c(Test_Us_L_BFu0c, "Us_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_L_BFu0i  {
  unsigned short v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Us_L_BFu0i) C1{ Fs FL Fi:0}



static void Test_Us_L_BFu0i()
{
  {
    init_simple_test("Us_L_BFu0i");
    static Us_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_L_BFu0i(Test_Us_L_BFu0i, "Us_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_L_BFu0ll  {
  unsigned short v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Us_L_BFu0ll) C1{ Fs FL FL:0}



static void Test_Us_L_BFu0ll()
{
  {
    init_simple_test("Us_L_BFu0ll");
    static Us_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_L_BFu0ll(Test_Us_L_BFu0ll, "Us_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_L_BFu0s  {
  unsigned short v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Us_L_BFu0s) C1{ Fs FL Fs:0}



static void Test_Us_L_BFu0s()
{
  {
    init_simple_test("Us_L_BFu0s");
    static Us_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_L_BFu0s(Test_Us_L_BFu0s, "Us_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_S_BFu0c  {
  unsigned short v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Us_S_BFu0c) C1{ Fs[2] Fc:0}



static void Test_Us_S_BFu0c()
{
  {
    init_simple_test("Us_S_BFu0c");
    static Us_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_S_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Us_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_S_BFu0c(Test_Us_S_BFu0c, "Us_S_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_S_BFu0i  {
  unsigned short v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Us_S_BFu0i) C1{ Fs[2] Fi:0}



static void Test_Us_S_BFu0i()
{
  {
    init_simple_test("Us_S_BFu0i");
    static Us_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_S_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Us_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_S_BFu0i(Test_Us_S_BFu0i, "Us_S_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_S_BFu0ll  {
  unsigned short v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Us_S_BFu0ll) C1{ Fs[2] FL:0}



static void Test_Us_S_BFu0ll()
{
  {
    init_simple_test("Us_S_BFu0ll");
    static Us_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_S_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Us_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_S_BFu0ll(Test_Us_S_BFu0ll, "Us_S_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_S_BFu0s  {
  unsigned short v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Us_S_BFu0s) C1{ Fs[2] Fs:0}



static void Test_Us_S_BFu0s()
{
  {
    init_simple_test("Us_S_BFu0s");
    static Us_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_S_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Us_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_S_BFu0s(Test_Us_S_BFu0s, "Us_S_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Uc_BFu0c  {
  unsigned short v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Us_Uc_BFu0c) C1{ Fs Fc Fc:0}



static void Test_Us_Uc_BFu0c()
{
  {
    init_simple_test("Us_Uc_BFu0c");
    static Us_Uc_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_Uc_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Us_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_Uc_BFu0c(Test_Us_Uc_BFu0c, "Us_Uc_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Uc_BFu0i  {
  unsigned short v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Us_Uc_BFu0i) C1{ Fs Fc Fi:0}



static void Test_Us_Uc_BFu0i()
{
  {
    init_simple_test("Us_Uc_BFu0i");
    static Us_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Us_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_Uc_BFu0i(Test_Us_Uc_BFu0i, "Us_Uc_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Uc_BFu0ll  {
  unsigned short v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Us_Uc_BFu0ll) C1{ Fs Fc FL:0}



static void Test_Us_Uc_BFu0ll()
{
  {
    init_simple_test("Us_Uc_BFu0ll");
    static Us_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Us_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_Uc_BFu0ll(Test_Us_Uc_BFu0ll, "Us_Uc_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Uc_BFu0s  {
  unsigned short v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Us_Uc_BFu0s) C1{ Fs Fc Fs:0}



static void Test_Us_Uc_BFu0s()
{
  {
    init_simple_test("Us_Uc_BFu0s");
    static Us_Uc_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Uc_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Us_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_Uc_BFu0s(Test_Us_Uc_BFu0s, "Us_Uc_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ui_BFu0c  {
  unsigned short v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Us_Ui_BFu0c) C1{ Fs Fi Fc:0}



static void Test_Us_Ui_BFu0c()
{
  {
    init_simple_test("Us_Ui_BFu0c");
    static Us_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Us_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_Ui_BFu0c(Test_Us_Ui_BFu0c, "Us_Ui_BFu0c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ui_BFu0i  {
  unsigned short v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Us_Ui_BFu0i) C1{ Fs Fi Fi:0}



static void Test_Us_Ui_BFu0i()
{
  {
    init_simple_test("Us_Ui_BFu0i");
    static Us_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Us_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_Ui_BFu0i(Test_Us_Ui_BFu0i, "Us_Ui_BFu0i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ui_BFu0ll  {
  unsigned short v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Us_Ui_BFu0ll) C1{ Fs Fi FL:0}



static void Test_Us_Ui_BFu0ll()
{
  {
    init_simple_test("Us_Ui_BFu0ll");
    static Us_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Us_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_Ui_BFu0ll(Test_Us_Ui_BFu0ll, "Us_Ui_BFu0ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ui_BFu0s  {
  unsigned short v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Us_Ui_BFu0s) C1{ Fs Fi Fs:0}



static void Test_Us_Ui_BFu0s()
{
  {
    init_simple_test("Us_Ui_BFu0s");
    static Us_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Us_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_Ui_BFu0s(Test_Us_Ui_BFu0s, "Us_Ui_BFu0s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ul_BFu0c  {
  unsigned short v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Us_Ul_BFu0c) C1{ Fs FL Fc:0}



static void Test_Us_Ul_BFu0c()
{
  {
    init_simple_test("Us_Ul_BFu0c");
    static Us_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_Ul_BFu0c(Test_Us_Ul_BFu0c, "Us_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ul_BFu0i  {
  unsigned short v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Us_Ul_BFu0i) C1{ Fs FL Fi:0}



static void Test_Us_Ul_BFu0i()
{
  {
    init_simple_test("Us_Ul_BFu0i");
    static Us_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_Ul_BFu0i(Test_Us_Ul_BFu0i, "Us_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ul_BFu0ll  {
  unsigned short v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Us_Ul_BFu0ll) C1{ Fs FL FL:0}



static void Test_Us_Ul_BFu0ll()
{
  {
    init_simple_test("Us_Ul_BFu0ll");
    static Us_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_Ul_BFu0ll(Test_Us_Ul_BFu0ll, "Us_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Ul_BFu0s  {
  unsigned short v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Us_Ul_BFu0s) C1{ Fs FL Fs:0}



static void Test_Us_Ul_BFu0s()
{
  {
    init_simple_test("Us_Ul_BFu0s");
    static Us_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_Ul_BFu0s(Test_Us_Ul_BFu0s, "Us_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Us_BFu0c  {
  unsigned short v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Us_Us_BFu0c) C1{ Fs[2] Fc:0}



static void Test_Us_Us_BFu0c()
{
  {
    init_simple_test("Us_Us_BFu0c");
    static Us_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Us_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Us_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_Us_BFu0c(Test_Us_Us_BFu0c, "Us_Us_BFu0c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Us_BFu0i  {
  unsigned short v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Us_Us_BFu0i) C1{ Fs[2] Fi:0}



static void Test_Us_Us_BFu0i()
{
  {
    init_simple_test("Us_Us_BFu0i");
    static Us_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Us_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Us_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_Us_BFu0i(Test_Us_Us_BFu0i, "Us_Us_BFu0i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Us_BFu0ll  {
  unsigned short v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Us_Us_BFu0ll) C1{ Fs[2] FL:0}



static void Test_Us_Us_BFu0ll()
{
  {
    init_simple_test("Us_Us_BFu0ll");
    static Us_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Us_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_Us_BFu0ll(Test_Us_Us_BFu0ll, "Us_Us_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Us_BFu0s  {
  unsigned short v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Us_Us_BFu0s) C1{ Fs[2] Fs:0}



static void Test_Us_Us_BFu0s()
{
  {
    init_simple_test("Us_Us_BFu0s");
    static Us_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Us_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Us_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_Us_BFu0s(Test_Us_Us_BFu0s, "Us_Us_BFu0s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Vp_BFu0c  {
  unsigned short v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Us_Vp_BFu0c) C1{ Fs Fp Fc:0}



static void Test_Us_Vp_BFu0c()
{
  {
    init_simple_test("Us_Vp_BFu0c");
    static Us_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vUs_Vp_BFu0c(Test_Us_Vp_BFu0c, "Us_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Vp_BFu0i  {
  unsigned short v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Us_Vp_BFu0i) C1{ Fs Fp Fi:0}



static void Test_Us_Vp_BFu0i()
{
  {
    init_simple_test("Us_Vp_BFu0i");
    static Us_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vUs_Vp_BFu0i(Test_Us_Vp_BFu0i, "Us_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Vp_BFu0ll  {
  unsigned short v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Us_Vp_BFu0ll) C1{ Fs Fp FL:0}



static void Test_Us_Vp_BFu0ll()
{
  {
    init_simple_test("Us_Vp_BFu0ll");
    static Us_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vUs_Vp_BFu0ll(Test_Us_Vp_BFu0ll, "Us_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Us_Vp_BFu0s  {
  unsigned short v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Us_Vp_BFu0s) C1{ Fs Fp Fs:0}



static void Test_Us_Vp_BFu0s()
{
  {
    init_simple_test("Us_Vp_BFu0s");
    static Us_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vUs_Vp_BFu0s(Test_Us_Vp_BFu0s, "Us_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c  {
  void *v1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0c) C1{ Fp Fc:0}



static void Test_Vp_BFu0c()
{
  {
    init_simple_test("Vp_BFu0c");
    static Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0c(Test_Vp_BFu0c, "Vp_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu0c  {
  void *v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0c_BFu0c) C1{ Fp Fc:0 Fc:0}



static void Test_Vp_BFu0c_BFu0c()
{
  {
    init_simple_test("Vp_BFu0c_BFu0c");
    static Vp_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu0c(Test_Vp_BFu0c_BFu0c, "Vp_BFu0c_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu0i  {
  void *v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0c_BFu0i) C1{ Fp Fc:0 Fi:0}



static void Test_Vp_BFu0c_BFu0i()
{
  {
    init_simple_test("Vp_BFu0c_BFu0i");
    static Vp_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu0i(Test_Vp_BFu0c_BFu0i, "Vp_BFu0c_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu0ll  {
  void *v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0c_BFu0ll) C1{ Fp Fc:0 FL:0}



static void Test_Vp_BFu0c_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu0ll");
    static Vp_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu0ll(Test_Vp_BFu0c_BFu0ll, "Vp_BFu0c_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu0s  {
  void *v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0c_BFu0s) C1{ Fp Fc:0 Fs:0}



static void Test_Vp_BFu0c_BFu0s()
{
  {
    init_simple_test("Vp_BFu0c_BFu0s");
    static Vp_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu0s(Test_Vp_BFu0c_BFu0s, "Vp_BFu0c_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu15i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Vp_BFu0c_BFu15i) C1{ Fp Fc:0 Fi:15}



static void Test_Vp_BFu0c_BFu15i()
{
  {
    init_simple_test("Vp_BFu0c_BFu15i");
    static Vp_BFu0c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0c_BFu15i");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu15i(Test_Vp_BFu0c_BFu15i, "Vp_BFu0c_BFu15i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu15ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Vp_BFu0c_BFu15ll) C1{ Fp Fc:0 FL:15}



static void Test_Vp_BFu0c_BFu15ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu15ll");
    static Vp_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0c_BFu15ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu15ll(Test_Vp_BFu0c_BFu15ll, "Vp_BFu0c_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu15s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Vp_BFu0c_BFu15s) C1{ Fp Fc:0 Fs:15}



static void Test_Vp_BFu0c_BFu15s()
{
  {
    init_simple_test("Vp_BFu0c_BFu15s");
    static Vp_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0c_BFu15s");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu15s(Test_Vp_BFu0c_BFu15s, "Vp_BFu0c_BFu15s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu16i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Vp_BFu0c_BFu16i) C1{ Fp Fc:0 Fi:16}



static void Test_Vp_BFu0c_BFu16i()
{
  {
    init_simple_test("Vp_BFu0c_BFu16i");
    static Vp_BFu0c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0c_BFu16i");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu16i(Test_Vp_BFu0c_BFu16i, "Vp_BFu0c_BFu16i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu16ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Vp_BFu0c_BFu16ll) C1{ Fp Fc:0 FL:16}



static void Test_Vp_BFu0c_BFu16ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu16ll");
    static Vp_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0c_BFu16ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu16ll(Test_Vp_BFu0c_BFu16ll, "Vp_BFu0c_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu16s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Vp_BFu0c_BFu16s) C1{ Fp Fc:0 Fs:16}



static void Test_Vp_BFu0c_BFu16s()
{
  {
    init_simple_test("Vp_BFu0c_BFu16s");
    static Vp_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0c_BFu16s");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu16s(Test_Vp_BFu0c_BFu16s, "Vp_BFu0c_BFu16s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu17i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Vp_BFu0c_BFu17i) C1{ Fp Fc:0 Fi:17}



static void Test_Vp_BFu0c_BFu17i()
{
  {
    init_simple_test("Vp_BFu0c_BFu17i");
    static Vp_BFu0c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0c_BFu17i");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu17i(Test_Vp_BFu0c_BFu17i, "Vp_BFu0c_BFu17i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu17ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Vp_BFu0c_BFu17ll) C1{ Fp Fc:0 FL:17}



static void Test_Vp_BFu0c_BFu17ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu17ll");
    static Vp_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0c_BFu17ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu17ll(Test_Vp_BFu0c_BFu17ll, "Vp_BFu0c_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu1c  {
  void *v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Vp_BFu0c_BFu1c) C1{ Fp Fc:0 Fc:1}



static void Test_Vp_BFu0c_BFu1c()
{
  {
    init_simple_test("Vp_BFu0c_BFu1c");
    static Vp_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0c_BFu1c");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu1c(Test_Vp_BFu0c_BFu1c, "Vp_BFu0c_BFu1c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu1i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Vp_BFu0c_BFu1i) C1{ Fp Fc:0 Fi:1}



static void Test_Vp_BFu0c_BFu1i()
{
  {
    init_simple_test("Vp_BFu0c_BFu1i");
    static Vp_BFu0c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0c_BFu1i");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu1i(Test_Vp_BFu0c_BFu1i, "Vp_BFu0c_BFu1i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu1ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Vp_BFu0c_BFu1ll) C1{ Fp Fc:0 FL:1}



static void Test_Vp_BFu0c_BFu1ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu1ll");
    static Vp_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0c_BFu1ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu1ll(Test_Vp_BFu0c_BFu1ll, "Vp_BFu0c_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu1s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Vp_BFu0c_BFu1s) C1{ Fp Fc:0 Fs:1}



static void Test_Vp_BFu0c_BFu1s()
{
  {
    init_simple_test("Vp_BFu0c_BFu1s");
    static Vp_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0c_BFu1s");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu1s(Test_Vp_BFu0c_BFu1s, "Vp_BFu0c_BFu1s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu31i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Vp_BFu0c_BFu31i) C1{ Fp Fc:0 Fi:31}



static void Test_Vp_BFu0c_BFu31i()
{
  {
    init_simple_test("Vp_BFu0c_BFu31i");
    static Vp_BFu0c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0c_BFu31i");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu31i(Test_Vp_BFu0c_BFu31i, "Vp_BFu0c_BFu31i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu31ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Vp_BFu0c_BFu31ll) C1{ Fp Fc:0 FL:31}



static void Test_Vp_BFu0c_BFu31ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu31ll");
    static Vp_BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0c_BFu31ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu31ll(Test_Vp_BFu0c_BFu31ll, "Vp_BFu0c_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu32i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Vp_BFu0c_BFu32i) C1{ Fp Fc:0 Fi:32}



static void Test_Vp_BFu0c_BFu32i()
{
  {
    init_simple_test("Vp_BFu0c_BFu32i");
    static Vp_BFu0c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0c_BFu32i");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu32i(Test_Vp_BFu0c_BFu32i, "Vp_BFu0c_BFu32i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu32ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Vp_BFu0c_BFu32ll) C1{ Fp Fc:0 FL:32}



static void Test_Vp_BFu0c_BFu32ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu32ll");
    static Vp_BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0c_BFu32ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu32ll(Test_Vp_BFu0c_BFu32ll, "Vp_BFu0c_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu33  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Vp_BFu0c_BFu33) C1{ Fp Fc:0 FL:33}



static void Test_Vp_BFu0c_BFu33()
{
  {
    init_simple_test("Vp_BFu0c_BFu33");
    static Vp_BFu0c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu0c_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu0c_BFu33");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu33(Test_Vp_BFu0c_BFu33, "Vp_BFu0c_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu7c  {
  void *v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Vp_BFu0c_BFu7c) C1{ Fp Fc:0 Fc:7}



static void Test_Vp_BFu0c_BFu7c()
{
  {
    init_simple_test("Vp_BFu0c_BFu7c");
    static Vp_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0c_BFu7c");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu7c(Test_Vp_BFu0c_BFu7c, "Vp_BFu0c_BFu7c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu7i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Vp_BFu0c_BFu7i) C1{ Fp Fc:0 Fi:7}



static void Test_Vp_BFu0c_BFu7i()
{
  {
    init_simple_test("Vp_BFu0c_BFu7i");
    static Vp_BFu0c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0c_BFu7i");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu7i(Test_Vp_BFu0c_BFu7i, "Vp_BFu0c_BFu7i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu7ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Vp_BFu0c_BFu7ll) C1{ Fp Fc:0 FL:7}



static void Test_Vp_BFu0c_BFu7ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu7ll");
    static Vp_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0c_BFu7ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu7ll(Test_Vp_BFu0c_BFu7ll, "Vp_BFu0c_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu7s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Vp_BFu0c_BFu7s) C1{ Fp Fc:0 Fs:7}



static void Test_Vp_BFu0c_BFu7s()
{
  {
    init_simple_test("Vp_BFu0c_BFu7s");
    static Vp_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0c_BFu7s");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu7s(Test_Vp_BFu0c_BFu7s, "Vp_BFu0c_BFu7s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu8c  {
  void *v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Vp_BFu0c_BFu8c) C1{ Fp Fc:0 Fc:8}



static void Test_Vp_BFu0c_BFu8c()
{
  {
    init_simple_test("Vp_BFu0c_BFu8c");
    static Vp_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0c_BFu8c");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu8c(Test_Vp_BFu0c_BFu8c, "Vp_BFu0c_BFu8c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu8i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Vp_BFu0c_BFu8i) C1{ Fp Fc:0 Fi:8}



static void Test_Vp_BFu0c_BFu8i()
{
  {
    init_simple_test("Vp_BFu0c_BFu8i");
    static Vp_BFu0c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0c_BFu8i");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu8i(Test_Vp_BFu0c_BFu8i, "Vp_BFu0c_BFu8i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu8ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Vp_BFu0c_BFu8ll) C1{ Fp Fc:0 FL:8}



static void Test_Vp_BFu0c_BFu8ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu8ll");
    static Vp_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0c_BFu8ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu8ll(Test_Vp_BFu0c_BFu8ll, "Vp_BFu0c_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu8s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Vp_BFu0c_BFu8s) C1{ Fp Fc:0 Fs:8}



static void Test_Vp_BFu0c_BFu8s()
{
  {
    init_simple_test("Vp_BFu0c_BFu8s");
    static Vp_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0c_BFu8s");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu8s(Test_Vp_BFu0c_BFu8s, "Vp_BFu0c_BFu8s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu9i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Vp_BFu0c_BFu9i) C1{ Fp Fc:0 Fi:9}



static void Test_Vp_BFu0c_BFu9i()
{
  {
    init_simple_test("Vp_BFu0c_BFu9i");
    static Vp_BFu0c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0c_BFu9i");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu9i(Test_Vp_BFu0c_BFu9i, "Vp_BFu0c_BFu9i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu9ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Vp_BFu0c_BFu9ll) C1{ Fp Fc:0 FL:9}



static void Test_Vp_BFu0c_BFu9ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu9ll");
    static Vp_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0c_BFu9ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu9ll(Test_Vp_BFu0c_BFu9ll, "Vp_BFu0c_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_BFu9s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Vp_BFu0c_BFu9s) C1{ Fp Fc:0 Fs:9}



static void Test_Vp_BFu0c_BFu9s()
{
  {
    init_simple_test("Vp_BFu0c_BFu9s");
    static Vp_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0c_BFu9s");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_BFu9s(Test_Vp_BFu0c_BFu9s, "Vp_BFu0c_BFu9s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_C  {
  void *v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Vp_BFu0c_C) C1{ Fp Fc:0 Fc}



static void Test_Vp_BFu0c_C()
{
  {
    init_simple_test("Vp_BFu0c_C");
    static Vp_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_C.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_C(Test_Vp_BFu0c_C, "Vp_BFu0c_C", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_D  {
  void *v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Vp_BFu0c_D) C1{ Fp Fc:0 FL}



static void Test_Vp_BFu0c_D()
{
  {
    init_simple_test("Vp_BFu0c_D");
    static Vp_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_D.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_D(Test_Vp_BFu0c_D, "Vp_BFu0c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_F  {
  void *v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Vp_BFu0c_F) C1{ Fp Fc:0 Fi}



static void Test_Vp_BFu0c_F()
{
  {
    init_simple_test("Vp_BFu0c_F");
    static Vp_BFu0c_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_F.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_F(Test_Vp_BFu0c_F, "Vp_BFu0c_F", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_I  {
  void *v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Vp_BFu0c_I) C1{ Fp Fc:0 Fi}



static void Test_Vp_BFu0c_I()
{
  {
    init_simple_test("Vp_BFu0c_I");
    static Vp_BFu0c_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_I.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_I(Test_Vp_BFu0c_I, "Vp_BFu0c_I", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_Ip  {
  void *v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Vp_BFu0c_Ip) C1{ Fp Fc:0 Fp}



static void Test_Vp_BFu0c_Ip()
{
  {
    init_simple_test("Vp_BFu0c_Ip");
    static Vp_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Ip.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_Ip(Test_Vp_BFu0c_Ip, "Vp_BFu0c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_L  {
  void *v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Vp_BFu0c_L) C1{ Fp Fc:0 FL}



static void Test_Vp_BFu0c_L()
{
  {
    init_simple_test("Vp_BFu0c_L");
    static Vp_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_L.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_L(Test_Vp_BFu0c_L, "Vp_BFu0c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_S  {
  void *v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Vp_BFu0c_S) C1{ Fp Fc:0 Fs}



static void Test_Vp_BFu0c_S()
{
  {
    init_simple_test("Vp_BFu0c_S");
    static Vp_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_S.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_S(Test_Vp_BFu0c_S, "Vp_BFu0c_S", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_Uc  {
  void *v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Vp_BFu0c_Uc) C1{ Fp Fc:0 Fc}



static void Test_Vp_BFu0c_Uc()
{
  {
    init_simple_test("Vp_BFu0c_Uc");
    static Vp_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Uc.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_Uc(Test_Vp_BFu0c_Uc, "Vp_BFu0c_Uc", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_Ui  {
  void *v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Vp_BFu0c_Ui) C1{ Fp Fc:0 Fi}



static void Test_Vp_BFu0c_Ui()
{
  {
    init_simple_test("Vp_BFu0c_Ui");
    static Vp_BFu0c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Ui.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_Ui(Test_Vp_BFu0c_Ui, "Vp_BFu0c_Ui", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_Ul  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Vp_BFu0c_Ul) C1{ Fp Fc:0 FL}



static void Test_Vp_BFu0c_Ul()
{
  {
    init_simple_test("Vp_BFu0c_Ul");
    static Vp_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Ul.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_Ul(Test_Vp_BFu0c_Ul, "Vp_BFu0c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_Us  {
  void *v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Vp_BFu0c_Us) C1{ Fp Fc:0 Fs}



static void Test_Vp_BFu0c_Us()
{
  {
    init_simple_test("Vp_BFu0c_Us");
    static Vp_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Us.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_Us(Test_Vp_BFu0c_Us, "Vp_BFu0c_Us", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0c_Vp  {
  void *v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Vp_BFu0c_Vp) C1{ Fp Fc:0 Fp}



static void Test_Vp_BFu0c_Vp()
{
  {
    init_simple_test("Vp_BFu0c_Vp");
    static Vp_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Vp.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0c_Vp(Test_Vp_BFu0c_Vp, "Vp_BFu0c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i  {
  void *v1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0i) C1{ Fp Fi:0}



static void Test_Vp_BFu0i()
{
  {
    init_simple_test("Vp_BFu0i");
    static Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0i(Test_Vp_BFu0i, "Vp_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu0c  {
  void *v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0i_BFu0c) C1{ Fp Fi:0 Fc:0}



static void Test_Vp_BFu0i_BFu0c()
{
  {
    init_simple_test("Vp_BFu0i_BFu0c");
    static Vp_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu0c(Test_Vp_BFu0i_BFu0c, "Vp_BFu0i_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu0i  {
  void *v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0i_BFu0i) C1{ Fp Fi:0 Fi:0}



static void Test_Vp_BFu0i_BFu0i()
{
  {
    init_simple_test("Vp_BFu0i_BFu0i");
    static Vp_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu0i(Test_Vp_BFu0i_BFu0i, "Vp_BFu0i_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu0ll  {
  void *v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0i_BFu0ll) C1{ Fp Fi:0 FL:0}



static void Test_Vp_BFu0i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu0ll");
    static Vp_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu0ll(Test_Vp_BFu0i_BFu0ll, "Vp_BFu0i_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu0s  {
  void *v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0i_BFu0s) C1{ Fp Fi:0 Fs:0}



static void Test_Vp_BFu0i_BFu0s()
{
  {
    init_simple_test("Vp_BFu0i_BFu0s");
    static Vp_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu0s(Test_Vp_BFu0i_BFu0s, "Vp_BFu0i_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu15i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Vp_BFu0i_BFu15i) C1{ Fp Fi:0 Fi:15}



static void Test_Vp_BFu0i_BFu15i()
{
  {
    init_simple_test("Vp_BFu0i_BFu15i");
    static Vp_BFu0i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0i_BFu15i");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu15i(Test_Vp_BFu0i_BFu15i, "Vp_BFu0i_BFu15i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu15ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Vp_BFu0i_BFu15ll) C1{ Fp Fi:0 FL:15}



static void Test_Vp_BFu0i_BFu15ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu15ll");
    static Vp_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0i_BFu15ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu15ll(Test_Vp_BFu0i_BFu15ll, "Vp_BFu0i_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu15s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Vp_BFu0i_BFu15s) C1{ Fp Fi:0 Fs:15}



static void Test_Vp_BFu0i_BFu15s()
{
  {
    init_simple_test("Vp_BFu0i_BFu15s");
    static Vp_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0i_BFu15s");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu15s(Test_Vp_BFu0i_BFu15s, "Vp_BFu0i_BFu15s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu16i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Vp_BFu0i_BFu16i) C1{ Fp Fi:0 Fi:16}



static void Test_Vp_BFu0i_BFu16i()
{
  {
    init_simple_test("Vp_BFu0i_BFu16i");
    static Vp_BFu0i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0i_BFu16i");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu16i(Test_Vp_BFu0i_BFu16i, "Vp_BFu0i_BFu16i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu16ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Vp_BFu0i_BFu16ll) C1{ Fp Fi:0 FL:16}



static void Test_Vp_BFu0i_BFu16ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu16ll");
    static Vp_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0i_BFu16ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu16ll(Test_Vp_BFu0i_BFu16ll, "Vp_BFu0i_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu16s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Vp_BFu0i_BFu16s) C1{ Fp Fi:0 Fs:16}



static void Test_Vp_BFu0i_BFu16s()
{
  {
    init_simple_test("Vp_BFu0i_BFu16s");
    static Vp_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0i_BFu16s");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu16s(Test_Vp_BFu0i_BFu16s, "Vp_BFu0i_BFu16s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu17i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Vp_BFu0i_BFu17i) C1{ Fp Fi:0 Fi:17}



static void Test_Vp_BFu0i_BFu17i()
{
  {
    init_simple_test("Vp_BFu0i_BFu17i");
    static Vp_BFu0i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0i_BFu17i");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu17i(Test_Vp_BFu0i_BFu17i, "Vp_BFu0i_BFu17i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu17ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Vp_BFu0i_BFu17ll) C1{ Fp Fi:0 FL:17}



static void Test_Vp_BFu0i_BFu17ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu17ll");
    static Vp_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0i_BFu17ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu17ll(Test_Vp_BFu0i_BFu17ll, "Vp_BFu0i_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu1c  {
  void *v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Vp_BFu0i_BFu1c) C1{ Fp Fi:0 Fc:1}



static void Test_Vp_BFu0i_BFu1c()
{
  {
    init_simple_test("Vp_BFu0i_BFu1c");
    static Vp_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0i_BFu1c");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu1c(Test_Vp_BFu0i_BFu1c, "Vp_BFu0i_BFu1c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu1i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Vp_BFu0i_BFu1i) C1{ Fp Fi:0 Fi:1}



static void Test_Vp_BFu0i_BFu1i()
{
  {
    init_simple_test("Vp_BFu0i_BFu1i");
    static Vp_BFu0i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0i_BFu1i");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu1i(Test_Vp_BFu0i_BFu1i, "Vp_BFu0i_BFu1i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu1ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Vp_BFu0i_BFu1ll) C1{ Fp Fi:0 FL:1}



static void Test_Vp_BFu0i_BFu1ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu1ll");
    static Vp_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0i_BFu1ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu1ll(Test_Vp_BFu0i_BFu1ll, "Vp_BFu0i_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu1s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Vp_BFu0i_BFu1s) C1{ Fp Fi:0 Fs:1}



static void Test_Vp_BFu0i_BFu1s()
{
  {
    init_simple_test("Vp_BFu0i_BFu1s");
    static Vp_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0i_BFu1s");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu1s(Test_Vp_BFu0i_BFu1s, "Vp_BFu0i_BFu1s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu31i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Vp_BFu0i_BFu31i) C1{ Fp Fi:0 Fi:31}



static void Test_Vp_BFu0i_BFu31i()
{
  {
    init_simple_test("Vp_BFu0i_BFu31i");
    static Vp_BFu0i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0i_BFu31i");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu31i(Test_Vp_BFu0i_BFu31i, "Vp_BFu0i_BFu31i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu31ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Vp_BFu0i_BFu31ll) C1{ Fp Fi:0 FL:31}



static void Test_Vp_BFu0i_BFu31ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu31ll");
    static Vp_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0i_BFu31ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu31ll(Test_Vp_BFu0i_BFu31ll, "Vp_BFu0i_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu32i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Vp_BFu0i_BFu32i) C1{ Fp Fi:0 Fi:32}



static void Test_Vp_BFu0i_BFu32i()
{
  {
    init_simple_test("Vp_BFu0i_BFu32i");
    static Vp_BFu0i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0i_BFu32i");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu32i(Test_Vp_BFu0i_BFu32i, "Vp_BFu0i_BFu32i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu32ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Vp_BFu0i_BFu32ll) C1{ Fp Fi:0 FL:32}



static void Test_Vp_BFu0i_BFu32ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu32ll");
    static Vp_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0i_BFu32ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu32ll(Test_Vp_BFu0i_BFu32ll, "Vp_BFu0i_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu33  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Vp_BFu0i_BFu33) C1{ Fp Fi:0 FL:33}



static void Test_Vp_BFu0i_BFu33()
{
  {
    init_simple_test("Vp_BFu0i_BFu33");
    static Vp_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu0i_BFu33");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu33(Test_Vp_BFu0i_BFu33, "Vp_BFu0i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu7c  {
  void *v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Vp_BFu0i_BFu7c) C1{ Fp Fi:0 Fc:7}



static void Test_Vp_BFu0i_BFu7c()
{
  {
    init_simple_test("Vp_BFu0i_BFu7c");
    static Vp_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0i_BFu7c");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu7c(Test_Vp_BFu0i_BFu7c, "Vp_BFu0i_BFu7c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu7i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Vp_BFu0i_BFu7i) C1{ Fp Fi:0 Fi:7}



static void Test_Vp_BFu0i_BFu7i()
{
  {
    init_simple_test("Vp_BFu0i_BFu7i");
    static Vp_BFu0i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0i_BFu7i");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu7i(Test_Vp_BFu0i_BFu7i, "Vp_BFu0i_BFu7i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu7ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Vp_BFu0i_BFu7ll) C1{ Fp Fi:0 FL:7}



static void Test_Vp_BFu0i_BFu7ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu7ll");
    static Vp_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0i_BFu7ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu7ll(Test_Vp_BFu0i_BFu7ll, "Vp_BFu0i_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu7s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Vp_BFu0i_BFu7s) C1{ Fp Fi:0 Fs:7}



static void Test_Vp_BFu0i_BFu7s()
{
  {
    init_simple_test("Vp_BFu0i_BFu7s");
    static Vp_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0i_BFu7s");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu7s(Test_Vp_BFu0i_BFu7s, "Vp_BFu0i_BFu7s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu8c  {
  void *v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Vp_BFu0i_BFu8c) C1{ Fp Fi:0 Fc:8}



static void Test_Vp_BFu0i_BFu8c()
{
  {
    init_simple_test("Vp_BFu0i_BFu8c");
    static Vp_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0i_BFu8c");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu8c(Test_Vp_BFu0i_BFu8c, "Vp_BFu0i_BFu8c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu8i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Vp_BFu0i_BFu8i) C1{ Fp Fi:0 Fi:8}



static void Test_Vp_BFu0i_BFu8i()
{
  {
    init_simple_test("Vp_BFu0i_BFu8i");
    static Vp_BFu0i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0i_BFu8i");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu8i(Test_Vp_BFu0i_BFu8i, "Vp_BFu0i_BFu8i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu8ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Vp_BFu0i_BFu8ll) C1{ Fp Fi:0 FL:8}



static void Test_Vp_BFu0i_BFu8ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu8ll");
    static Vp_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0i_BFu8ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu8ll(Test_Vp_BFu0i_BFu8ll, "Vp_BFu0i_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu8s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Vp_BFu0i_BFu8s) C1{ Fp Fi:0 Fs:8}



static void Test_Vp_BFu0i_BFu8s()
{
  {
    init_simple_test("Vp_BFu0i_BFu8s");
    static Vp_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0i_BFu8s");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu8s(Test_Vp_BFu0i_BFu8s, "Vp_BFu0i_BFu8s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu9i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Vp_BFu0i_BFu9i) C1{ Fp Fi:0 Fi:9}



static void Test_Vp_BFu0i_BFu9i()
{
  {
    init_simple_test("Vp_BFu0i_BFu9i");
    static Vp_BFu0i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0i_BFu9i");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu9i(Test_Vp_BFu0i_BFu9i, "Vp_BFu0i_BFu9i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu9ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Vp_BFu0i_BFu9ll) C1{ Fp Fi:0 FL:9}



static void Test_Vp_BFu0i_BFu9ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu9ll");
    static Vp_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0i_BFu9ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu9ll(Test_Vp_BFu0i_BFu9ll, "Vp_BFu0i_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_BFu9s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Vp_BFu0i_BFu9s) C1{ Fp Fi:0 Fs:9}



static void Test_Vp_BFu0i_BFu9s()
{
  {
    init_simple_test("Vp_BFu0i_BFu9s");
    static Vp_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0i_BFu9s");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_BFu9s(Test_Vp_BFu0i_BFu9s, "Vp_BFu0i_BFu9s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_C  {
  void *v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Vp_BFu0i_C) C1{ Fp Fi:0 Fc}



static void Test_Vp_BFu0i_C()
{
  {
    init_simple_test("Vp_BFu0i_C");
    static Vp_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_C.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_C(Test_Vp_BFu0i_C, "Vp_BFu0i_C", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_D  {
  void *v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Vp_BFu0i_D) C1{ Fp Fi:0 FL}



static void Test_Vp_BFu0i_D()
{
  {
    init_simple_test("Vp_BFu0i_D");
    static Vp_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_D.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_D(Test_Vp_BFu0i_D, "Vp_BFu0i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_F  {
  void *v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Vp_BFu0i_F) C1{ Fp Fi:0 Fi}



static void Test_Vp_BFu0i_F()
{
  {
    init_simple_test("Vp_BFu0i_F");
    static Vp_BFu0i_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_F.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_F(Test_Vp_BFu0i_F, "Vp_BFu0i_F", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_I  {
  void *v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Vp_BFu0i_I) C1{ Fp Fi:0 Fi}



static void Test_Vp_BFu0i_I()
{
  {
    init_simple_test("Vp_BFu0i_I");
    static Vp_BFu0i_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_I.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_I(Test_Vp_BFu0i_I, "Vp_BFu0i_I", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_Ip  {
  void *v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Vp_BFu0i_Ip) C1{ Fp Fi:0 Fp}



static void Test_Vp_BFu0i_Ip()
{
  {
    init_simple_test("Vp_BFu0i_Ip");
    static Vp_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Ip.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_Ip(Test_Vp_BFu0i_Ip, "Vp_BFu0i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_L  {
  void *v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Vp_BFu0i_L) C1{ Fp Fi:0 FL}



static void Test_Vp_BFu0i_L()
{
  {
    init_simple_test("Vp_BFu0i_L");
    static Vp_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_L.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_L(Test_Vp_BFu0i_L, "Vp_BFu0i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_S  {
  void *v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Vp_BFu0i_S) C1{ Fp Fi:0 Fs}



static void Test_Vp_BFu0i_S()
{
  {
    init_simple_test("Vp_BFu0i_S");
    static Vp_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_S.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_S(Test_Vp_BFu0i_S, "Vp_BFu0i_S", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_Uc  {
  void *v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Vp_BFu0i_Uc) C1{ Fp Fi:0 Fc}



static void Test_Vp_BFu0i_Uc()
{
  {
    init_simple_test("Vp_BFu0i_Uc");
    static Vp_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Uc.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_Uc(Test_Vp_BFu0i_Uc, "Vp_BFu0i_Uc", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_Ui  {
  void *v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Vp_BFu0i_Ui) C1{ Fp Fi:0 Fi}



static void Test_Vp_BFu0i_Ui()
{
  {
    init_simple_test("Vp_BFu0i_Ui");
    static Vp_BFu0i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Ui.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_Ui(Test_Vp_BFu0i_Ui, "Vp_BFu0i_Ui", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_Ul  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Vp_BFu0i_Ul) C1{ Fp Fi:0 FL}



static void Test_Vp_BFu0i_Ul()
{
  {
    init_simple_test("Vp_BFu0i_Ul");
    static Vp_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Ul.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_Ul(Test_Vp_BFu0i_Ul, "Vp_BFu0i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_Us  {
  void *v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Vp_BFu0i_Us) C1{ Fp Fi:0 Fs}



static void Test_Vp_BFu0i_Us()
{
  {
    init_simple_test("Vp_BFu0i_Us");
    static Vp_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Us.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_Us(Test_Vp_BFu0i_Us, "Vp_BFu0i_Us", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0i_Vp  {
  void *v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Vp_BFu0i_Vp) C1{ Fp Fi:0 Fp}



static void Test_Vp_BFu0i_Vp()
{
  {
    init_simple_test("Vp_BFu0i_Vp");
    static Vp_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Vp.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0i_Vp(Test_Vp_BFu0i_Vp, "Vp_BFu0i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll  {
  void *v1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0ll) C1{ Fp FL:0}



static void Test_Vp_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0ll");
    static Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll(Test_Vp_BFu0ll, "Vp_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu0c  {
  void *v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0ll_BFu0c) C1{ Fp FL:0 Fc:0}



static void Test_Vp_BFu0ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu0ll_BFu0c");
    static Vp_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu0c(Test_Vp_BFu0ll_BFu0c, "Vp_BFu0ll_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu0i  {
  void *v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0ll_BFu0i) C1{ Fp FL:0 Fi:0}



static void Test_Vp_BFu0ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu0i");
    static Vp_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu0i(Test_Vp_BFu0ll_BFu0i, "Vp_BFu0ll_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu0ll  {
  void *v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0ll_BFu0ll) C1{ Fp FL:0 FL:0}



static void Test_Vp_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu0ll");
    static Vp_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu0ll(Test_Vp_BFu0ll_BFu0ll, "Vp_BFu0ll_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu0s  {
  void *v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0ll_BFu0s) C1{ Fp FL:0 Fs:0}



static void Test_Vp_BFu0ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu0s");
    static Vp_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu0s(Test_Vp_BFu0ll_BFu0s, "Vp_BFu0ll_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu15i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Vp_BFu0ll_BFu15i) C1{ Fp FL:0 Fi:15}



static void Test_Vp_BFu0ll_BFu15i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu15i");
    static Vp_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0ll_BFu15i");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu15i(Test_Vp_BFu0ll_BFu15i, "Vp_BFu0ll_BFu15i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu15ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Vp_BFu0ll_BFu15ll) C1{ Fp FL:0 FL:15}



static void Test_Vp_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu15ll");
    static Vp_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu15ll(Test_Vp_BFu0ll_BFu15ll, "Vp_BFu0ll_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu15s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Vp_BFu0ll_BFu15s) C1{ Fp FL:0 Fs:15}



static void Test_Vp_BFu0ll_BFu15s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu15s");
    static Vp_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0ll_BFu15s");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu15s(Test_Vp_BFu0ll_BFu15s, "Vp_BFu0ll_BFu15s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu16i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Vp_BFu0ll_BFu16i) C1{ Fp FL:0 Fi:16}



static void Test_Vp_BFu0ll_BFu16i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu16i");
    static Vp_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0ll_BFu16i");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu16i(Test_Vp_BFu0ll_BFu16i, "Vp_BFu0ll_BFu16i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu16ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Vp_BFu0ll_BFu16ll) C1{ Fp FL:0 FL:16}



static void Test_Vp_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu16ll");
    static Vp_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu16ll(Test_Vp_BFu0ll_BFu16ll, "Vp_BFu0ll_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu16s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Vp_BFu0ll_BFu16s) C1{ Fp FL:0 Fs:16}



static void Test_Vp_BFu0ll_BFu16s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu16s");
    static Vp_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0ll_BFu16s");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu16s(Test_Vp_BFu0ll_BFu16s, "Vp_BFu0ll_BFu16s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu17i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Vp_BFu0ll_BFu17i) C1{ Fp FL:0 Fi:17}



static void Test_Vp_BFu0ll_BFu17i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu17i");
    static Vp_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0ll_BFu17i");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu17i(Test_Vp_BFu0ll_BFu17i, "Vp_BFu0ll_BFu17i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu17ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Vp_BFu0ll_BFu17ll) C1{ Fp FL:0 FL:17}



static void Test_Vp_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu17ll");
    static Vp_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu17ll(Test_Vp_BFu0ll_BFu17ll, "Vp_BFu0ll_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu1c  {
  void *v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Vp_BFu0ll_BFu1c) C1{ Fp FL:0 Fc:1}



static void Test_Vp_BFu0ll_BFu1c()
{
  {
    init_simple_test("Vp_BFu0ll_BFu1c");
    static Vp_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0ll_BFu1c");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu1c(Test_Vp_BFu0ll_BFu1c, "Vp_BFu0ll_BFu1c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu1i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Vp_BFu0ll_BFu1i) C1{ Fp FL:0 Fi:1}



static void Test_Vp_BFu0ll_BFu1i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu1i");
    static Vp_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0ll_BFu1i");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu1i(Test_Vp_BFu0ll_BFu1i, "Vp_BFu0ll_BFu1i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu1ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Vp_BFu0ll_BFu1ll) C1{ Fp FL:0 FL:1}



static void Test_Vp_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu1ll");
    static Vp_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu1ll(Test_Vp_BFu0ll_BFu1ll, "Vp_BFu0ll_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu1s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Vp_BFu0ll_BFu1s) C1{ Fp FL:0 Fs:1}



static void Test_Vp_BFu0ll_BFu1s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu1s");
    static Vp_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0ll_BFu1s");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu1s(Test_Vp_BFu0ll_BFu1s, "Vp_BFu0ll_BFu1s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu31i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Vp_BFu0ll_BFu31i) C1{ Fp FL:0 Fi:31}



static void Test_Vp_BFu0ll_BFu31i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu31i");
    static Vp_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0ll_BFu31i");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu31i(Test_Vp_BFu0ll_BFu31i, "Vp_BFu0ll_BFu31i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu31ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Vp_BFu0ll_BFu31ll) C1{ Fp FL:0 FL:31}



static void Test_Vp_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu31ll");
    static Vp_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu31ll(Test_Vp_BFu0ll_BFu31ll, "Vp_BFu0ll_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu32i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Vp_BFu0ll_BFu32i) C1{ Fp FL:0 Fi:32}



static void Test_Vp_BFu0ll_BFu32i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu32i");
    static Vp_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0ll_BFu32i");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu32i(Test_Vp_BFu0ll_BFu32i, "Vp_BFu0ll_BFu32i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu32ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Vp_BFu0ll_BFu32ll) C1{ Fp FL:0 FL:32}



static void Test_Vp_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu32ll");
    static Vp_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu32ll(Test_Vp_BFu0ll_BFu32ll, "Vp_BFu0ll_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu33  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Vp_BFu0ll_BFu33) C1{ Fp FL:0 FL:33}



static void Test_Vp_BFu0ll_BFu33()
{
  {
    init_simple_test("Vp_BFu0ll_BFu33");
    static Vp_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu0ll_BFu33");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu33(Test_Vp_BFu0ll_BFu33, "Vp_BFu0ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu7c  {
  void *v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Vp_BFu0ll_BFu7c) C1{ Fp FL:0 Fc:7}



static void Test_Vp_BFu0ll_BFu7c()
{
  {
    init_simple_test("Vp_BFu0ll_BFu7c");
    static Vp_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0ll_BFu7c");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu7c(Test_Vp_BFu0ll_BFu7c, "Vp_BFu0ll_BFu7c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu7i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Vp_BFu0ll_BFu7i) C1{ Fp FL:0 Fi:7}



static void Test_Vp_BFu0ll_BFu7i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu7i");
    static Vp_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0ll_BFu7i");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu7i(Test_Vp_BFu0ll_BFu7i, "Vp_BFu0ll_BFu7i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu7ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Vp_BFu0ll_BFu7ll) C1{ Fp FL:0 FL:7}



static void Test_Vp_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu7ll");
    static Vp_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu7ll(Test_Vp_BFu0ll_BFu7ll, "Vp_BFu0ll_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu7s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Vp_BFu0ll_BFu7s) C1{ Fp FL:0 Fs:7}



static void Test_Vp_BFu0ll_BFu7s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu7s");
    static Vp_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0ll_BFu7s");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu7s(Test_Vp_BFu0ll_BFu7s, "Vp_BFu0ll_BFu7s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu8c  {
  void *v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Vp_BFu0ll_BFu8c) C1{ Fp FL:0 Fc:8}



static void Test_Vp_BFu0ll_BFu8c()
{
  {
    init_simple_test("Vp_BFu0ll_BFu8c");
    static Vp_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0ll_BFu8c");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu8c(Test_Vp_BFu0ll_BFu8c, "Vp_BFu0ll_BFu8c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu8i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Vp_BFu0ll_BFu8i) C1{ Fp FL:0 Fi:8}



static void Test_Vp_BFu0ll_BFu8i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu8i");
    static Vp_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0ll_BFu8i");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu8i(Test_Vp_BFu0ll_BFu8i, "Vp_BFu0ll_BFu8i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu8ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Vp_BFu0ll_BFu8ll) C1{ Fp FL:0 FL:8}



static void Test_Vp_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu8ll");
    static Vp_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu8ll(Test_Vp_BFu0ll_BFu8ll, "Vp_BFu0ll_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu8s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Vp_BFu0ll_BFu8s) C1{ Fp FL:0 Fs:8}



static void Test_Vp_BFu0ll_BFu8s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu8s");
    static Vp_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0ll_BFu8s");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu8s(Test_Vp_BFu0ll_BFu8s, "Vp_BFu0ll_BFu8s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu9i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Vp_BFu0ll_BFu9i) C1{ Fp FL:0 Fi:9}



static void Test_Vp_BFu0ll_BFu9i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu9i");
    static Vp_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0ll_BFu9i");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu9i(Test_Vp_BFu0ll_BFu9i, "Vp_BFu0ll_BFu9i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu9ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Vp_BFu0ll_BFu9ll) C1{ Fp FL:0 FL:9}



static void Test_Vp_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu9ll");
    static Vp_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu9ll(Test_Vp_BFu0ll_BFu9ll, "Vp_BFu0ll_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_BFu9s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Vp_BFu0ll_BFu9s) C1{ Fp FL:0 Fs:9}



static void Test_Vp_BFu0ll_BFu9s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu9s");
    static Vp_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0ll_BFu9s");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_BFu9s(Test_Vp_BFu0ll_BFu9s, "Vp_BFu0ll_BFu9s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_C  {
  void *v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Vp_BFu0ll_C) C1{ Fp FL:0 Fc}



static void Test_Vp_BFu0ll_C()
{
  {
    init_simple_test("Vp_BFu0ll_C");
    static Vp_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_C.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_C(Test_Vp_BFu0ll_C, "Vp_BFu0ll_C", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_D  {
  void *v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Vp_BFu0ll_D) C1{ Fp FL:0 FL}



static void Test_Vp_BFu0ll_D()
{
  {
    init_simple_test("Vp_BFu0ll_D");
    static Vp_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_D.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_D(Test_Vp_BFu0ll_D, "Vp_BFu0ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_F  {
  void *v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Vp_BFu0ll_F) C1{ Fp FL:0 Fi}



static void Test_Vp_BFu0ll_F()
{
  {
    init_simple_test("Vp_BFu0ll_F");
    static Vp_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_F.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_F(Test_Vp_BFu0ll_F, "Vp_BFu0ll_F", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_I  {
  void *v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Vp_BFu0ll_I) C1{ Fp FL:0 Fi}



static void Test_Vp_BFu0ll_I()
{
  {
    init_simple_test("Vp_BFu0ll_I");
    static Vp_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_I.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_I(Test_Vp_BFu0ll_I, "Vp_BFu0ll_I", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_Ip  {
  void *v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Vp_BFu0ll_Ip) C1{ Fp FL:0 Fp}



static void Test_Vp_BFu0ll_Ip()
{
  {
    init_simple_test("Vp_BFu0ll_Ip");
    static Vp_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Ip.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_Ip(Test_Vp_BFu0ll_Ip, "Vp_BFu0ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_L  {
  void *v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Vp_BFu0ll_L) C1{ Fp FL:0 FL}



static void Test_Vp_BFu0ll_L()
{
  {
    init_simple_test("Vp_BFu0ll_L");
    static Vp_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_L.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_L(Test_Vp_BFu0ll_L, "Vp_BFu0ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_S  {
  void *v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Vp_BFu0ll_S) C1{ Fp FL:0 Fs}



static void Test_Vp_BFu0ll_S()
{
  {
    init_simple_test("Vp_BFu0ll_S");
    static Vp_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_S.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_S(Test_Vp_BFu0ll_S, "Vp_BFu0ll_S", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_Uc  {
  void *v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Vp_BFu0ll_Uc) C1{ Fp FL:0 Fc}



static void Test_Vp_BFu0ll_Uc()
{
  {
    init_simple_test("Vp_BFu0ll_Uc");
    static Vp_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Uc.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_Uc(Test_Vp_BFu0ll_Uc, "Vp_BFu0ll_Uc", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_Ui  {
  void *v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Vp_BFu0ll_Ui) C1{ Fp FL:0 Fi}



static void Test_Vp_BFu0ll_Ui()
{
  {
    init_simple_test("Vp_BFu0ll_Ui");
    static Vp_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Ui.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_Ui(Test_Vp_BFu0ll_Ui, "Vp_BFu0ll_Ui", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_Ul  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Vp_BFu0ll_Ul) C1{ Fp FL:0 FL}



static void Test_Vp_BFu0ll_Ul()
{
  {
    init_simple_test("Vp_BFu0ll_Ul");
    static Vp_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Ul.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_Ul(Test_Vp_BFu0ll_Ul, "Vp_BFu0ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_Us  {
  void *v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Vp_BFu0ll_Us) C1{ Fp FL:0 Fs}



static void Test_Vp_BFu0ll_Us()
{
  {
    init_simple_test("Vp_BFu0ll_Us");
    static Vp_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Us.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_Us(Test_Vp_BFu0ll_Us, "Vp_BFu0ll_Us", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0ll_Vp  {
  void *v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Vp_BFu0ll_Vp) C1{ Fp FL:0 Fp}



static void Test_Vp_BFu0ll_Vp()
{
  {
    init_simple_test("Vp_BFu0ll_Vp");
    static Vp_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Vp.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0ll_Vp(Test_Vp_BFu0ll_Vp, "Vp_BFu0ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s  {
  void *v1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0s) C1{ Fp Fs:0}



static void Test_Vp_BFu0s()
{
  {
    init_simple_test("Vp_BFu0s");
    static Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0s(Test_Vp_BFu0s, "Vp_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu0c  {
  void *v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0s_BFu0c) C1{ Fp Fs:0 Fc:0}



static void Test_Vp_BFu0s_BFu0c()
{
  {
    init_simple_test("Vp_BFu0s_BFu0c");
    static Vp_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu0c.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu0c(Test_Vp_BFu0s_BFu0c, "Vp_BFu0s_BFu0c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu0i  {
  void *v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0s_BFu0i) C1{ Fp Fs:0 Fi:0}



static void Test_Vp_BFu0s_BFu0i()
{
  {
    init_simple_test("Vp_BFu0s_BFu0i");
    static Vp_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu0i.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu0i(Test_Vp_BFu0s_BFu0i, "Vp_BFu0s_BFu0i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu0ll  {
  void *v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0s_BFu0ll) C1{ Fp Fs:0 FL:0}



static void Test_Vp_BFu0s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu0ll");
    static Vp_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu0ll.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu0ll(Test_Vp_BFu0s_BFu0ll, "Vp_BFu0s_BFu0ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu0s  {
  void *v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0s_BFu0s) C1{ Fp Fs:0 Fs:0}



static void Test_Vp_BFu0s_BFu0s()
{
  {
    init_simple_test("Vp_BFu0s_BFu0s");
    static Vp_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu0s.v1");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu0s(Test_Vp_BFu0s_BFu0s, "Vp_BFu0s_BFu0s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu15i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Vp_BFu0s_BFu15i) C1{ Fp Fs:0 Fi:15}



static void Test_Vp_BFu0s_BFu15i()
{
  {
    init_simple_test("Vp_BFu0s_BFu15i");
    static Vp_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0s_BFu15i");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu15i(Test_Vp_BFu0s_BFu15i, "Vp_BFu0s_BFu15i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu15ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Vp_BFu0s_BFu15ll) C1{ Fp Fs:0 FL:15}



static void Test_Vp_BFu0s_BFu15ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu15ll");
    static Vp_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0s_BFu15ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu15ll(Test_Vp_BFu0s_BFu15ll, "Vp_BFu0s_BFu15ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu15s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Vp_BFu0s_BFu15s) C1{ Fp Fs:0 Fs:15}



static void Test_Vp_BFu0s_BFu15s()
{
  {
    init_simple_test("Vp_BFu0s_BFu15s");
    static Vp_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0s_BFu15s");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu15s(Test_Vp_BFu0s_BFu15s, "Vp_BFu0s_BFu15s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu16i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Vp_BFu0s_BFu16i) C1{ Fp Fs:0 Fi:16}



static void Test_Vp_BFu0s_BFu16i()
{
  {
    init_simple_test("Vp_BFu0s_BFu16i");
    static Vp_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0s_BFu16i");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu16i(Test_Vp_BFu0s_BFu16i, "Vp_BFu0s_BFu16i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu16ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Vp_BFu0s_BFu16ll) C1{ Fp Fs:0 FL:16}



static void Test_Vp_BFu0s_BFu16ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu16ll");
    static Vp_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0s_BFu16ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu16ll(Test_Vp_BFu0s_BFu16ll, "Vp_BFu0s_BFu16ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu16s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Vp_BFu0s_BFu16s) C1{ Fp Fs:0 Fs:16}



static void Test_Vp_BFu0s_BFu16s()
{
  {
    init_simple_test("Vp_BFu0s_BFu16s");
    static Vp_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0s_BFu16s");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu16s(Test_Vp_BFu0s_BFu16s, "Vp_BFu0s_BFu16s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu17i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Vp_BFu0s_BFu17i) C1{ Fp Fs:0 Fi:17}



static void Test_Vp_BFu0s_BFu17i()
{
  {
    init_simple_test("Vp_BFu0s_BFu17i");
    static Vp_BFu0s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0s_BFu17i");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu17i(Test_Vp_BFu0s_BFu17i, "Vp_BFu0s_BFu17i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu17ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Vp_BFu0s_BFu17ll) C1{ Fp Fs:0 FL:17}



static void Test_Vp_BFu0s_BFu17ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu17ll");
    static Vp_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0s_BFu17ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu17ll(Test_Vp_BFu0s_BFu17ll, "Vp_BFu0s_BFu17ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu1c  {
  void *v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Vp_BFu0s_BFu1c) C1{ Fp Fs:0 Fc:1}



static void Test_Vp_BFu0s_BFu1c()
{
  {
    init_simple_test("Vp_BFu0s_BFu1c");
    static Vp_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0s_BFu1c");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu1c(Test_Vp_BFu0s_BFu1c, "Vp_BFu0s_BFu1c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu1i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Vp_BFu0s_BFu1i) C1{ Fp Fs:0 Fi:1}



static void Test_Vp_BFu0s_BFu1i()
{
  {
    init_simple_test("Vp_BFu0s_BFu1i");
    static Vp_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0s_BFu1i");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu1i(Test_Vp_BFu0s_BFu1i, "Vp_BFu0s_BFu1i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu1ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Vp_BFu0s_BFu1ll) C1{ Fp Fs:0 FL:1}



static void Test_Vp_BFu0s_BFu1ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu1ll");
    static Vp_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0s_BFu1ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu1ll(Test_Vp_BFu0s_BFu1ll, "Vp_BFu0s_BFu1ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu1s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Vp_BFu0s_BFu1s) C1{ Fp Fs:0 Fs:1}



static void Test_Vp_BFu0s_BFu1s()
{
  {
    init_simple_test("Vp_BFu0s_BFu1s");
    static Vp_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0s_BFu1s");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu1s(Test_Vp_BFu0s_BFu1s, "Vp_BFu0s_BFu1s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu31i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Vp_BFu0s_BFu31i) C1{ Fp Fs:0 Fi:31}



static void Test_Vp_BFu0s_BFu31i()
{
  {
    init_simple_test("Vp_BFu0s_BFu31i");
    static Vp_BFu0s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0s_BFu31i");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu31i(Test_Vp_BFu0s_BFu31i, "Vp_BFu0s_BFu31i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu31ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Vp_BFu0s_BFu31ll) C1{ Fp Fs:0 FL:31}



static void Test_Vp_BFu0s_BFu31ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu31ll");
    static Vp_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0s_BFu31ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu31ll(Test_Vp_BFu0s_BFu31ll, "Vp_BFu0s_BFu31ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu32i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Vp_BFu0s_BFu32i) C1{ Fp Fs:0 Fi:32}



static void Test_Vp_BFu0s_BFu32i()
{
  {
    init_simple_test("Vp_BFu0s_BFu32i");
    static Vp_BFu0s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0s_BFu32i");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu32i(Test_Vp_BFu0s_BFu32i, "Vp_BFu0s_BFu32i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu32ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Vp_BFu0s_BFu32ll) C1{ Fp Fs:0 FL:32}



static void Test_Vp_BFu0s_BFu32ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu32ll");
    static Vp_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0s_BFu32ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu32ll(Test_Vp_BFu0s_BFu32ll, "Vp_BFu0s_BFu32ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu33  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Vp_BFu0s_BFu33) C1{ Fp Fs:0 FL:33}



static void Test_Vp_BFu0s_BFu33()
{
  {
    init_simple_test("Vp_BFu0s_BFu33");
    static Vp_BFu0s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu0s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu0s_BFu33");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu33(Test_Vp_BFu0s_BFu33, "Vp_BFu0s_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu7c  {
  void *v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Vp_BFu0s_BFu7c) C1{ Fp Fs:0 Fc:7}



static void Test_Vp_BFu0s_BFu7c()
{
  {
    init_simple_test("Vp_BFu0s_BFu7c");
    static Vp_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0s_BFu7c");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu7c(Test_Vp_BFu0s_BFu7c, "Vp_BFu0s_BFu7c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu7i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Vp_BFu0s_BFu7i) C1{ Fp Fs:0 Fi:7}



static void Test_Vp_BFu0s_BFu7i()
{
  {
    init_simple_test("Vp_BFu0s_BFu7i");
    static Vp_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0s_BFu7i");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu7i(Test_Vp_BFu0s_BFu7i, "Vp_BFu0s_BFu7i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu7ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Vp_BFu0s_BFu7ll) C1{ Fp Fs:0 FL:7}



static void Test_Vp_BFu0s_BFu7ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu7ll");
    static Vp_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0s_BFu7ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu7ll(Test_Vp_BFu0s_BFu7ll, "Vp_BFu0s_BFu7ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu7s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Vp_BFu0s_BFu7s) C1{ Fp Fs:0 Fs:7}



static void Test_Vp_BFu0s_BFu7s()
{
  {
    init_simple_test("Vp_BFu0s_BFu7s");
    static Vp_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0s_BFu7s");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu7s(Test_Vp_BFu0s_BFu7s, "Vp_BFu0s_BFu7s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu8c  {
  void *v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Vp_BFu0s_BFu8c) C1{ Fp Fs:0 Fc:8}



static void Test_Vp_BFu0s_BFu8c()
{
  {
    init_simple_test("Vp_BFu0s_BFu8c");
    static Vp_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0s_BFu8c");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu8c(Test_Vp_BFu0s_BFu8c, "Vp_BFu0s_BFu8c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu8i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Vp_BFu0s_BFu8i) C1{ Fp Fs:0 Fi:8}



static void Test_Vp_BFu0s_BFu8i()
{
  {
    init_simple_test("Vp_BFu0s_BFu8i");
    static Vp_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0s_BFu8i");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu8i(Test_Vp_BFu0s_BFu8i, "Vp_BFu0s_BFu8i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu8ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Vp_BFu0s_BFu8ll) C1{ Fp Fs:0 FL:8}



static void Test_Vp_BFu0s_BFu8ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu8ll");
    static Vp_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0s_BFu8ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu8ll(Test_Vp_BFu0s_BFu8ll, "Vp_BFu0s_BFu8ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu8s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Vp_BFu0s_BFu8s) C1{ Fp Fs:0 Fs:8}



static void Test_Vp_BFu0s_BFu8s()
{
  {
    init_simple_test("Vp_BFu0s_BFu8s");
    static Vp_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0s_BFu8s");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu8s(Test_Vp_BFu0s_BFu8s, "Vp_BFu0s_BFu8s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu9i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Vp_BFu0s_BFu9i) C1{ Fp Fs:0 Fi:9}



static void Test_Vp_BFu0s_BFu9i()
{
  {
    init_simple_test("Vp_BFu0s_BFu9i");
    static Vp_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0s_BFu9i");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu9i(Test_Vp_BFu0s_BFu9i, "Vp_BFu0s_BFu9i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu9ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Vp_BFu0s_BFu9ll) C1{ Fp Fs:0 FL:9}



static void Test_Vp_BFu0s_BFu9ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu9ll");
    static Vp_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0s_BFu9ll");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu9ll(Test_Vp_BFu0s_BFu9ll, "Vp_BFu0s_BFu9ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_BFu9s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Vp_BFu0s_BFu9s) C1{ Fp Fs:0 Fs:9}



static void Test_Vp_BFu0s_BFu9s()
{
  {
    init_simple_test("Vp_BFu0s_BFu9s");
    static Vp_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0s_BFu9s");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_BFu9s(Test_Vp_BFu0s_BFu9s, "Vp_BFu0s_BFu9s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_C  {
  void *v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Vp_BFu0s_C) C1{ Fp Fs:0 Fc}



static void Test_Vp_BFu0s_C()
{
  {
    init_simple_test("Vp_BFu0s_C");
    static Vp_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_C.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_C(Test_Vp_BFu0s_C, "Vp_BFu0s_C", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_D  {
  void *v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Vp_BFu0s_D) C1{ Fp Fs:0 FL}



static void Test_Vp_BFu0s_D()
{
  {
    init_simple_test("Vp_BFu0s_D");
    static Vp_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_D.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_D(Test_Vp_BFu0s_D, "Vp_BFu0s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_F  {
  void *v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Vp_BFu0s_F) C1{ Fp Fs:0 Fi}



static void Test_Vp_BFu0s_F()
{
  {
    init_simple_test("Vp_BFu0s_F");
    static Vp_BFu0s_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_F.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_F(Test_Vp_BFu0s_F, "Vp_BFu0s_F", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_I  {
  void *v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Vp_BFu0s_I) C1{ Fp Fs:0 Fi}



static void Test_Vp_BFu0s_I()
{
  {
    init_simple_test("Vp_BFu0s_I");
    static Vp_BFu0s_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_I.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_I(Test_Vp_BFu0s_I, "Vp_BFu0s_I", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_Ip  {
  void *v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Vp_BFu0s_Ip) C1{ Fp Fs:0 Fp}



static void Test_Vp_BFu0s_Ip()
{
  {
    init_simple_test("Vp_BFu0s_Ip");
    static Vp_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Ip.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_Ip(Test_Vp_BFu0s_Ip, "Vp_BFu0s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_L  {
  void *v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Vp_BFu0s_L) C1{ Fp Fs:0 FL}



static void Test_Vp_BFu0s_L()
{
  {
    init_simple_test("Vp_BFu0s_L");
    static Vp_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_L.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_L(Test_Vp_BFu0s_L, "Vp_BFu0s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_S  {
  void *v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Vp_BFu0s_S) C1{ Fp Fs:0 Fs}



static void Test_Vp_BFu0s_S()
{
  {
    init_simple_test("Vp_BFu0s_S");
    static Vp_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_S.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_S(Test_Vp_BFu0s_S, "Vp_BFu0s_S", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_Uc  {
  void *v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Vp_BFu0s_Uc) C1{ Fp Fs:0 Fc}



static void Test_Vp_BFu0s_Uc()
{
  {
    init_simple_test("Vp_BFu0s_Uc");
    static Vp_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Uc.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_Uc(Test_Vp_BFu0s_Uc, "Vp_BFu0s_Uc", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_Ui  {
  void *v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Vp_BFu0s_Ui) C1{ Fp Fs:0 Fi}



static void Test_Vp_BFu0s_Ui()
{
  {
    init_simple_test("Vp_BFu0s_Ui");
    static Vp_BFu0s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Ui.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_Ui(Test_Vp_BFu0s_Ui, "Vp_BFu0s_Ui", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_Ul  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Vp_BFu0s_Ul) C1{ Fp Fs:0 FL}



static void Test_Vp_BFu0s_Ul()
{
  {
    init_simple_test("Vp_BFu0s_Ul");
    static Vp_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Ul.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_Ul(Test_Vp_BFu0s_Ul, "Vp_BFu0s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_Us  {
  void *v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Vp_BFu0s_Us) C1{ Fp Fs:0 Fs}



static void Test_Vp_BFu0s_Us()
{
  {
    init_simple_test("Vp_BFu0s_Us");
    static Vp_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Us.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_Us(Test_Vp_BFu0s_Us, "Vp_BFu0s_Us", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu0s_Vp  {
  void *v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Vp_BFu0s_Vp) C1{ Fp Fs:0 Fp}



static void Test_Vp_BFu0s_Vp()
{
  {
    init_simple_test("Vp_BFu0s_Vp");
    static Vp_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Vp.v2");
  }
}
static Arrange_To_Call_Me vVp_BFu0s_Vp(Test_Vp_BFu0s_Vp, "Vp_BFu0s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15i_BFu0c  {
  void *v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Vp_BFu15i_BFu0c) C1{ Fp Fi:15 Fc:0}



static void Test_Vp_BFu15i_BFu0c()
{
  {
    init_simple_test("Vp_BFu15i_BFu0c");
    static Vp_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15i_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu15i_BFu0c(Test_Vp_BFu15i_BFu0c, "Vp_BFu15i_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15i_BFu0i  {
  void *v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Vp_BFu15i_BFu0i) C1{ Fp Fi:15 Fi:0}



static void Test_Vp_BFu15i_BFu0i()
{
  {
    init_simple_test("Vp_BFu15i_BFu0i");
    static Vp_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15i_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu15i_BFu0i(Test_Vp_BFu15i_BFu0i, "Vp_BFu15i_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15i_BFu0ll  {
  void *v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Vp_BFu15i_BFu0ll) C1{ Fp Fi:15 FL:0}



static void Test_Vp_BFu15i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu15i_BFu0ll");
    static Vp_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15i_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu15i_BFu0ll(Test_Vp_BFu15i_BFu0ll, "Vp_BFu15i_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15i_BFu0s  {
  void *v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Vp_BFu15i_BFu0s) C1{ Fp Fi:15 Fs:0}



static void Test_Vp_BFu15i_BFu0s()
{
  {
    init_simple_test("Vp_BFu15i_BFu0s");
    static Vp_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15i_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu15i_BFu0s(Test_Vp_BFu15i_BFu0s, "Vp_BFu15i_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15ll_BFu0c  {
  void *v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Vp_BFu15ll_BFu0c) C1{ Fp FL:15 Fc:0}



static void Test_Vp_BFu15ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu15ll_BFu0c");
    static Vp_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15ll_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu15ll_BFu0c(Test_Vp_BFu15ll_BFu0c, "Vp_BFu15ll_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15ll_BFu0i  {
  void *v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Vp_BFu15ll_BFu0i) C1{ Fp FL:15 Fi:0}



static void Test_Vp_BFu15ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu15ll_BFu0i");
    static Vp_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15ll_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu15ll_BFu0i(Test_Vp_BFu15ll_BFu0i, "Vp_BFu15ll_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15ll_BFu0ll  {
  void *v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Vp_BFu15ll_BFu0ll) C1{ Fp FL:15 FL:0}



static void Test_Vp_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu15ll_BFu0ll");
    static Vp_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu15ll_BFu0ll(Test_Vp_BFu15ll_BFu0ll, "Vp_BFu15ll_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15ll_BFu0s  {
  void *v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Vp_BFu15ll_BFu0s) C1{ Fp FL:15 Fs:0}



static void Test_Vp_BFu15ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu15ll_BFu0s");
    static Vp_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15ll_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu15ll_BFu0s(Test_Vp_BFu15ll_BFu0s, "Vp_BFu15ll_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15s_BFu0c  {
  void *v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Vp_BFu15s_BFu0c) C1{ Fp Fs:15 Fc:0}



static void Test_Vp_BFu15s_BFu0c()
{
  {
    init_simple_test("Vp_BFu15s_BFu0c");
    static Vp_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15s_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu15s_BFu0c(Test_Vp_BFu15s_BFu0c, "Vp_BFu15s_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15s_BFu0i  {
  void *v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Vp_BFu15s_BFu0i) C1{ Fp Fs:15 Fi:0}



static void Test_Vp_BFu15s_BFu0i()
{
  {
    init_simple_test("Vp_BFu15s_BFu0i");
    static Vp_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15s_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu15s_BFu0i(Test_Vp_BFu15s_BFu0i, "Vp_BFu15s_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15s_BFu0ll  {
  void *v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Vp_BFu15s_BFu0ll) C1{ Fp Fs:15 FL:0}



static void Test_Vp_BFu15s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu15s_BFu0ll");
    static Vp_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15s_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu15s_BFu0ll(Test_Vp_BFu15s_BFu0ll, "Vp_BFu15s_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu15s_BFu0s  {
  void *v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Vp_BFu15s_BFu0s) C1{ Fp Fs:15 Fs:0}



static void Test_Vp_BFu15s_BFu0s()
{
  {
    init_simple_test("Vp_BFu15s_BFu0s");
    static Vp_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15s_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu15s_BFu0s(Test_Vp_BFu15s_BFu0s, "Vp_BFu15s_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16i_BFu0c  {
  void *v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Vp_BFu16i_BFu0c) C1{ Fp Fi:16 Fc:0}



static void Test_Vp_BFu16i_BFu0c()
{
  {
    init_simple_test("Vp_BFu16i_BFu0c");
    static Vp_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16i_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu16i_BFu0c(Test_Vp_BFu16i_BFu0c, "Vp_BFu16i_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16i_BFu0i  {
  void *v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Vp_BFu16i_BFu0i) C1{ Fp Fi:16 Fi:0}



static void Test_Vp_BFu16i_BFu0i()
{
  {
    init_simple_test("Vp_BFu16i_BFu0i");
    static Vp_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16i_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu16i_BFu0i(Test_Vp_BFu16i_BFu0i, "Vp_BFu16i_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16i_BFu0ll  {
  void *v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Vp_BFu16i_BFu0ll) C1{ Fp Fi:16 FL:0}



static void Test_Vp_BFu16i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu16i_BFu0ll");
    static Vp_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16i_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu16i_BFu0ll(Test_Vp_BFu16i_BFu0ll, "Vp_BFu16i_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16i_BFu0s  {
  void *v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Vp_BFu16i_BFu0s) C1{ Fp Fi:16 Fs:0}



static void Test_Vp_BFu16i_BFu0s()
{
  {
    init_simple_test("Vp_BFu16i_BFu0s");
    static Vp_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16i_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu16i_BFu0s(Test_Vp_BFu16i_BFu0s, "Vp_BFu16i_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16ll_BFu0c  {
  void *v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Vp_BFu16ll_BFu0c) C1{ Fp FL:16 Fc:0}



static void Test_Vp_BFu16ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu16ll_BFu0c");
    static Vp_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16ll_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu16ll_BFu0c(Test_Vp_BFu16ll_BFu0c, "Vp_BFu16ll_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16ll_BFu0i  {
  void *v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Vp_BFu16ll_BFu0i) C1{ Fp FL:16 Fi:0}



static void Test_Vp_BFu16ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu16ll_BFu0i");
    static Vp_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16ll_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu16ll_BFu0i(Test_Vp_BFu16ll_BFu0i, "Vp_BFu16ll_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16ll_BFu0ll  {
  void *v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Vp_BFu16ll_BFu0ll) C1{ Fp FL:16 FL:0}



static void Test_Vp_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu16ll_BFu0ll");
    static Vp_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu16ll_BFu0ll(Test_Vp_BFu16ll_BFu0ll, "Vp_BFu16ll_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16ll_BFu0s  {
  void *v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Vp_BFu16ll_BFu0s) C1{ Fp FL:16 Fs:0}



static void Test_Vp_BFu16ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu16ll_BFu0s");
    static Vp_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16ll_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu16ll_BFu0s(Test_Vp_BFu16ll_BFu0s, "Vp_BFu16ll_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16s_BFu0c  {
  void *v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Vp_BFu16s_BFu0c) C1{ Fp Fs:16 Fc:0}



static void Test_Vp_BFu16s_BFu0c()
{
  {
    init_simple_test("Vp_BFu16s_BFu0c");
    static Vp_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16s_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu16s_BFu0c(Test_Vp_BFu16s_BFu0c, "Vp_BFu16s_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16s_BFu0i  {
  void *v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Vp_BFu16s_BFu0i) C1{ Fp Fs:16 Fi:0}



static void Test_Vp_BFu16s_BFu0i()
{
  {
    init_simple_test("Vp_BFu16s_BFu0i");
    static Vp_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16s_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu16s_BFu0i(Test_Vp_BFu16s_BFu0i, "Vp_BFu16s_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16s_BFu0ll  {
  void *v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Vp_BFu16s_BFu0ll) C1{ Fp Fs:16 FL:0}



static void Test_Vp_BFu16s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu16s_BFu0ll");
    static Vp_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16s_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu16s_BFu0ll(Test_Vp_BFu16s_BFu0ll, "Vp_BFu16s_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu16s_BFu0s  {
  void *v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Vp_BFu16s_BFu0s) C1{ Fp Fs:16 Fs:0}



static void Test_Vp_BFu16s_BFu0s()
{
  {
    init_simple_test("Vp_BFu16s_BFu0s");
    static Vp_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16s_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu16s_BFu0s(Test_Vp_BFu16s_BFu0s, "Vp_BFu16s_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17i_BFu0c  {
  void *v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Vp_BFu17i_BFu0c) C1{ Fp Fi:17 Fc:0}



static void Test_Vp_BFu17i_BFu0c()
{
  {
    init_simple_test("Vp_BFu17i_BFu0c");
    static Vp_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17i_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu17i_BFu0c(Test_Vp_BFu17i_BFu0c, "Vp_BFu17i_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17i_BFu0i  {
  void *v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Vp_BFu17i_BFu0i) C1{ Fp Fi:17 Fi:0}



static void Test_Vp_BFu17i_BFu0i()
{
  {
    init_simple_test("Vp_BFu17i_BFu0i");
    static Vp_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17i_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu17i_BFu0i(Test_Vp_BFu17i_BFu0i, "Vp_BFu17i_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17i_BFu0ll  {
  void *v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Vp_BFu17i_BFu0ll) C1{ Fp Fi:17 FL:0}



static void Test_Vp_BFu17i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu17i_BFu0ll");
    static Vp_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17i_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu17i_BFu0ll(Test_Vp_BFu17i_BFu0ll, "Vp_BFu17i_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17i_BFu0s  {
  void *v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Vp_BFu17i_BFu0s) C1{ Fp Fi:17 Fs:0}



static void Test_Vp_BFu17i_BFu0s()
{
  {
    init_simple_test("Vp_BFu17i_BFu0s");
    static Vp_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17i_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu17i_BFu0s(Test_Vp_BFu17i_BFu0s, "Vp_BFu17i_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17ll_BFu0c  {
  void *v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Vp_BFu17ll_BFu0c) C1{ Fp FL:17 Fc:0}



static void Test_Vp_BFu17ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu17ll_BFu0c");
    static Vp_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17ll_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu17ll_BFu0c(Test_Vp_BFu17ll_BFu0c, "Vp_BFu17ll_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17ll_BFu0i  {
  void *v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Vp_BFu17ll_BFu0i) C1{ Fp FL:17 Fi:0}



static void Test_Vp_BFu17ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu17ll_BFu0i");
    static Vp_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17ll_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu17ll_BFu0i(Test_Vp_BFu17ll_BFu0i, "Vp_BFu17ll_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17ll_BFu0ll  {
  void *v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Vp_BFu17ll_BFu0ll) C1{ Fp FL:17 FL:0}



static void Test_Vp_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu17ll_BFu0ll");
    static Vp_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu17ll_BFu0ll(Test_Vp_BFu17ll_BFu0ll, "Vp_BFu17ll_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu17ll_BFu0s  {
  void *v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Vp_BFu17ll_BFu0s) C1{ Fp FL:17 Fs:0}



static void Test_Vp_BFu17ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu17ll_BFu0s");
    static Vp_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17ll_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu17ll_BFu0s(Test_Vp_BFu17ll_BFu0s, "Vp_BFu17ll_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1c_BFu0c  {
  void *v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu1c_BFu0c) C1{ Fp Fc:1 Fc:0}



static void Test_Vp_BFu1c_BFu0c()
{
  {
    init_simple_test("Vp_BFu1c_BFu0c");
    static Vp_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1c_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu1c_BFu0c(Test_Vp_BFu1c_BFu0c, "Vp_BFu1c_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1c_BFu0i  {
  void *v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu1c_BFu0i) C1{ Fp Fc:1 Fi:0}



static void Test_Vp_BFu1c_BFu0i()
{
  {
    init_simple_test("Vp_BFu1c_BFu0i");
    static Vp_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1c_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu1c_BFu0i(Test_Vp_BFu1c_BFu0i, "Vp_BFu1c_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1c_BFu0ll  {
  void *v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu1c_BFu0ll) C1{ Fp Fc:1 FL:0}



static void Test_Vp_BFu1c_BFu0ll()
{
  {
    init_simple_test("Vp_BFu1c_BFu0ll");
    static Vp_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1c_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu1c_BFu0ll(Test_Vp_BFu1c_BFu0ll, "Vp_BFu1c_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1c_BFu0s  {
  void *v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu1c_BFu0s) C1{ Fp Fc:1 Fs:0}



static void Test_Vp_BFu1c_BFu0s()
{
  {
    init_simple_test("Vp_BFu1c_BFu0s");
    static Vp_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1c_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu1c_BFu0s(Test_Vp_BFu1c_BFu0s, "Vp_BFu1c_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1i_BFu0c  {
  void *v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu1i_BFu0c) C1{ Fp Fi:1 Fc:0}



static void Test_Vp_BFu1i_BFu0c()
{
  {
    init_simple_test("Vp_BFu1i_BFu0c");
    static Vp_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1i_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu1i_BFu0c(Test_Vp_BFu1i_BFu0c, "Vp_BFu1i_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1i_BFu0i  {
  void *v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu1i_BFu0i) C1{ Fp Fi:1 Fi:0}



static void Test_Vp_BFu1i_BFu0i()
{
  {
    init_simple_test("Vp_BFu1i_BFu0i");
    static Vp_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1i_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu1i_BFu0i(Test_Vp_BFu1i_BFu0i, "Vp_BFu1i_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1i_BFu0ll  {
  void *v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu1i_BFu0ll) C1{ Fp Fi:1 FL:0}



static void Test_Vp_BFu1i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu1i_BFu0ll");
    static Vp_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1i_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu1i_BFu0ll(Test_Vp_BFu1i_BFu0ll, "Vp_BFu1i_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1i_BFu0s  {
  void *v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu1i_BFu0s) C1{ Fp Fi:1 Fs:0}



static void Test_Vp_BFu1i_BFu0s()
{
  {
    init_simple_test("Vp_BFu1i_BFu0s");
    static Vp_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1i_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu1i_BFu0s(Test_Vp_BFu1i_BFu0s, "Vp_BFu1i_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1ll_BFu0c  {
  void *v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu1ll_BFu0c) C1{ Fp FL:1 Fc:0}



static void Test_Vp_BFu1ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu1ll_BFu0c");
    static Vp_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1ll_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu1ll_BFu0c(Test_Vp_BFu1ll_BFu0c, "Vp_BFu1ll_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1ll_BFu0i  {
  void *v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu1ll_BFu0i) C1{ Fp FL:1 Fi:0}



static void Test_Vp_BFu1ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu1ll_BFu0i");
    static Vp_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1ll_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu1ll_BFu0i(Test_Vp_BFu1ll_BFu0i, "Vp_BFu1ll_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1ll_BFu0ll  {
  void *v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu1ll_BFu0ll) C1{ Fp FL:1 FL:0}



static void Test_Vp_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu1ll_BFu0ll");
    static Vp_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu1ll_BFu0ll(Test_Vp_BFu1ll_BFu0ll, "Vp_BFu1ll_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1ll_BFu0s  {
  void *v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu1ll_BFu0s) C1{ Fp FL:1 Fs:0}



static void Test_Vp_BFu1ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu1ll_BFu0s");
    static Vp_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1ll_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu1ll_BFu0s(Test_Vp_BFu1ll_BFu0s, "Vp_BFu1ll_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1s_BFu0c  {
  void *v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu1s_BFu0c) C1{ Fp Fs:1 Fc:0}



static void Test_Vp_BFu1s_BFu0c()
{
  {
    init_simple_test("Vp_BFu1s_BFu0c");
    static Vp_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1s_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu1s_BFu0c(Test_Vp_BFu1s_BFu0c, "Vp_BFu1s_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1s_BFu0i  {
  void *v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu1s_BFu0i) C1{ Fp Fs:1 Fi:0}



static void Test_Vp_BFu1s_BFu0i()
{
  {
    init_simple_test("Vp_BFu1s_BFu0i");
    static Vp_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1s_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu1s_BFu0i(Test_Vp_BFu1s_BFu0i, "Vp_BFu1s_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1s_BFu0ll  {
  void *v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu1s_BFu0ll) C1{ Fp Fs:1 FL:0}



static void Test_Vp_BFu1s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu1s_BFu0ll");
    static Vp_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1s_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu1s_BFu0ll(Test_Vp_BFu1s_BFu0ll, "Vp_BFu1s_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu1s_BFu0s  {
  void *v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu1s_BFu0s) C1{ Fp Fs:1 Fs:0}



static void Test_Vp_BFu1s_BFu0s()
{
  {
    init_simple_test("Vp_BFu1s_BFu0s");
    static Vp_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1s_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu1s_BFu0s(Test_Vp_BFu1s_BFu0s, "Vp_BFu1s_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31i_BFu0c  {
  void *v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Vp_BFu31i_BFu0c) C1{ Fp Fi:31 Fc:0}



static void Test_Vp_BFu31i_BFu0c()
{
  {
    init_simple_test("Vp_BFu31i_BFu0c");
    static Vp_BFu31i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31i_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu31i_BFu0c(Test_Vp_BFu31i_BFu0c, "Vp_BFu31i_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31i_BFu0i  {
  void *v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Vp_BFu31i_BFu0i) C1{ Fp Fi:31 Fi:0}



static void Test_Vp_BFu31i_BFu0i()
{
  {
    init_simple_test("Vp_BFu31i_BFu0i");
    static Vp_BFu31i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31i_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu31i_BFu0i(Test_Vp_BFu31i_BFu0i, "Vp_BFu31i_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31i_BFu0ll  {
  void *v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Vp_BFu31i_BFu0ll) C1{ Fp Fi:31 FL:0}



static void Test_Vp_BFu31i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu31i_BFu0ll");
    static Vp_BFu31i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31i_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu31i_BFu0ll(Test_Vp_BFu31i_BFu0ll, "Vp_BFu31i_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31i_BFu0s  {
  void *v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Vp_BFu31i_BFu0s) C1{ Fp Fi:31 Fs:0}



static void Test_Vp_BFu31i_BFu0s()
{
  {
    init_simple_test("Vp_BFu31i_BFu0s");
    static Vp_BFu31i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31i_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu31i_BFu0s(Test_Vp_BFu31i_BFu0s, "Vp_BFu31i_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31ll_BFu0c  {
  void *v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Vp_BFu31ll_BFu0c) C1{ Fp FL:31 Fc:0}



static void Test_Vp_BFu31ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu31ll_BFu0c");
    static Vp_BFu31ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31ll_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu31ll_BFu0c(Test_Vp_BFu31ll_BFu0c, "Vp_BFu31ll_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31ll_BFu0i  {
  void *v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Vp_BFu31ll_BFu0i) C1{ Fp FL:31 Fi:0}



static void Test_Vp_BFu31ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu31ll_BFu0i");
    static Vp_BFu31ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31ll_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu31ll_BFu0i(Test_Vp_BFu31ll_BFu0i, "Vp_BFu31ll_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31ll_BFu0ll  {
  void *v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Vp_BFu31ll_BFu0ll) C1{ Fp FL:31 FL:0}



static void Test_Vp_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu31ll_BFu0ll");
    static Vp_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu31ll_BFu0ll(Test_Vp_BFu31ll_BFu0ll, "Vp_BFu31ll_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu31ll_BFu0s  {
  void *v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Vp_BFu31ll_BFu0s) C1{ Fp FL:31 Fs:0}



static void Test_Vp_BFu31ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu31ll_BFu0s");
    static Vp_BFu31ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31ll_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu31ll_BFu0s(Test_Vp_BFu31ll_BFu0s, "Vp_BFu31ll_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32i_BFu0c  {
  void *v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Vp_BFu32i_BFu0c) C1{ Fp Fi:32 Fc:0}



static void Test_Vp_BFu32i_BFu0c()
{
  {
    init_simple_test("Vp_BFu32i_BFu0c");
    static Vp_BFu32i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32i_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu32i_BFu0c(Test_Vp_BFu32i_BFu0c, "Vp_BFu32i_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32i_BFu0i  {
  void *v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Vp_BFu32i_BFu0i) C1{ Fp Fi:32 Fi:0}



static void Test_Vp_BFu32i_BFu0i()
{
  {
    init_simple_test("Vp_BFu32i_BFu0i");
    static Vp_BFu32i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32i_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu32i_BFu0i(Test_Vp_BFu32i_BFu0i, "Vp_BFu32i_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32i_BFu0ll  {
  void *v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Vp_BFu32i_BFu0ll) C1{ Fp Fi:32 FL:0}



static void Test_Vp_BFu32i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu32i_BFu0ll");
    static Vp_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32i_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu32i_BFu0ll(Test_Vp_BFu32i_BFu0ll, "Vp_BFu32i_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32i_BFu0s  {
  void *v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Vp_BFu32i_BFu0s) C1{ Fp Fi:32 Fs:0}



static void Test_Vp_BFu32i_BFu0s()
{
  {
    init_simple_test("Vp_BFu32i_BFu0s");
    static Vp_BFu32i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32i_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu32i_BFu0s(Test_Vp_BFu32i_BFu0s, "Vp_BFu32i_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32ll_BFu0c  {
  void *v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Vp_BFu32ll_BFu0c) C1{ Fp FL:32 Fc:0}



static void Test_Vp_BFu32ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu32ll_BFu0c");
    static Vp_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32ll_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu32ll_BFu0c(Test_Vp_BFu32ll_BFu0c, "Vp_BFu32ll_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32ll_BFu0i  {
  void *v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Vp_BFu32ll_BFu0i) C1{ Fp FL:32 Fi:0}



static void Test_Vp_BFu32ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu32ll_BFu0i");
    static Vp_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32ll_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu32ll_BFu0i(Test_Vp_BFu32ll_BFu0i, "Vp_BFu32ll_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32ll_BFu0ll  {
  void *v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Vp_BFu32ll_BFu0ll) C1{ Fp FL:32 FL:0}



static void Test_Vp_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu32ll_BFu0ll");
    static Vp_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu32ll_BFu0ll(Test_Vp_BFu32ll_BFu0ll, "Vp_BFu32ll_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu32ll_BFu0s  {
  void *v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Vp_BFu32ll_BFu0s) C1{ Fp FL:32 Fs:0}



static void Test_Vp_BFu32ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu32ll_BFu0s");
    static Vp_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32ll_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu32ll_BFu0s(Test_Vp_BFu32ll_BFu0s, "Vp_BFu32ll_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu33_BFu0c  {
  void *v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Vp_BFu33_BFu0c) C1{ Fp FL:33 Fc:0}



static void Test_Vp_BFu33_BFu0c()
{
  {
    init_simple_test("Vp_BFu33_BFu0c");
    static Vp_BFu33_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu33_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu33_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu33_BFu0c(Test_Vp_BFu33_BFu0c, "Vp_BFu33_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu33_BFu0i  {
  void *v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Vp_BFu33_BFu0i) C1{ Fp FL:33 Fi:0}



static void Test_Vp_BFu33_BFu0i()
{
  {
    init_simple_test("Vp_BFu33_BFu0i");
    static Vp_BFu33_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu33_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu33_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu33_BFu0i(Test_Vp_BFu33_BFu0i, "Vp_BFu33_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu33_BFu0ll  {
  void *v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Vp_BFu33_BFu0ll) C1{ Fp FL:33 FL:0}



static void Test_Vp_BFu33_BFu0ll()
{
  {
    init_simple_test("Vp_BFu33_BFu0ll");
    static Vp_BFu33_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu33_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu33_BFu0ll(Test_Vp_BFu33_BFu0ll, "Vp_BFu33_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu33_BFu0s  {
  void *v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Vp_BFu33_BFu0s) C1{ Fp FL:33 Fs:0}



static void Test_Vp_BFu33_BFu0s()
{
  {
    init_simple_test("Vp_BFu33_BFu0s");
    static Vp_BFu33_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu33_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu33_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu33_BFu0s(Test_Vp_BFu33_BFu0s, "Vp_BFu33_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7c_BFu0c  {
  void *v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Vp_BFu7c_BFu0c) C1{ Fp Fc:7 Fc:0}



static void Test_Vp_BFu7c_BFu0c()
{
  {
    init_simple_test("Vp_BFu7c_BFu0c");
    static Vp_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7c_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu7c_BFu0c(Test_Vp_BFu7c_BFu0c, "Vp_BFu7c_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7c_BFu0i  {
  void *v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Vp_BFu7c_BFu0i) C1{ Fp Fc:7 Fi:0}



static void Test_Vp_BFu7c_BFu0i()
{
  {
    init_simple_test("Vp_BFu7c_BFu0i");
    static Vp_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7c_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu7c_BFu0i(Test_Vp_BFu7c_BFu0i, "Vp_BFu7c_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7c_BFu0ll  {
  void *v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Vp_BFu7c_BFu0ll) C1{ Fp Fc:7 FL:0}



static void Test_Vp_BFu7c_BFu0ll()
{
  {
    init_simple_test("Vp_BFu7c_BFu0ll");
    static Vp_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7c_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu7c_BFu0ll(Test_Vp_BFu7c_BFu0ll, "Vp_BFu7c_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7c_BFu0s  {
  void *v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Vp_BFu7c_BFu0s) C1{ Fp Fc:7 Fs:0}



static void Test_Vp_BFu7c_BFu0s()
{
  {
    init_simple_test("Vp_BFu7c_BFu0s");
    static Vp_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7c_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu7c_BFu0s(Test_Vp_BFu7c_BFu0s, "Vp_BFu7c_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7i_BFu0c  {
  void *v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Vp_BFu7i_BFu0c) C1{ Fp Fi:7 Fc:0}



static void Test_Vp_BFu7i_BFu0c()
{
  {
    init_simple_test("Vp_BFu7i_BFu0c");
    static Vp_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7i_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu7i_BFu0c(Test_Vp_BFu7i_BFu0c, "Vp_BFu7i_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7i_BFu0i  {
  void *v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Vp_BFu7i_BFu0i) C1{ Fp Fi:7 Fi:0}



static void Test_Vp_BFu7i_BFu0i()
{
  {
    init_simple_test("Vp_BFu7i_BFu0i");
    static Vp_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7i_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu7i_BFu0i(Test_Vp_BFu7i_BFu0i, "Vp_BFu7i_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7i_BFu0ll  {
  void *v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Vp_BFu7i_BFu0ll) C1{ Fp Fi:7 FL:0}



static void Test_Vp_BFu7i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu7i_BFu0ll");
    static Vp_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7i_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu7i_BFu0ll(Test_Vp_BFu7i_BFu0ll, "Vp_BFu7i_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7i_BFu0s  {
  void *v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Vp_BFu7i_BFu0s) C1{ Fp Fi:7 Fs:0}



static void Test_Vp_BFu7i_BFu0s()
{
  {
    init_simple_test("Vp_BFu7i_BFu0s");
    static Vp_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7i_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu7i_BFu0s(Test_Vp_BFu7i_BFu0s, "Vp_BFu7i_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7ll_BFu0c  {
  void *v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Vp_BFu7ll_BFu0c) C1{ Fp FL:7 Fc:0}



static void Test_Vp_BFu7ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu7ll_BFu0c");
    static Vp_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7ll_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu7ll_BFu0c(Test_Vp_BFu7ll_BFu0c, "Vp_BFu7ll_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7ll_BFu0i  {
  void *v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Vp_BFu7ll_BFu0i) C1{ Fp FL:7 Fi:0}



static void Test_Vp_BFu7ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu7ll_BFu0i");
    static Vp_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7ll_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu7ll_BFu0i(Test_Vp_BFu7ll_BFu0i, "Vp_BFu7ll_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7ll_BFu0ll  {
  void *v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Vp_BFu7ll_BFu0ll) C1{ Fp FL:7 FL:0}



static void Test_Vp_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu7ll_BFu0ll");
    static Vp_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu7ll_BFu0ll(Test_Vp_BFu7ll_BFu0ll, "Vp_BFu7ll_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7ll_BFu0s  {
  void *v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Vp_BFu7ll_BFu0s) C1{ Fp FL:7 Fs:0}



static void Test_Vp_BFu7ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu7ll_BFu0s");
    static Vp_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7ll_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu7ll_BFu0s(Test_Vp_BFu7ll_BFu0s, "Vp_BFu7ll_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7s_BFu0c  {
  void *v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Vp_BFu7s_BFu0c) C1{ Fp Fs:7 Fc:0}



static void Test_Vp_BFu7s_BFu0c()
{
  {
    init_simple_test("Vp_BFu7s_BFu0c");
    static Vp_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7s_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu7s_BFu0c(Test_Vp_BFu7s_BFu0c, "Vp_BFu7s_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7s_BFu0i  {
  void *v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Vp_BFu7s_BFu0i) C1{ Fp Fs:7 Fi:0}



static void Test_Vp_BFu7s_BFu0i()
{
  {
    init_simple_test("Vp_BFu7s_BFu0i");
    static Vp_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7s_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu7s_BFu0i(Test_Vp_BFu7s_BFu0i, "Vp_BFu7s_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7s_BFu0ll  {
  void *v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Vp_BFu7s_BFu0ll) C1{ Fp Fs:7 FL:0}



static void Test_Vp_BFu7s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu7s_BFu0ll");
    static Vp_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7s_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu7s_BFu0ll(Test_Vp_BFu7s_BFu0ll, "Vp_BFu7s_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu7s_BFu0s  {
  void *v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Vp_BFu7s_BFu0s) C1{ Fp Fs:7 Fs:0}



static void Test_Vp_BFu7s_BFu0s()
{
  {
    init_simple_test("Vp_BFu7s_BFu0s");
    static Vp_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7s_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu7s_BFu0s(Test_Vp_BFu7s_BFu0s, "Vp_BFu7s_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8c_BFu0c  {
  void *v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Vp_BFu8c_BFu0c) C1{ Fp Fc:8 Fc:0}



static void Test_Vp_BFu8c_BFu0c()
{
  {
    init_simple_test("Vp_BFu8c_BFu0c");
    static Vp_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8c_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu8c_BFu0c(Test_Vp_BFu8c_BFu0c, "Vp_BFu8c_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8c_BFu0i  {
  void *v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Vp_BFu8c_BFu0i) C1{ Fp Fc:8 Fi:0}



static void Test_Vp_BFu8c_BFu0i()
{
  {
    init_simple_test("Vp_BFu8c_BFu0i");
    static Vp_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8c_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu8c_BFu0i(Test_Vp_BFu8c_BFu0i, "Vp_BFu8c_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8c_BFu0ll  {
  void *v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Vp_BFu8c_BFu0ll) C1{ Fp Fc:8 FL:0}



static void Test_Vp_BFu8c_BFu0ll()
{
  {
    init_simple_test("Vp_BFu8c_BFu0ll");
    static Vp_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8c_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu8c_BFu0ll(Test_Vp_BFu8c_BFu0ll, "Vp_BFu8c_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8c_BFu0s  {
  void *v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Vp_BFu8c_BFu0s) C1{ Fp Fc:8 Fs:0}



static void Test_Vp_BFu8c_BFu0s()
{
  {
    init_simple_test("Vp_BFu8c_BFu0s");
    static Vp_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8c_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu8c_BFu0s(Test_Vp_BFu8c_BFu0s, "Vp_BFu8c_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8i_BFu0c  {
  void *v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Vp_BFu8i_BFu0c) C1{ Fp Fi:8 Fc:0}



static void Test_Vp_BFu8i_BFu0c()
{
  {
    init_simple_test("Vp_BFu8i_BFu0c");
    static Vp_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8i_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu8i_BFu0c(Test_Vp_BFu8i_BFu0c, "Vp_BFu8i_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8i_BFu0i  {
  void *v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Vp_BFu8i_BFu0i) C1{ Fp Fi:8 Fi:0}



static void Test_Vp_BFu8i_BFu0i()
{
  {
    init_simple_test("Vp_BFu8i_BFu0i");
    static Vp_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8i_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu8i_BFu0i(Test_Vp_BFu8i_BFu0i, "Vp_BFu8i_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8i_BFu0ll  {
  void *v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Vp_BFu8i_BFu0ll) C1{ Fp Fi:8 FL:0}



static void Test_Vp_BFu8i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu8i_BFu0ll");
    static Vp_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8i_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu8i_BFu0ll(Test_Vp_BFu8i_BFu0ll, "Vp_BFu8i_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8i_BFu0s  {
  void *v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Vp_BFu8i_BFu0s) C1{ Fp Fi:8 Fs:0}



static void Test_Vp_BFu8i_BFu0s()
{
  {
    init_simple_test("Vp_BFu8i_BFu0s");
    static Vp_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8i_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu8i_BFu0s(Test_Vp_BFu8i_BFu0s, "Vp_BFu8i_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8ll_BFu0c  {
  void *v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Vp_BFu8ll_BFu0c) C1{ Fp FL:8 Fc:0}



static void Test_Vp_BFu8ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu8ll_BFu0c");
    static Vp_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8ll_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu8ll_BFu0c(Test_Vp_BFu8ll_BFu0c, "Vp_BFu8ll_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8ll_BFu0i  {
  void *v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Vp_BFu8ll_BFu0i) C1{ Fp FL:8 Fi:0}



static void Test_Vp_BFu8ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu8ll_BFu0i");
    static Vp_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8ll_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu8ll_BFu0i(Test_Vp_BFu8ll_BFu0i, "Vp_BFu8ll_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8ll_BFu0ll  {
  void *v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Vp_BFu8ll_BFu0ll) C1{ Fp FL:8 FL:0}



static void Test_Vp_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu8ll_BFu0ll");
    static Vp_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu8ll_BFu0ll(Test_Vp_BFu8ll_BFu0ll, "Vp_BFu8ll_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8ll_BFu0s  {
  void *v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Vp_BFu8ll_BFu0s) C1{ Fp FL:8 Fs:0}



static void Test_Vp_BFu8ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu8ll_BFu0s");
    static Vp_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8ll_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu8ll_BFu0s(Test_Vp_BFu8ll_BFu0s, "Vp_BFu8ll_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8s_BFu0c  {
  void *v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Vp_BFu8s_BFu0c) C1{ Fp Fs:8 Fc:0}



static void Test_Vp_BFu8s_BFu0c()
{
  {
    init_simple_test("Vp_BFu8s_BFu0c");
    static Vp_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8s_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu8s_BFu0c(Test_Vp_BFu8s_BFu0c, "Vp_BFu8s_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8s_BFu0i  {
  void *v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Vp_BFu8s_BFu0i) C1{ Fp Fs:8 Fi:0}



static void Test_Vp_BFu8s_BFu0i()
{
  {
    init_simple_test("Vp_BFu8s_BFu0i");
    static Vp_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8s_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu8s_BFu0i(Test_Vp_BFu8s_BFu0i, "Vp_BFu8s_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8s_BFu0ll  {
  void *v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Vp_BFu8s_BFu0ll) C1{ Fp Fs:8 FL:0}



static void Test_Vp_BFu8s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu8s_BFu0ll");
    static Vp_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8s_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu8s_BFu0ll(Test_Vp_BFu8s_BFu0ll, "Vp_BFu8s_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu8s_BFu0s  {
  void *v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Vp_BFu8s_BFu0s) C1{ Fp Fs:8 Fs:0}



static void Test_Vp_BFu8s_BFu0s()
{
  {
    init_simple_test("Vp_BFu8s_BFu0s");
    static Vp_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8s_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu8s_BFu0s(Test_Vp_BFu8s_BFu0s, "Vp_BFu8s_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9i_BFu0c  {
  void *v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Vp_BFu9i_BFu0c) C1{ Fp Fi:9 Fc:0}



static void Test_Vp_BFu9i_BFu0c()
{
  {
    init_simple_test("Vp_BFu9i_BFu0c");
    static Vp_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9i_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu9i_BFu0c(Test_Vp_BFu9i_BFu0c, "Vp_BFu9i_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9i_BFu0i  {
  void *v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Vp_BFu9i_BFu0i) C1{ Fp Fi:9 Fi:0}



static void Test_Vp_BFu9i_BFu0i()
{
  {
    init_simple_test("Vp_BFu9i_BFu0i");
    static Vp_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9i_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu9i_BFu0i(Test_Vp_BFu9i_BFu0i, "Vp_BFu9i_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9i_BFu0ll  {
  void *v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Vp_BFu9i_BFu0ll) C1{ Fp Fi:9 FL:0}



static void Test_Vp_BFu9i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu9i_BFu0ll");
    static Vp_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9i_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu9i_BFu0ll(Test_Vp_BFu9i_BFu0ll, "Vp_BFu9i_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9i_BFu0s  {
  void *v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Vp_BFu9i_BFu0s) C1{ Fp Fi:9 Fs:0}



static void Test_Vp_BFu9i_BFu0s()
{
  {
    init_simple_test("Vp_BFu9i_BFu0s");
    static Vp_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9i_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu9i_BFu0s(Test_Vp_BFu9i_BFu0s, "Vp_BFu9i_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9ll_BFu0c  {
  void *v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Vp_BFu9ll_BFu0c) C1{ Fp FL:9 Fc:0}



static void Test_Vp_BFu9ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu9ll_BFu0c");
    static Vp_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9ll_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu9ll_BFu0c(Test_Vp_BFu9ll_BFu0c, "Vp_BFu9ll_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9ll_BFu0i  {
  void *v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Vp_BFu9ll_BFu0i) C1{ Fp FL:9 Fi:0}



static void Test_Vp_BFu9ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu9ll_BFu0i");
    static Vp_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9ll_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu9ll_BFu0i(Test_Vp_BFu9ll_BFu0i, "Vp_BFu9ll_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9ll_BFu0ll  {
  void *v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Vp_BFu9ll_BFu0ll) C1{ Fp FL:9 FL:0}



static void Test_Vp_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu9ll_BFu0ll");
    static Vp_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9ll_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu9ll_BFu0ll(Test_Vp_BFu9ll_BFu0ll, "Vp_BFu9ll_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9ll_BFu0s  {
  void *v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Vp_BFu9ll_BFu0s) C1{ Fp FL:9 Fs:0}



static void Test_Vp_BFu9ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu9ll_BFu0s");
    static Vp_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9ll_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu9ll_BFu0s(Test_Vp_BFu9ll_BFu0s, "Vp_BFu9ll_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9s_BFu0c  {
  void *v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Vp_BFu9s_BFu0c) C1{ Fp Fs:9 Fc:0}



static void Test_Vp_BFu9s_BFu0c()
{
  {
    init_simple_test("Vp_BFu9s_BFu0c");
    static Vp_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9s_BFu0c");
  }
}
static Arrange_To_Call_Me vVp_BFu9s_BFu0c(Test_Vp_BFu9s_BFu0c, "Vp_BFu9s_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9s_BFu0i  {
  void *v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Vp_BFu9s_BFu0i) C1{ Fp Fs:9 Fi:0}



static void Test_Vp_BFu9s_BFu0i()
{
  {
    init_simple_test("Vp_BFu9s_BFu0i");
    static Vp_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9s_BFu0i");
  }
}
static Arrange_To_Call_Me vVp_BFu9s_BFu0i(Test_Vp_BFu9s_BFu0i, "Vp_BFu9s_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9s_BFu0ll  {
  void *v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Vp_BFu9s_BFu0ll) C1{ Fp Fs:9 FL:0}



static void Test_Vp_BFu9s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu9s_BFu0ll");
    static Vp_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9s_BFu0ll");
  }
}
static Arrange_To_Call_Me vVp_BFu9s_BFu0ll(Test_Vp_BFu9s_BFu0ll, "Vp_BFu9s_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_BFu9s_BFu0s  {
  void *v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Vp_BFu9s_BFu0s) C1{ Fp Fs:9 Fs:0}



static void Test_Vp_BFu9s_BFu0s()
{
  {
    init_simple_test("Vp_BFu9s_BFu0s");
    static Vp_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9s_BFu0s");
  }
}
static Arrange_To_Call_Me vVp_BFu9s_BFu0s(Test_Vp_BFu9s_BFu0s, "Vp_BFu9s_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_C_BFu0c  {
  void *v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Vp_C_BFu0c) C1{ Fp Fc Fc:0}



static void Test_Vp_C_BFu0c()
{
  {
    init_simple_test("Vp_C_BFu0c");
    static Vp_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_C_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_C_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_C_BFu0c(Test_Vp_C_BFu0c, "Vp_C_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_C_BFu0i  {
  void *v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Vp_C_BFu0i) C1{ Fp Fc Fi:0}



static void Test_Vp_C_BFu0i()
{
  {
    init_simple_test("Vp_C_BFu0i");
    static Vp_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_C_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_C_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_C_BFu0i(Test_Vp_C_BFu0i, "Vp_C_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_C_BFu0ll  {
  void *v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Vp_C_BFu0ll) C1{ Fp Fc FL:0}



static void Test_Vp_C_BFu0ll()
{
  {
    init_simple_test("Vp_C_BFu0ll");
    static Vp_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_C_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_C_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_C_BFu0ll(Test_Vp_C_BFu0ll, "Vp_C_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_C_BFu0s  {
  void *v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Vp_C_BFu0s) C1{ Fp Fc Fs:0}



static void Test_Vp_C_BFu0s()
{
  {
    init_simple_test("Vp_C_BFu0s");
    static Vp_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_C_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_C_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_C_BFu0s(Test_Vp_C_BFu0s, "Vp_C_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_D_BFu0c  {
  void *v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Vp_D_BFu0c) C1{ Fp FL Fc:0}



static void Test_Vp_D_BFu0c()
{
  {
    init_simple_test("Vp_D_BFu0c");
    static Vp_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_D_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_D_BFu0c(Test_Vp_D_BFu0c, "Vp_D_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_D_BFu0i  {
  void *v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Vp_D_BFu0i) C1{ Fp FL Fi:0}



static void Test_Vp_D_BFu0i()
{
  {
    init_simple_test("Vp_D_BFu0i");
    static Vp_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_D_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_D_BFu0i(Test_Vp_D_BFu0i, "Vp_D_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_D_BFu0ll  {
  void *v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Vp_D_BFu0ll) C1{ Fp FL FL:0}



static void Test_Vp_D_BFu0ll()
{
  {
    init_simple_test("Vp_D_BFu0ll");
    static Vp_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_D_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_D_BFu0ll(Test_Vp_D_BFu0ll, "Vp_D_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_D_BFu0s  {
  void *v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Vp_D_BFu0s) C1{ Fp FL Fs:0}



static void Test_Vp_D_BFu0s()
{
  {
    init_simple_test("Vp_D_BFu0s");
    static Vp_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_D_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_D_BFu0s(Test_Vp_D_BFu0s, "Vp_D_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_F_BFu0c  {
  void *v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Vp_F_BFu0c) C1{ Fp Fi Fc:0}



static void Test_Vp_F_BFu0c()
{
  {
    init_simple_test("Vp_F_BFu0c");
    static Vp_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_F_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_F_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_F_BFu0c(Test_Vp_F_BFu0c, "Vp_F_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_F_BFu0i  {
  void *v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Vp_F_BFu0i) C1{ Fp Fi Fi:0}



static void Test_Vp_F_BFu0i()
{
  {
    init_simple_test("Vp_F_BFu0i");
    static Vp_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_F_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_F_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_F_BFu0i(Test_Vp_F_BFu0i, "Vp_F_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_F_BFu0ll  {
  void *v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Vp_F_BFu0ll) C1{ Fp Fi FL:0}



static void Test_Vp_F_BFu0ll()
{
  {
    init_simple_test("Vp_F_BFu0ll");
    static Vp_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_F_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_F_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_F_BFu0ll(Test_Vp_F_BFu0ll, "Vp_F_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_F_BFu0s  {
  void *v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Vp_F_BFu0s) C1{ Fp Fi Fs:0}



static void Test_Vp_F_BFu0s()
{
  {
    init_simple_test("Vp_F_BFu0s");
    static Vp_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_F_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_F_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_F_BFu0s(Test_Vp_F_BFu0s, "Vp_F_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_I_BFu0c  {
  void *v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Vp_I_BFu0c) C1{ Fp Fi Fc:0}



static void Test_Vp_I_BFu0c()
{
  {
    init_simple_test("Vp_I_BFu0c");
    static Vp_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_I_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_I_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_I_BFu0c(Test_Vp_I_BFu0c, "Vp_I_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_I_BFu0i  {
  void *v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Vp_I_BFu0i) C1{ Fp Fi Fi:0}



static void Test_Vp_I_BFu0i()
{
  {
    init_simple_test("Vp_I_BFu0i");
    static Vp_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_I_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_I_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_I_BFu0i(Test_Vp_I_BFu0i, "Vp_I_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_I_BFu0ll  {
  void *v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Vp_I_BFu0ll) C1{ Fp Fi FL:0}



static void Test_Vp_I_BFu0ll()
{
  {
    init_simple_test("Vp_I_BFu0ll");
    static Vp_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_I_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_I_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_I_BFu0ll(Test_Vp_I_BFu0ll, "Vp_I_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_I_BFu0s  {
  void *v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Vp_I_BFu0s) C1{ Fp Fi Fs:0}



static void Test_Vp_I_BFu0s()
{
  {
    init_simple_test("Vp_I_BFu0s");
    static Vp_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_I_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_I_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_I_BFu0s(Test_Vp_I_BFu0s, "Vp_I_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ip_BFu0c  {
  void *v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Vp_Ip_BFu0c) C1{ Fp[2] Fc:0}



static void Test_Vp_Ip_BFu0c()
{
  {
    init_simple_test("Vp_Ip_BFu0c");
    static Vp_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ip_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_Ip_BFu0c(Test_Vp_Ip_BFu0c, "Vp_Ip_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ip_BFu0i  {
  void *v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Vp_Ip_BFu0i) C1{ Fp[2] Fi:0}



static void Test_Vp_Ip_BFu0i()
{
  {
    init_simple_test("Vp_Ip_BFu0i");
    static Vp_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ip_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_Ip_BFu0i(Test_Vp_Ip_BFu0i, "Vp_Ip_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ip_BFu0ll  {
  void *v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Vp_Ip_BFu0ll) C1{ Fp[2] FL:0}



static void Test_Vp_Ip_BFu0ll()
{
  {
    init_simple_test("Vp_Ip_BFu0ll");
    static Vp_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ip_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_Ip_BFu0ll(Test_Vp_Ip_BFu0ll, "Vp_Ip_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ip_BFu0s  {
  void *v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Vp_Ip_BFu0s) C1{ Fp[2] Fs:0}



static void Test_Vp_Ip_BFu0s()
{
  {
    init_simple_test("Vp_Ip_BFu0s");
    static Vp_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ip_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_Ip_BFu0s(Test_Vp_Ip_BFu0s, "Vp_Ip_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_L_BFu0c  {
  void *v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Vp_L_BFu0c) C1{ Fp FL Fc:0}



static void Test_Vp_L_BFu0c()
{
  {
    init_simple_test("Vp_L_BFu0c");
    static Vp_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_L_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_L_BFu0c(Test_Vp_L_BFu0c, "Vp_L_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_L_BFu0i  {
  void *v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Vp_L_BFu0i) C1{ Fp FL Fi:0}



static void Test_Vp_L_BFu0i()
{
  {
    init_simple_test("Vp_L_BFu0i");
    static Vp_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_L_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_L_BFu0i(Test_Vp_L_BFu0i, "Vp_L_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_L_BFu0ll  {
  void *v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Vp_L_BFu0ll) C1{ Fp FL FL:0}



static void Test_Vp_L_BFu0ll()
{
  {
    init_simple_test("Vp_L_BFu0ll");
    static Vp_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_L_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_L_BFu0ll(Test_Vp_L_BFu0ll, "Vp_L_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_L_BFu0s  {
  void *v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Vp_L_BFu0s) C1{ Fp FL Fs:0}



static void Test_Vp_L_BFu0s()
{
  {
    init_simple_test("Vp_L_BFu0s");
    static Vp_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_L_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_L_BFu0s(Test_Vp_L_BFu0s, "Vp_L_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_S_BFu0c  {
  void *v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Vp_S_BFu0c) C1{ Fp Fs Fc:0}



static void Test_Vp_S_BFu0c()
{
  {
    init_simple_test("Vp_S_BFu0c");
    static Vp_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_S_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_S_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_S_BFu0c(Test_Vp_S_BFu0c, "Vp_S_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_S_BFu0i  {
  void *v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Vp_S_BFu0i) C1{ Fp Fs Fi:0}



static void Test_Vp_S_BFu0i()
{
  {
    init_simple_test("Vp_S_BFu0i");
    static Vp_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_S_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_S_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_S_BFu0i(Test_Vp_S_BFu0i, "Vp_S_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_S_BFu0ll  {
  void *v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Vp_S_BFu0ll) C1{ Fp Fs FL:0}



static void Test_Vp_S_BFu0ll()
{
  {
    init_simple_test("Vp_S_BFu0ll");
    static Vp_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_S_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_S_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_S_BFu0ll(Test_Vp_S_BFu0ll, "Vp_S_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_S_BFu0s  {
  void *v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Vp_S_BFu0s) C1{ Fp Fs Fs:0}



static void Test_Vp_S_BFu0s()
{
  {
    init_simple_test("Vp_S_BFu0s");
    static Vp_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_S_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_S_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_S_BFu0s(Test_Vp_S_BFu0s, "Vp_S_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Uc_BFu0c  {
  void *v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Vp_Uc_BFu0c) C1{ Fp Fc Fc:0}



static void Test_Vp_Uc_BFu0c()
{
  {
    init_simple_test("Vp_Uc_BFu0c");
    static Vp_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Uc_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Uc_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_Uc_BFu0c(Test_Vp_Uc_BFu0c, "Vp_Uc_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Uc_BFu0i  {
  void *v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Vp_Uc_BFu0i) C1{ Fp Fc Fi:0}



static void Test_Vp_Uc_BFu0i()
{
  {
    init_simple_test("Vp_Uc_BFu0i");
    static Vp_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Uc_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Uc_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_Uc_BFu0i(Test_Vp_Uc_BFu0i, "Vp_Uc_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Uc_BFu0ll  {
  void *v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Vp_Uc_BFu0ll) C1{ Fp Fc FL:0}



static void Test_Vp_Uc_BFu0ll()
{
  {
    init_simple_test("Vp_Uc_BFu0ll");
    static Vp_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Uc_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_Uc_BFu0ll(Test_Vp_Uc_BFu0ll, "Vp_Uc_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Uc_BFu0s  {
  void *v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Vp_Uc_BFu0s) C1{ Fp Fc Fs:0}



static void Test_Vp_Uc_BFu0s()
{
  {
    init_simple_test("Vp_Uc_BFu0s");
    static Vp_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Uc_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Uc_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_Uc_BFu0s(Test_Vp_Uc_BFu0s, "Vp_Uc_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ui_BFu0c  {
  void *v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Vp_Ui_BFu0c) C1{ Fp Fi Fc:0}



static void Test_Vp_Ui_BFu0c()
{
  {
    init_simple_test("Vp_Ui_BFu0c");
    static Vp_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Ui_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ui_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_Ui_BFu0c(Test_Vp_Ui_BFu0c, "Vp_Ui_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ui_BFu0i  {
  void *v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Vp_Ui_BFu0i) C1{ Fp Fi Fi:0}



static void Test_Vp_Ui_BFu0i()
{
  {
    init_simple_test("Vp_Ui_BFu0i");
    static Vp_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Ui_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ui_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_Ui_BFu0i(Test_Vp_Ui_BFu0i, "Vp_Ui_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ui_BFu0ll  {
  void *v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Vp_Ui_BFu0ll) C1{ Fp Fi FL:0}



static void Test_Vp_Ui_BFu0ll()
{
  {
    init_simple_test("Vp_Ui_BFu0ll");
    static Vp_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ui_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_Ui_BFu0ll(Test_Vp_Ui_BFu0ll, "Vp_Ui_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ui_BFu0s  {
  void *v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Vp_Ui_BFu0s) C1{ Fp Fi Fs:0}



static void Test_Vp_Ui_BFu0s()
{
  {
    init_simple_test("Vp_Ui_BFu0s");
    static Vp_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Ui_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ui_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_Ui_BFu0s(Test_Vp_Ui_BFu0s, "Vp_Ui_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ul_BFu0c  {
  void *v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Vp_Ul_BFu0c) C1{ Fp FL Fc:0}



static void Test_Vp_Ul_BFu0c()
{
  {
    init_simple_test("Vp_Ul_BFu0c");
    static Vp_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ul_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_Ul_BFu0c(Test_Vp_Ul_BFu0c, "Vp_Ul_BFu0c", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ul_BFu0i  {
  void *v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Vp_Ul_BFu0i) C1{ Fp FL Fi:0}



static void Test_Vp_Ul_BFu0i()
{
  {
    init_simple_test("Vp_Ul_BFu0i");
    static Vp_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ul_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_Ul_BFu0i(Test_Vp_Ul_BFu0i, "Vp_Ul_BFu0i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ul_BFu0ll  {
  void *v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Vp_Ul_BFu0ll) C1{ Fp FL FL:0}



static void Test_Vp_Ul_BFu0ll()
{
  {
    init_simple_test("Vp_Ul_BFu0ll");
    static Vp_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ul_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_Ul_BFu0ll(Test_Vp_Ul_BFu0ll, "Vp_Ul_BFu0ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Ul_BFu0s  {
  void *v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Vp_Ul_BFu0s) C1{ Fp FL Fs:0}



static void Test_Vp_Ul_BFu0s()
{
  {
    init_simple_test("Vp_Ul_BFu0s");
    static Vp_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ul_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_Ul_BFu0s(Test_Vp_Ul_BFu0s, "Vp_Ul_BFu0s", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Us_BFu0c  {
  void *v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Vp_Us_BFu0c) C1{ Fp Fs Fc:0}



static void Test_Vp_Us_BFu0c()
{
  {
    init_simple_test("Vp_Us_BFu0c");
    static Vp_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Us_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Us_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_Us_BFu0c(Test_Vp_Us_BFu0c, "Vp_Us_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Us_BFu0i  {
  void *v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Vp_Us_BFu0i) C1{ Fp Fs Fi:0}



static void Test_Vp_Us_BFu0i()
{
  {
    init_simple_test("Vp_Us_BFu0i");
    static Vp_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Us_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Us_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_Us_BFu0i(Test_Vp_Us_BFu0i, "Vp_Us_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Us_BFu0ll  {
  void *v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Vp_Us_BFu0ll) C1{ Fp Fs FL:0}



static void Test_Vp_Us_BFu0ll()
{
  {
    init_simple_test("Vp_Us_BFu0ll");
    static Vp_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Us_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Us_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_Us_BFu0ll(Test_Vp_Us_BFu0ll, "Vp_Us_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Us_BFu0s  {
  void *v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Vp_Us_BFu0s) C1{ Fp Fs Fs:0}



static void Test_Vp_Us_BFu0s()
{
  {
    init_simple_test("Vp_Us_BFu0s");
    static Vp_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Us_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Us_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_Us_BFu0s(Test_Vp_Us_BFu0s, "Vp_Us_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Vp_BFu0c  {
  void *v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Vp_Vp_BFu0c) C1{ Fp[2] Fc:0}



static void Test_Vp_Vp_BFu0c()
{
  {
    init_simple_test("Vp_Vp_BFu0c");
    static Vp_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Vp_BFu0c.v2");
  }
}
static Arrange_To_Call_Me vVp_Vp_BFu0c(Test_Vp_Vp_BFu0c, "Vp_Vp_BFu0c", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Vp_BFu0i  {
  void *v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Vp_Vp_BFu0i) C1{ Fp[2] Fi:0}



static void Test_Vp_Vp_BFu0i()
{
  {
    init_simple_test("Vp_Vp_BFu0i");
    static Vp_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Vp_BFu0i.v2");
  }
}
static Arrange_To_Call_Me vVp_Vp_BFu0i(Test_Vp_Vp_BFu0i, "Vp_Vp_BFu0i", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Vp_BFu0ll  {
  void *v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Vp_Vp_BFu0ll) C1{ Fp[2] FL:0}



static void Test_Vp_Vp_BFu0ll()
{
  {
    init_simple_test("Vp_Vp_BFu0ll");
    static Vp_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Vp_BFu0ll.v2");
  }
}
static Arrange_To_Call_Me vVp_Vp_BFu0ll(Test_Vp_Vp_BFu0ll, "Vp_Vp_BFu0ll", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  Vp_Vp_BFu0s  {
  void *v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Vp_Vp_BFu0s) C1{ Fp[2] Fs:0}



static void Test_Vp_Vp_BFu0s()
{
  {
    init_simple_test("Vp_Vp_BFu0s");
    static Vp_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Vp_BFu0s.v2");
  }
}
static Arrange_To_Call_Me vVp_Vp_BFu0s(Test_Vp_Vp_BFu0s, "Vp_Vp_BFu0s", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

