// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"
#ifdef __cplusplus

struct  B  {
  bool v1;
};
//SIG(1 B) C1{ Fc}



static void Test_B()
{
  {
    init_simple_test("B");
    B lv;
    check2(sizeof(lv), 1, "sizeof(B)");
    check2(__alignof__(lv), 1, "__alignof__(B)");
    check_field_offset(lv, v1, 0, "B.v1");
  }
}
static Arrange_To_Call_Me vB(Test_B, "B", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B  {
  bool v1;
  bool v2;
};
//SIG(1 B_B) C1{ Fc[2]}



static void Test_B_B()
{
  {
    init_simple_test("B_B");
    B_B lv;
    check2(sizeof(lv), 2, "sizeof(B_B)");
    check2(__alignof__(lv), 1, "__alignof__(B_B)");
    check_field_offset(lv, v1, 0, "B_B.v1");
    check_field_offset(lv, v2, 1, "B_B.v2");
  }
}
static Arrange_To_Call_Me vB_B(Test_B_B, "B_B", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_B  {
  bool v1;
  bool v2;
  bool v3;
};
//SIG(1 B_B_B) C1{ Fc[3]}



static void Test_B_B_B()
{
  {
    init_simple_test("B_B_B");
    B_B_B lv;
    check2(sizeof(lv), 3, "sizeof(B_B_B)");
    check2(__alignof__(lv), 1, "__alignof__(B_B_B)");
    check_field_offset(lv, v1, 0, "B_B_B.v1");
    check_field_offset(lv, v2, 1, "B_B_B.v2");
    check_field_offset(lv, v3, 2, "B_B_B.v3");
  }
}
static Arrange_To_Call_Me vB_B_B(Test_B_B_B, "B_B_B", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu15i  {
  bool v1;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 B_B_BFu15i) C1{ Fc[2] Fi:15}



static void Test_B_B_BFu15i()
{
  {
    init_simple_test("B_B_BFu15i");
    static B_B_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_BFu15i)");
    check_field_offset(lv, v1, 0, "B_B_BFu15i.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_B_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_B_BFu15i");
  }
}
static Arrange_To_Call_Me vB_B_BFu15i(Test_B_B_BFu15i, "B_B_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu15ll  {
  bool v1;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 B_B_BFu15ll) C1{ Fc[2] FL:15}



static void Test_B_B_BFu15ll()
{
  {
    init_simple_test("B_B_BFu15ll");
    static B_B_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_B_BFu15ll.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_B_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_B_BFu15ll(Test_B_B_BFu15ll, "B_B_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu15s  {
  bool v1;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 B_B_BFu15s) C1{ Fc[2] Fs:15}



static void Test_B_B_BFu15s()
{
  {
    init_simple_test("B_B_BFu15s");
    static B_B_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_B_BFu15s)");
    check_field_offset(lv, v1, 0, "B_B_BFu15s.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_B_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_B_BFu15s");
  }
}
static Arrange_To_Call_Me vB_B_BFu15s(Test_B_B_BFu15s, "B_B_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu16i  {
  bool v1;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 B_B_BFu16i) C1{ Fc[2] Fi:16}



static void Test_B_B_BFu16i()
{
  {
    init_simple_test("B_B_BFu16i");
    static B_B_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_BFu16i)");
    check_field_offset(lv, v1, 0, "B_B_BFu16i.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_B_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_B_BFu16i");
  }
}
static Arrange_To_Call_Me vB_B_BFu16i(Test_B_B_BFu16i, "B_B_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu16ll  {
  bool v1;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 B_B_BFu16ll) C1{ Fc[2] FL:16}



static void Test_B_B_BFu16ll()
{
  {
    init_simple_test("B_B_BFu16ll");
    static B_B_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_B_BFu16ll.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_B_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_B_BFu16ll(Test_B_B_BFu16ll, "B_B_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu16s  {
  bool v1;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 B_B_BFu16s) C1{ Fc[2] Fs:16}



static void Test_B_B_BFu16s()
{
  {
    init_simple_test("B_B_BFu16s");
    static B_B_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_B_BFu16s)");
    check_field_offset(lv, v1, 0, "B_B_BFu16s.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_B_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_B_BFu16s");
  }
}
static Arrange_To_Call_Me vB_B_BFu16s(Test_B_B_BFu16s, "B_B_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu17i  {
  bool v1;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 B_B_BFu17i) C1{ Fc[2] Fi:17}



static void Test_B_B_BFu17i()
{
  {
    init_simple_test("B_B_BFu17i");
    static B_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_BFu17i)");
    check_field_offset(lv, v1, 0, "B_B_BFu17i.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_B_BFu17i");
  }
}
static Arrange_To_Call_Me vB_B_BFu17i(Test_B_B_BFu17i, "B_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu17ll  {
  bool v1;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 B_B_BFu17ll) C1{ Fc[2] FL:17}



static void Test_B_B_BFu17ll()
{
  {
    init_simple_test("B_B_BFu17ll");
    static B_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_B_BFu17ll.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "B_B_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "B_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_B_BFu17ll(Test_B_B_BFu17ll, "B_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu1c  {
  bool v1;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 B_B_BFu1c) C1{ Fc[2] Fc:1}



static void Test_B_B_BFu1c()
{
  {
    init_simple_test("B_B_BFu1c");
    static B_B_BFu1c lv;
    check2(sizeof(lv), 3, "sizeof(B_B_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(B_B_BFu1c)");
    check_field_offset(lv, v1, 0, "B_B_BFu1c.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_B_BFu1c");
  }
}
static Arrange_To_Call_Me vB_B_BFu1c(Test_B_B_BFu1c, "B_B_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu1i  {
  bool v1;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 B_B_BFu1i) C1{ Fc[2] Fi:1}



static void Test_B_B_BFu1i()
{
  {
    init_simple_test("B_B_BFu1i");
    static B_B_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_BFu1i)");
    check_field_offset(lv, v1, 0, "B_B_BFu1i.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_B_BFu1i");
  }
}
static Arrange_To_Call_Me vB_B_BFu1i(Test_B_B_BFu1i, "B_B_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu1ll  {
  bool v1;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 B_B_BFu1ll) C1{ Fc[2] FL:1}



static void Test_B_B_BFu1ll()
{
  {
    init_simple_test("B_B_BFu1ll");
    static B_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_B_BFu1ll.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_B_BFu1ll(Test_B_B_BFu1ll, "B_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu1s  {
  bool v1;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 B_B_BFu1s) C1{ Fc[2] Fs:1}



static void Test_B_B_BFu1s()
{
  {
    init_simple_test("B_B_BFu1s");
    static B_B_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_B_BFu1s)");
    check_field_offset(lv, v1, 0, "B_B_BFu1s.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_B_BFu1s");
  }
}
static Arrange_To_Call_Me vB_B_BFu1s(Test_B_B_BFu1s, "B_B_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu31i  {
  bool v1;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 B_B_BFu31i) C1{ Fc[2] Fi:31}



static void Test_B_B_BFu31i()
{
  {
    init_simple_test("B_B_BFu31i");
    static B_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_BFu31i)");
    check_field_offset(lv, v1, 0, "B_B_BFu31i.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_B_BFu31i");
  }
}
static Arrange_To_Call_Me vB_B_BFu31i(Test_B_B_BFu31i, "B_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu31ll  {
  bool v1;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 B_B_BFu31ll) C1{ Fc[2] FL:31}



static void Test_B_B_BFu31ll()
{
  {
    init_simple_test("B_B_BFu31ll");
    static B_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_B_BFu31ll.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "B_B_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "B_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_B_BFu31ll(Test_B_B_BFu31ll, "B_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu32i  {
  bool v1;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 B_B_BFu32i) C1{ Fc[2] Fi:32}



static void Test_B_B_BFu32i()
{
  {
    init_simple_test("B_B_BFu32i");
    static B_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_BFu32i)");
    check_field_offset(lv, v1, 0, "B_B_BFu32i.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_B_BFu32i");
  }
}
static Arrange_To_Call_Me vB_B_BFu32i(Test_B_B_BFu32i, "B_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu32ll  {
  bool v1;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 B_B_BFu32ll) C1{ Fc[2] FL:32}



static void Test_B_B_BFu32ll()
{
  {
    init_simple_test("B_B_BFu32ll");
    static B_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_B_BFu32ll.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "B_B_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "B_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_B_BFu32ll(Test_B_B_BFu32ll, "B_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu33  {
  bool v1;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 B_B_BFu33) C1{ Fc[2] FL:33}



static void Test_B_B_BFu33()
{
  {
    init_simple_test("B_B_BFu33");
    static B_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu33)");
    check_field_offset(lv, v1, 0, "B_B_BFu33.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "B_B_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "B_B_BFu33");
  }
}
static Arrange_To_Call_Me vB_B_BFu33(Test_B_B_BFu33, "B_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu7c  {
  bool v1;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 B_B_BFu7c) C1{ Fc[2] Fc:7}



static void Test_B_B_BFu7c()
{
  {
    init_simple_test("B_B_BFu7c");
    static B_B_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(B_B_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(B_B_BFu7c)");
    check_field_offset(lv, v1, 0, "B_B_BFu7c.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_B_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_B_BFu7c");
  }
}
static Arrange_To_Call_Me vB_B_BFu7c(Test_B_B_BFu7c, "B_B_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu7i  {
  bool v1;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 B_B_BFu7i) C1{ Fc[2] Fi:7}



static void Test_B_B_BFu7i()
{
  {
    init_simple_test("B_B_BFu7i");
    static B_B_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_BFu7i)");
    check_field_offset(lv, v1, 0, "B_B_BFu7i.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_B_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_B_BFu7i");
  }
}
static Arrange_To_Call_Me vB_B_BFu7i(Test_B_B_BFu7i, "B_B_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu7ll  {
  bool v1;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 B_B_BFu7ll) C1{ Fc[2] FL:7}



static void Test_B_B_BFu7ll()
{
  {
    init_simple_test("B_B_BFu7ll");
    static B_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_B_BFu7ll.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_B_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_B_BFu7ll(Test_B_B_BFu7ll, "B_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu7s  {
  bool v1;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 B_B_BFu7s) C1{ Fc[2] Fs:7}



static void Test_B_B_BFu7s()
{
  {
    init_simple_test("B_B_BFu7s");
    static B_B_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_B_BFu7s)");
    check_field_offset(lv, v1, 0, "B_B_BFu7s.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_B_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_B_BFu7s");
  }
}
static Arrange_To_Call_Me vB_B_BFu7s(Test_B_B_BFu7s, "B_B_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu8c  {
  bool v1;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 B_B_BFu8c) C1{ Fc[2] Fc:8}



static void Test_B_B_BFu8c()
{
  {
    init_simple_test("B_B_BFu8c");
    static B_B_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(B_B_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(B_B_BFu8c)");
    check_field_offset(lv, v1, 0, "B_B_BFu8c.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_B_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_B_BFu8c");
  }
}
static Arrange_To_Call_Me vB_B_BFu8c(Test_B_B_BFu8c, "B_B_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu8i  {
  bool v1;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 B_B_BFu8i) C1{ Fc[2] Fi:8}



static void Test_B_B_BFu8i()
{
  {
    init_simple_test("B_B_BFu8i");
    static B_B_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_BFu8i)");
    check_field_offset(lv, v1, 0, "B_B_BFu8i.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_B_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_B_BFu8i");
  }
}
static Arrange_To_Call_Me vB_B_BFu8i(Test_B_B_BFu8i, "B_B_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu8ll  {
  bool v1;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 B_B_BFu8ll) C1{ Fc[2] FL:8}



static void Test_B_B_BFu8ll()
{
  {
    init_simple_test("B_B_BFu8ll");
    static B_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_B_BFu8ll.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_B_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_B_BFu8ll(Test_B_B_BFu8ll, "B_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu8s  {
  bool v1;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 B_B_BFu8s) C1{ Fc[2] Fs:8}



static void Test_B_B_BFu8s()
{
  {
    init_simple_test("B_B_BFu8s");
    static B_B_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_B_BFu8s)");
    check_field_offset(lv, v1, 0, "B_B_BFu8s.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_B_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_B_BFu8s");
  }
}
static Arrange_To_Call_Me vB_B_BFu8s(Test_B_B_BFu8s, "B_B_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu9i  {
  bool v1;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 B_B_BFu9i) C1{ Fc[2] Fi:9}



static void Test_B_B_BFu9i()
{
  {
    init_simple_test("B_B_BFu9i");
    static B_B_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_BFu9i)");
    check_field_offset(lv, v1, 0, "B_B_BFu9i.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_B_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_B_BFu9i");
  }
}
static Arrange_To_Call_Me vB_B_BFu9i(Test_B_B_BFu9i, "B_B_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu9ll  {
  bool v1;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 B_B_BFu9ll) C1{ Fc[2] FL:9}



static void Test_B_B_BFu9ll()
{
  {
    init_simple_test("B_B_BFu9ll");
    static B_B_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_B_BFu9ll.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_B_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_B_BFu9ll(Test_B_B_BFu9ll, "B_B_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_BFu9s  {
  bool v1;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 B_B_BFu9s) C1{ Fc[2] Fs:9}



static void Test_B_B_BFu9s()
{
  {
    init_simple_test("B_B_BFu9s");
    static B_B_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_B_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_B_BFu9s)");
    check_field_offset(lv, v1, 0, "B_B_BFu9s.v1");
    check_field_offset(lv, v2, 1, "B_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_B_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_B_BFu9s");
  }
}
static Arrange_To_Call_Me vB_B_BFu9s(Test_B_B_BFu9s, "B_B_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_C  {
  bool v1;
  bool v2;
  char v3;
};
//SIG(1 B_B_C) C1{ Fc[3]}



static void Test_B_B_C()
{
  {
    init_simple_test("B_B_C");
    B_B_C lv;
    check2(sizeof(lv), 3, "sizeof(B_B_C)");
    check2(__alignof__(lv), 1, "__alignof__(B_B_C)");
    check_field_offset(lv, v1, 0, "B_B_C.v1");
    check_field_offset(lv, v2, 1, "B_B_C.v2");
    check_field_offset(lv, v3, 2, "B_B_C.v3");
  }
}
static Arrange_To_Call_Me vB_B_C(Test_B_B_C, "B_B_C", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_D  {
  bool v1;
  bool v2;
  double v3;
};
//SIG(1 B_B_D) C1{ Fc[2] FL}



static void Test_B_B_D()
{
  {
    init_simple_test("B_B_D");
    B_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_D)");
    check_field_offset(lv, v1, 0, "B_B_D.v1");
    check_field_offset(lv, v2, 1, "B_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_B_D.v3");
  }
}
static Arrange_To_Call_Me vB_B_D(Test_B_B_D, "B_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_F  {
  bool v1;
  bool v2;
  float v3;
};
//SIG(1 B_B_F) C1{ Fc[2] Fi}



static void Test_B_B_F()
{
  {
    init_simple_test("B_B_F");
    B_B_F lv;
    check2(sizeof(lv), 8, "sizeof(B_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_F)");
    check_field_offset(lv, v1, 0, "B_B_F.v1");
    check_field_offset(lv, v2, 1, "B_B_F.v2");
    check_field_offset(lv, v3, 4, "B_B_F.v3");
  }
}
static Arrange_To_Call_Me vB_B_F(Test_B_B_F, "B_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_I  {
  bool v1;
  bool v2;
  int v3;
};
//SIG(1 B_B_I) C1{ Fc[2] Fi}



static void Test_B_B_I()
{
  {
    init_simple_test("B_B_I");
    B_B_I lv;
    check2(sizeof(lv), 8, "sizeof(B_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_I)");
    check_field_offset(lv, v1, 0, "B_B_I.v1");
    check_field_offset(lv, v2, 1, "B_B_I.v2");
    check_field_offset(lv, v3, 4, "B_B_I.v3");
  }
}
static Arrange_To_Call_Me vB_B_I(Test_B_B_I, "B_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_Ip  {
  bool v1;
  bool v2;
  int *v3;
};
//SIG(1 B_B_Ip) C1{ Fc[2] Fp}



static void Test_B_B_Ip()
{
  {
    init_simple_test("B_B_Ip");
    B_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_Ip)");
    check_field_offset(lv, v1, 0, "B_B_Ip.v1");
    check_field_offset(lv, v2, 1, "B_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_B_Ip(Test_B_B_Ip, "B_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_L  {
  bool v1;
  bool v2;
  __tsi64 v3;
};
//SIG(1 B_B_L) C1{ Fc[2] FL}



static void Test_B_B_L()
{
  {
    init_simple_test("B_B_L");
    B_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_L)");
    check_field_offset(lv, v1, 0, "B_B_L.v1");
    check_field_offset(lv, v2, 1, "B_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_B_L.v3");
  }
}
static Arrange_To_Call_Me vB_B_L(Test_B_B_L, "B_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_S  {
  bool v1;
  bool v2;
  short v3;
};
//SIG(1 B_B_S) C1{ Fc[2] Fs}



static void Test_B_B_S()
{
  {
    init_simple_test("B_B_S");
    B_B_S lv;
    check2(sizeof(lv), 4, "sizeof(B_B_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_B_S)");
    check_field_offset(lv, v1, 0, "B_B_S.v1");
    check_field_offset(lv, v2, 1, "B_B_S.v2");
    check_field_offset(lv, v3, 2, "B_B_S.v3");
  }
}
static Arrange_To_Call_Me vB_B_S(Test_B_B_S, "B_B_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_Uc  {
  bool v1;
  bool v2;
  unsigned char v3;
};
//SIG(1 B_B_Uc) C1{ Fc[3]}



static void Test_B_B_Uc()
{
  {
    init_simple_test("B_B_Uc");
    B_B_Uc lv;
    check2(sizeof(lv), 3, "sizeof(B_B_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(B_B_Uc)");
    check_field_offset(lv, v1, 0, "B_B_Uc.v1");
    check_field_offset(lv, v2, 1, "B_B_Uc.v2");
    check_field_offset(lv, v3, 2, "B_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_B_Uc(Test_B_B_Uc, "B_B_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_Ui  {
  bool v1;
  bool v2;
  unsigned int v3;
};
//SIG(1 B_B_Ui) C1{ Fc[2] Fi}



static void Test_B_B_Ui()
{
  {
    init_simple_test("B_B_Ui");
    B_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_B_Ui)");
    check_field_offset(lv, v1, 0, "B_B_Ui.v1");
    check_field_offset(lv, v2, 1, "B_B_Ui.v2");
    check_field_offset(lv, v3, 4, "B_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_B_Ui(Test_B_B_Ui, "B_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_Ul  {
  bool v1;
  bool v2;
  __tsu64 v3;
};
//SIG(1 B_B_Ul) C1{ Fc[2] FL}



static void Test_B_B_Ul()
{
  {
    init_simple_test("B_B_Ul");
    B_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_Ul)");
    check_field_offset(lv, v1, 0, "B_B_Ul.v1");
    check_field_offset(lv, v2, 1, "B_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_B_Ul(Test_B_B_Ul, "B_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_Us  {
  bool v1;
  bool v2;
  unsigned short v3;
};
//SIG(1 B_B_Us) C1{ Fc[2] Fs}



static void Test_B_B_Us()
{
  {
    init_simple_test("B_B_Us");
    B_B_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_B_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_B_Us)");
    check_field_offset(lv, v1, 0, "B_B_Us.v1");
    check_field_offset(lv, v2, 1, "B_B_Us.v2");
    check_field_offset(lv, v3, 2, "B_B_Us.v3");
  }
}
static Arrange_To_Call_Me vB_B_Us(Test_B_B_Us, "B_B_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_B_Vp  {
  bool v1;
  bool v2;
  void *v3;
};
//SIG(1 B_B_Vp) C1{ Fc[2] Fp}



static void Test_B_B_Vp()
{
  {
    init_simple_test("B_B_Vp");
    B_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_B_Vp)");
    check_field_offset(lv, v1, 0, "B_B_Vp.v1");
    check_field_offset(lv, v2, 1, "B_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_B_Vp(Test_B_B_Vp, "B_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i  {
  bool v1;
  unsigned int v2:15;
};
//SIG(1 B_BFu15i) C1{ Fc Fi:15}



static void Test_B_BFu15i()
{
  {
    init_simple_test("B_BFu15i");
    static B_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu15i(Test_B_BFu15i, "B_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_B  {
  bool v1;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 B_BFu15i_B) C1{ Fc Fi:15 Fc}



static void Test_B_BFu15i_B()
{
  {
    init_simple_test("B_BFu15i_B");
    static B_BFu15i_B lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_B)");
    check_field_offset(lv, v1, 0, "B_BFu15i_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_B");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_B");
    check_field_offset(lv, v3, 3, "B_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_B(Test_B_BFu15i_B, "B_BFu15i_B", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu15i  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 B_BFu15i_BFu15i) C1{ Fc Fi:15 Fi:15}



static void Test_B_BFu15i_BFu15i()
{
  {
    init_simple_test("B_BFu15i_BFu15i");
    static B_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu15i(Test_B_BFu15i_BFu15i, "B_BFu15i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu15ll  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 B_BFu15i_BFu15ll) C1{ Fc Fi:15 FL:15}



static void Test_B_BFu15i_BFu15ll()
{
  {
    init_simple_test("B_BFu15i_BFu15ll");
    static B_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "B_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "B_BFu15i_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu15ll(Test_B_BFu15i_BFu15ll, "B_BFu15i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu15s  {
  bool v1;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 B_BFu15i_BFu15s) C1{ Fc Fi:15 Fs:15}



static void Test_B_BFu15i_BFu15s()
{
  {
    init_simple_test("B_BFu15i_BFu15s");
    static B_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu15s(Test_B_BFu15i_BFu15s, "B_BFu15i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu16i  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 B_BFu15i_BFu16i) C1{ Fc Fi:15 Fi:16}



static void Test_B_BFu15i_BFu16i()
{
  {
    init_simple_test("B_BFu15i_BFu16i");
    static B_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu15i_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu16i(Test_B_BFu15i_BFu16i, "B_BFu15i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu16ll  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 B_BFu15i_BFu16ll) C1{ Fc Fi:15 FL:16}



static void Test_B_BFu15i_BFu16ll()
{
  {
    init_simple_test("B_BFu15i_BFu16ll");
    static B_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "B_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "B_BFu15i_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu16ll(Test_B_BFu15i_BFu16ll, "B_BFu15i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu16s  {
  bool v1;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 B_BFu15i_BFu16s) C1{ Fc Fi:15 Fs:16}



static void Test_B_BFu15i_BFu16s()
{
  {
    init_simple_test("B_BFu15i_BFu16s");
    static B_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu15i_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu16s(Test_B_BFu15i_BFu16s, "B_BFu15i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu17i  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 B_BFu15i_BFu17i) C1{ Fc Fi:15 Fi:17}



static void Test_B_BFu15i_BFu17i()
{
  {
    init_simple_test("B_BFu15i_BFu17i");
    static B_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu15i_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu17i(Test_B_BFu15i_BFu17i, "B_BFu15i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu17ll  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 B_BFu15i_BFu17ll) C1{ Fc Fi:15 FL:17}



static void Test_B_BFu15i_BFu17ll()
{
  {
    init_simple_test("B_BFu15i_BFu17ll");
    static B_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "B_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "B_BFu15i_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu17ll(Test_B_BFu15i_BFu17ll, "B_BFu15i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu1c  {
  bool v1;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 B_BFu15i_BFu1c) C1{ Fc Fi:15 Fc:1}



static void Test_B_BFu15i_BFu1c()
{
  {
    init_simple_test("B_BFu15i_BFu1c");
    static B_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "B_BFu15i_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu1c(Test_B_BFu15i_BFu1c, "B_BFu15i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu1i  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 B_BFu15i_BFu1i) C1{ Fc Fi:15 Fi:1}



static void Test_B_BFu15i_BFu1i()
{
  {
    init_simple_test("B_BFu15i_BFu1i");
    static B_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "B_BFu15i_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu1i(Test_B_BFu15i_BFu1i, "B_BFu15i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu1ll  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 B_BFu15i_BFu1ll) C1{ Fc Fi:15 FL:1}



static void Test_B_BFu15i_BFu1ll()
{
  {
    init_simple_test("B_BFu15i_BFu1ll");
    static B_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "B_BFu15i_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu1ll(Test_B_BFu15i_BFu1ll, "B_BFu15i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu1s  {
  bool v1;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 B_BFu15i_BFu1s) C1{ Fc Fi:15 Fs:1}



static void Test_B_BFu15i_BFu1s()
{
  {
    init_simple_test("B_BFu15i_BFu1s");
    static B_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "B_BFu15i_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu1s(Test_B_BFu15i_BFu1s, "B_BFu15i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu31i  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 B_BFu15i_BFu31i) C1{ Fc Fi:15 Fi:31}



static void Test_B_BFu15i_BFu31i()
{
  {
    init_simple_test("B_BFu15i_BFu31i");
    static B_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu15i_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu31i(Test_B_BFu15i_BFu31i, "B_BFu15i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu31ll  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 B_BFu15i_BFu31ll) C1{ Fc Fi:15 FL:31}



static void Test_B_BFu15i_BFu31ll()
{
  {
    init_simple_test("B_BFu15i_BFu31ll");
    static B_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "B_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "B_BFu15i_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu31ll(Test_B_BFu15i_BFu31ll, "B_BFu15i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu32i  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 B_BFu15i_BFu32i) C1{ Fc Fi:15 Fi:32}



static void Test_B_BFu15i_BFu32i()
{
  {
    init_simple_test("B_BFu15i_BFu32i");
    static B_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu15i_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu32i(Test_B_BFu15i_BFu32i, "B_BFu15i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu32ll  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 B_BFu15i_BFu32ll) C1{ Fc Fi:15 FL:32}



static void Test_B_BFu15i_BFu32ll()
{
  {
    init_simple_test("B_BFu15i_BFu32ll");
    static B_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "B_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "B_BFu15i_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu32ll(Test_B_BFu15i_BFu32ll, "B_BFu15i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu33  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 B_BFu15i_BFu33) C1{ Fc Fi:15 FL:33}



static void Test_B_BFu15i_BFu33()
{
  {
    init_simple_test("B_BFu15i_BFu33");
    static B_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "B_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "B_BFu15i_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu33(Test_B_BFu15i_BFu33, "B_BFu15i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu7c  {
  bool v1;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 B_BFu15i_BFu7c) C1{ Fc Fi:15 Fc:7}



static void Test_B_BFu15i_BFu7c()
{
  {
    init_simple_test("B_BFu15i_BFu7c");
    static B_BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu15i_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu7c(Test_B_BFu15i_BFu7c, "B_BFu15i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu7i  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 B_BFu15i_BFu7i) C1{ Fc Fi:15 Fi:7}



static void Test_B_BFu15i_BFu7i()
{
  {
    init_simple_test("B_BFu15i_BFu7i");
    static B_BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "B_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "B_BFu15i_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu7i(Test_B_BFu15i_BFu7i, "B_BFu15i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu7ll  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 B_BFu15i_BFu7ll) C1{ Fc Fi:15 FL:7}



static void Test_B_BFu15i_BFu7ll()
{
  {
    init_simple_test("B_BFu15i_BFu7ll");
    static B_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "B_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "B_BFu15i_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu7ll(Test_B_BFu15i_BFu7ll, "B_BFu15i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu7s  {
  bool v1;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 B_BFu15i_BFu7s) C1{ Fc Fi:15 Fs:7}



static void Test_B_BFu15i_BFu7s()
{
  {
    init_simple_test("B_BFu15i_BFu7s");
    static B_BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "B_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "B_BFu15i_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu7s(Test_B_BFu15i_BFu7s, "B_BFu15i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu8c  {
  bool v1;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 B_BFu15i_BFu8c) C1{ Fc Fi:15 Fc:8}



static void Test_B_BFu15i_BFu8c()
{
  {
    init_simple_test("B_BFu15i_BFu8c");
    static B_BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu15i_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu8c(Test_B_BFu15i_BFu8c, "B_BFu15i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu8i  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 B_BFu15i_BFu8i) C1{ Fc Fi:15 Fi:8}



static void Test_B_BFu15i_BFu8i()
{
  {
    init_simple_test("B_BFu15i_BFu8i");
    static B_BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "B_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "B_BFu15i_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu8i(Test_B_BFu15i_BFu8i, "B_BFu15i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu8ll  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 B_BFu15i_BFu8ll) C1{ Fc Fi:15 FL:8}



static void Test_B_BFu15i_BFu8ll()
{
  {
    init_simple_test("B_BFu15i_BFu8ll");
    static B_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "B_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "B_BFu15i_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu8ll(Test_B_BFu15i_BFu8ll, "B_BFu15i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu8s  {
  bool v1;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 B_BFu15i_BFu8s) C1{ Fc Fi:15 Fs:8}



static void Test_B_BFu15i_BFu8s()
{
  {
    init_simple_test("B_BFu15i_BFu8s");
    static B_BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "B_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "B_BFu15i_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu8s(Test_B_BFu15i_BFu8s, "B_BFu15i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu9i  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 B_BFu15i_BFu9i) C1{ Fc Fi:15 Fi:9}



static void Test_B_BFu15i_BFu9i()
{
  {
    init_simple_test("B_BFu15i_BFu9i");
    static B_BFu15i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "B_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "B_BFu15i_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu9i(Test_B_BFu15i_BFu9i, "B_BFu15i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu9ll  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 B_BFu15i_BFu9ll) C1{ Fc Fi:15 FL:9}



static void Test_B_BFu15i_BFu9ll()
{
  {
    init_simple_test("B_BFu15i_BFu9ll");
    static B_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "B_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "B_BFu15i_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu9ll(Test_B_BFu15i_BFu9ll, "B_BFu15i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_BFu9s  {
  bool v1;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 B_BFu15i_BFu9s) C1{ Fc Fi:15 Fs:9}



static void Test_B_BFu15i_BFu9s()
{
  {
    init_simple_test("B_BFu15i_BFu9s");
    static B_BFu15i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu15i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "B_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "B_BFu15i_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu15i_BFu9s(Test_B_BFu15i_BFu9s, "B_BFu15i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_C  {
  bool v1;
  unsigned int v2:15;
  char v3;
};
//SIG(1 B_BFu15i_C) C1{ Fc Fi:15 Fc}



static void Test_B_BFu15i_C()
{
  {
    init_simple_test("B_BFu15i_C");
    static B_BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_C)");
    check_field_offset(lv, v1, 0, "B_BFu15i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_C");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_C");
    check_field_offset(lv, v3, 3, "B_BFu15i_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_C(Test_B_BFu15i_C, "B_BFu15i_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_D  {
  bool v1;
  unsigned int v2:15;
  double v3;
};
//SIG(1 B_BFu15i_D) C1{ Fc Fi:15 FL}



static void Test_B_BFu15i_D()
{
  {
    init_simple_test("B_BFu15i_D");
    static B_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_D)");
    check_field_offset(lv, v1, 0, "B_BFu15i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_D");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15i_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_D(Test_B_BFu15i_D, "B_BFu15i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_F  {
  bool v1;
  unsigned int v2:15;
  float v3;
};
//SIG(1 B_BFu15i_F) C1{ Fc Fi:15 Fi}



static void Test_B_BFu15i_F()
{
  {
    init_simple_test("B_BFu15i_F");
    static B_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_F)");
    check_field_offset(lv, v1, 0, "B_BFu15i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_F");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_F");
    check_field_offset(lv, v3, 4, "B_BFu15i_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_F(Test_B_BFu15i_F, "B_BFu15i_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_I  {
  bool v1;
  unsigned int v2:15;
  int v3;
};
//SIG(1 B_BFu15i_I) C1{ Fc Fi:15 Fi}



static void Test_B_BFu15i_I()
{
  {
    init_simple_test("B_BFu15i_I");
    static B_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_I)");
    check_field_offset(lv, v1, 0, "B_BFu15i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_I");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_I");
    check_field_offset(lv, v3, 4, "B_BFu15i_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_I(Test_B_BFu15i_I, "B_BFu15i_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_Ip  {
  bool v1;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 B_BFu15i_Ip) C1{ Fc Fi:15 Fp}



static void Test_B_BFu15i_Ip()
{
  {
    init_simple_test("B_BFu15i_Ip");
    static B_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu15i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15i_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_Ip(Test_B_BFu15i_Ip, "B_BFu15i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_L  {
  bool v1;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 B_BFu15i_L) C1{ Fc Fi:15 FL}



static void Test_B_BFu15i_L()
{
  {
    init_simple_test("B_BFu15i_L");
    static B_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_L)");
    check_field_offset(lv, v1, 0, "B_BFu15i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_L");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15i_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_L(Test_B_BFu15i_L, "B_BFu15i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_S  {
  bool v1;
  unsigned int v2:15;
  short v3;
};
//SIG(1 B_BFu15i_S) C1{ Fc Fi:15 Fs}



static void Test_B_BFu15i_S()
{
  {
    init_simple_test("B_BFu15i_S");
    static B_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_S)");
    check_field_offset(lv, v1, 0, "B_BFu15i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_S");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_S");
    check_field_offset(lv, v3, 4, "B_BFu15i_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_S(Test_B_BFu15i_S, "B_BFu15i_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_Uc  {
  bool v1;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 B_BFu15i_Uc) C1{ Fc Fi:15 Fc}



static void Test_B_BFu15i_Uc()
{
  {
    init_simple_test("B_BFu15i_Uc");
    static B_BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu15i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_Uc");
    check_field_offset(lv, v3, 3, "B_BFu15i_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_Uc(Test_B_BFu15i_Uc, "B_BFu15i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_Ui  {
  bool v1;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 B_BFu15i_Ui) C1{ Fc Fi:15 Fi}



static void Test_B_BFu15i_Ui()
{
  {
    init_simple_test("B_BFu15i_Ui");
    static B_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu15i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "B_BFu15i_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_Ui(Test_B_BFu15i_Ui, "B_BFu15i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_Ul  {
  bool v1;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 B_BFu15i_Ul) C1{ Fc Fi:15 FL}



static void Test_B_BFu15i_Ul()
{
  {
    init_simple_test("B_BFu15i_Ul");
    static B_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu15i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15i_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_Ul(Test_B_BFu15i_Ul, "B_BFu15i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_Us  {
  bool v1;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 B_BFu15i_Us) C1{ Fc Fi:15 Fs}



static void Test_B_BFu15i_Us()
{
  {
    init_simple_test("B_BFu15i_Us");
    static B_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15i_Us)");
    check_field_offset(lv, v1, 0, "B_BFu15i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_Us");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_Us");
    check_field_offset(lv, v3, 4, "B_BFu15i_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_Us(Test_B_BFu15i_Us, "B_BFu15i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15i_Vp  {
  bool v1;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 B_BFu15i_Vp) C1{ Fc Fi:15 Fp}



static void Test_B_BFu15i_Vp()
{
  {
    init_simple_test("B_BFu15i_Vp");
    static B_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15i_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu15i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15i_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15i_Vp(Test_B_BFu15i_Vp, "B_BFu15i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll  {
  bool v1;
  __tsu64 v2:15;
};
//SIG(1 B_BFu15ll) C1{ Fc FL:15}



static void Test_B_BFu15ll()
{
  {
    init_simple_test("B_BFu15ll");
    static B_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll(Test_B_BFu15ll, "B_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_B  {
  bool v1;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 B_BFu15ll_B) C1{ Fc FL:15 Fc}



static void Test_B_BFu15ll_B()
{
  {
    init_simple_test("B_BFu15ll_B");
    static B_BFu15ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_B)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_B");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_B");
    check_field_offset(lv, v3, 3, "B_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_B(Test_B_BFu15ll_B, "B_BFu15ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu15i  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 B_BFu15ll_BFu15i) C1{ Fc FL:15 Fi:15}



static void Test_B_BFu15ll_BFu15i()
{
  {
    init_simple_test("B_BFu15ll_BFu15i");
    static B_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu15i(Test_B_BFu15ll_BFu15i, "B_BFu15ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu15ll  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 B_BFu15ll_BFu15ll) C1{ Fc FL:15 FL:15}



static void Test_B_BFu15ll_BFu15ll()
{
  {
    init_simple_test("B_BFu15ll_BFu15ll");
    static B_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "B_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu15ll(Test_B_BFu15ll_BFu15ll, "B_BFu15ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu15s  {
  bool v1;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 B_BFu15ll_BFu15s) C1{ Fc FL:15 Fs:15}



static void Test_B_BFu15ll_BFu15s()
{
  {
    init_simple_test("B_BFu15ll_BFu15s");
    static B_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu15s(Test_B_BFu15ll_BFu15s, "B_BFu15ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu16i  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 B_BFu15ll_BFu16i) C1{ Fc FL:15 Fi:16}



static void Test_B_BFu15ll_BFu16i()
{
  {
    init_simple_test("B_BFu15ll_BFu16i");
    static B_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu15ll_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu16i(Test_B_BFu15ll_BFu16i, "B_BFu15ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu16ll  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 B_BFu15ll_BFu16ll) C1{ Fc FL:15 FL:16}



static void Test_B_BFu15ll_BFu16ll()
{
  {
    init_simple_test("B_BFu15ll_BFu16ll");
    static B_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "B_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "B_BFu15ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu16ll(Test_B_BFu15ll_BFu16ll, "B_BFu15ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu16s  {
  bool v1;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 B_BFu15ll_BFu16s) C1{ Fc FL:15 Fs:16}



static void Test_B_BFu15ll_BFu16s()
{
  {
    init_simple_test("B_BFu15ll_BFu16s");
    static B_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu15ll_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu16s(Test_B_BFu15ll_BFu16s, "B_BFu15ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu17i  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 B_BFu15ll_BFu17i) C1{ Fc FL:15 Fi:17}



static void Test_B_BFu15ll_BFu17i()
{
  {
    init_simple_test("B_BFu15ll_BFu17i");
    static B_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu15ll_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu17i(Test_B_BFu15ll_BFu17i, "B_BFu15ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu17ll  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 B_BFu15ll_BFu17ll) C1{ Fc FL:15 FL:17}



static void Test_B_BFu15ll_BFu17ll()
{
  {
    init_simple_test("B_BFu15ll_BFu17ll");
    static B_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "B_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "B_BFu15ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu17ll(Test_B_BFu15ll_BFu17ll, "B_BFu15ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu1c  {
  bool v1;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 B_BFu15ll_BFu1c) C1{ Fc FL:15 Fc:1}



static void Test_B_BFu15ll_BFu1c()
{
  {
    init_simple_test("B_BFu15ll_BFu1c");
    static B_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "B_BFu15ll_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu1c(Test_B_BFu15ll_BFu1c, "B_BFu15ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu1i  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 B_BFu15ll_BFu1i) C1{ Fc FL:15 Fi:1}



static void Test_B_BFu15ll_BFu1i()
{
  {
    init_simple_test("B_BFu15ll_BFu1i");
    static B_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "B_BFu15ll_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu1i(Test_B_BFu15ll_BFu1i, "B_BFu15ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu1ll  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 B_BFu15ll_BFu1ll) C1{ Fc FL:15 FL:1}



static void Test_B_BFu15ll_BFu1ll()
{
  {
    init_simple_test("B_BFu15ll_BFu1ll");
    static B_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "B_BFu15ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu1ll(Test_B_BFu15ll_BFu1ll, "B_BFu15ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu1s  {
  bool v1;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 B_BFu15ll_BFu1s) C1{ Fc FL:15 Fs:1}



static void Test_B_BFu15ll_BFu1s()
{
  {
    init_simple_test("B_BFu15ll_BFu1s");
    static B_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "B_BFu15ll_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu1s(Test_B_BFu15ll_BFu1s, "B_BFu15ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu31i  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 B_BFu15ll_BFu31i) C1{ Fc FL:15 Fi:31}



static void Test_B_BFu15ll_BFu31i()
{
  {
    init_simple_test("B_BFu15ll_BFu31i");
    static B_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu15ll_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu31i(Test_B_BFu15ll_BFu31i, "B_BFu15ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu31ll  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 B_BFu15ll_BFu31ll) C1{ Fc FL:15 FL:31}



static void Test_B_BFu15ll_BFu31ll()
{
  {
    init_simple_test("B_BFu15ll_BFu31ll");
    static B_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "B_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "B_BFu15ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu31ll(Test_B_BFu15ll_BFu31ll, "B_BFu15ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu32i  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 B_BFu15ll_BFu32i) C1{ Fc FL:15 Fi:32}



static void Test_B_BFu15ll_BFu32i()
{
  {
    init_simple_test("B_BFu15ll_BFu32i");
    static B_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu15ll_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu32i(Test_B_BFu15ll_BFu32i, "B_BFu15ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu32ll  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 B_BFu15ll_BFu32ll) C1{ Fc FL:15 FL:32}



static void Test_B_BFu15ll_BFu32ll()
{
  {
    init_simple_test("B_BFu15ll_BFu32ll");
    static B_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "B_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "B_BFu15ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu32ll(Test_B_BFu15ll_BFu32ll, "B_BFu15ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu33  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 B_BFu15ll_BFu33) C1{ Fc FL:15 FL:33}



static void Test_B_BFu15ll_BFu33()
{
  {
    init_simple_test("B_BFu15ll_BFu33");
    static B_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "B_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "B_BFu15ll_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu33(Test_B_BFu15ll_BFu33, "B_BFu15ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu7c  {
  bool v1;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 B_BFu15ll_BFu7c) C1{ Fc FL:15 Fc:7}



static void Test_B_BFu15ll_BFu7c()
{
  {
    init_simple_test("B_BFu15ll_BFu7c");
    static B_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu15ll_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu7c(Test_B_BFu15ll_BFu7c, "B_BFu15ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu7i  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 B_BFu15ll_BFu7i) C1{ Fc FL:15 Fi:7}



static void Test_B_BFu15ll_BFu7i()
{
  {
    init_simple_test("B_BFu15ll_BFu7i");
    static B_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "B_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "B_BFu15ll_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu7i(Test_B_BFu15ll_BFu7i, "B_BFu15ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu7ll  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 B_BFu15ll_BFu7ll) C1{ Fc FL:15 FL:7}



static void Test_B_BFu15ll_BFu7ll()
{
  {
    init_simple_test("B_BFu15ll_BFu7ll");
    static B_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "B_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "B_BFu15ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu7ll(Test_B_BFu15ll_BFu7ll, "B_BFu15ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu7s  {
  bool v1;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 B_BFu15ll_BFu7s) C1{ Fc FL:15 Fs:7}



static void Test_B_BFu15ll_BFu7s()
{
  {
    init_simple_test("B_BFu15ll_BFu7s");
    static B_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "B_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "B_BFu15ll_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu7s(Test_B_BFu15ll_BFu7s, "B_BFu15ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu8c  {
  bool v1;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 B_BFu15ll_BFu8c) C1{ Fc FL:15 Fc:8}



static void Test_B_BFu15ll_BFu8c()
{
  {
    init_simple_test("B_BFu15ll_BFu8c");
    static B_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu15ll_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu8c(Test_B_BFu15ll_BFu8c, "B_BFu15ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu8i  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 B_BFu15ll_BFu8i) C1{ Fc FL:15 Fi:8}



static void Test_B_BFu15ll_BFu8i()
{
  {
    init_simple_test("B_BFu15ll_BFu8i");
    static B_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "B_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "B_BFu15ll_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu8i(Test_B_BFu15ll_BFu8i, "B_BFu15ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu8ll  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 B_BFu15ll_BFu8ll) C1{ Fc FL:15 FL:8}



static void Test_B_BFu15ll_BFu8ll()
{
  {
    init_simple_test("B_BFu15ll_BFu8ll");
    static B_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "B_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "B_BFu15ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu8ll(Test_B_BFu15ll_BFu8ll, "B_BFu15ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu8s  {
  bool v1;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 B_BFu15ll_BFu8s) C1{ Fc FL:15 Fs:8}



static void Test_B_BFu15ll_BFu8s()
{
  {
    init_simple_test("B_BFu15ll_BFu8s");
    static B_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "B_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "B_BFu15ll_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu8s(Test_B_BFu15ll_BFu8s, "B_BFu15ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu9i  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 B_BFu15ll_BFu9i) C1{ Fc FL:15 Fi:9}



static void Test_B_BFu15ll_BFu9i()
{
  {
    init_simple_test("B_BFu15ll_BFu9i");
    static B_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "B_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "B_BFu15ll_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu9i(Test_B_BFu15ll_BFu9i, "B_BFu15ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu9ll  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 B_BFu15ll_BFu9ll) C1{ Fc FL:15 FL:9}



static void Test_B_BFu15ll_BFu9ll()
{
  {
    init_simple_test("B_BFu15ll_BFu9ll");
    static B_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "B_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "B_BFu15ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu9ll(Test_B_BFu15ll_BFu9ll, "B_BFu15ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_BFu9s  {
  bool v1;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 B_BFu15ll_BFu9s) C1{ Fc FL:15 Fs:9}



static void Test_B_BFu15ll_BFu9s()
{
  {
    init_simple_test("B_BFu15ll_BFu9s");
    static B_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "B_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "B_BFu15ll_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_BFu9s(Test_B_BFu15ll_BFu9s, "B_BFu15ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_C  {
  bool v1;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 B_BFu15ll_C) C1{ Fc FL:15 Fc}



static void Test_B_BFu15ll_C()
{
  {
    init_simple_test("B_BFu15ll_C");
    static B_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_C)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_C");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_C");
    check_field_offset(lv, v3, 3, "B_BFu15ll_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_C(Test_B_BFu15ll_C, "B_BFu15ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_D  {
  bool v1;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 B_BFu15ll_D) C1{ Fc FL:15 FL}



static void Test_B_BFu15ll_D()
{
  {
    init_simple_test("B_BFu15ll_D");
    static B_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_D)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_D");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15ll_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_D(Test_B_BFu15ll_D, "B_BFu15ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_F  {
  bool v1;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 B_BFu15ll_F) C1{ Fc FL:15 Fi}



static void Test_B_BFu15ll_F()
{
  {
    init_simple_test("B_BFu15ll_F");
    static B_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_F)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_F");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_F");
    check_field_offset(lv, v3, 4, "B_BFu15ll_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_F(Test_B_BFu15ll_F, "B_BFu15ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_I  {
  bool v1;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 B_BFu15ll_I) C1{ Fc FL:15 Fi}



static void Test_B_BFu15ll_I()
{
  {
    init_simple_test("B_BFu15ll_I");
    static B_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_I)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_I");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_I");
    check_field_offset(lv, v3, 4, "B_BFu15ll_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_I(Test_B_BFu15ll_I, "B_BFu15ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_Ip  {
  bool v1;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 B_BFu15ll_Ip) C1{ Fc FL:15 Fp}



static void Test_B_BFu15ll_Ip()
{
  {
    init_simple_test("B_BFu15ll_Ip");
    static B_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_Ip(Test_B_BFu15ll_Ip, "B_BFu15ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_L  {
  bool v1;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 B_BFu15ll_L) C1{ Fc FL:15 FL}



static void Test_B_BFu15ll_L()
{
  {
    init_simple_test("B_BFu15ll_L");
    static B_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_L)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_L");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15ll_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_L(Test_B_BFu15ll_L, "B_BFu15ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_S  {
  bool v1;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 B_BFu15ll_S) C1{ Fc FL:15 Fs}



static void Test_B_BFu15ll_S()
{
  {
    init_simple_test("B_BFu15ll_S");
    static B_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_S)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_S");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_S");
    check_field_offset(lv, v3, 4, "B_BFu15ll_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_S(Test_B_BFu15ll_S, "B_BFu15ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_Uc  {
  bool v1;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 B_BFu15ll_Uc) C1{ Fc FL:15 Fc}



static void Test_B_BFu15ll_Uc()
{
  {
    init_simple_test("B_BFu15ll_Uc");
    static B_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_Uc");
    check_field_offset(lv, v3, 3, "B_BFu15ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_Uc(Test_B_BFu15ll_Uc, "B_BFu15ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_Ui  {
  bool v1;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 B_BFu15ll_Ui) C1{ Fc FL:15 Fi}



static void Test_B_BFu15ll_Ui()
{
  {
    init_simple_test("B_BFu15ll_Ui");
    static B_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "B_BFu15ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_Ui(Test_B_BFu15ll_Ui, "B_BFu15ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_Ul  {
  bool v1;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 B_BFu15ll_Ul) C1{ Fc FL:15 FL}



static void Test_B_BFu15ll_Ul()
{
  {
    init_simple_test("B_BFu15ll_Ul");
    static B_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_Ul(Test_B_BFu15ll_Ul, "B_BFu15ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_Us  {
  bool v1;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 B_BFu15ll_Us) C1{ Fc FL:15 Fs}



static void Test_B_BFu15ll_Us()
{
  {
    init_simple_test("B_BFu15ll_Us");
    static B_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_Us)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "B_BFu15ll_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_Us(Test_B_BFu15ll_Us, "B_BFu15ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15ll_Vp  {
  bool v1;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 B_BFu15ll_Vp) C1{ Fc FL:15 Fp}



static void Test_B_BFu15ll_Vp()
{
  {
    init_simple_test("B_BFu15ll_Vp");
    static B_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15ll_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu15ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "B_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "B_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15ll_Vp(Test_B_BFu15ll_Vp, "B_BFu15ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s  {
  bool v1;
  unsigned short v2:15;
};
//SIG(1 B_BFu15s) C1{ Fc Fs:15}



static void Test_B_BFu15s()
{
  {
    init_simple_test("B_BFu15s");
    static B_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu15s(Test_B_BFu15s, "B_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_B  {
  bool v1;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 B_BFu15s_B) C1{ Fc Fs:15 Fc}



static void Test_B_BFu15s_B()
{
  {
    init_simple_test("B_BFu15s_B");
    static B_BFu15s_B lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_B)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_B)");
    check_field_offset(lv, v1, 0, "B_BFu15s_B.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_B");
    check_field_offset(lv, v3, 4, "B_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_B(Test_B_BFu15s_B, "B_BFu15s_B", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu15i  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 B_BFu15s_BFu15i) C1{ Fc Fs:15 Fi:15}



static void Test_B_BFu15s_BFu15i()
{
  {
    init_simple_test("B_BFu15s_BFu15i");
    static B_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu15i(Test_B_BFu15s_BFu15i, "B_BFu15s_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu15ll  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 B_BFu15s_BFu15ll) C1{ Fc Fs:15 FL:15}



static void Test_B_BFu15s_BFu15ll()
{
  {
    init_simple_test("B_BFu15s_BFu15ll");
    static B_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "B_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "B_BFu15s_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu15ll(Test_B_BFu15s_BFu15ll, "B_BFu15s_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu15s  {
  bool v1;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 B_BFu15s_BFu15s) C1{ Fc Fs:15 Fs:15}



static void Test_B_BFu15s_BFu15s()
{
  {
    init_simple_test("B_BFu15s_BFu15s");
    static B_BFu15s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu15s(Test_B_BFu15s_BFu15s, "B_BFu15s_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu16i  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 B_BFu15s_BFu16i) C1{ Fc Fs:15 Fi:16}



static void Test_B_BFu15s_BFu16i()
{
  {
    init_simple_test("B_BFu15s_BFu16i");
    static B_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu15s_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu16i(Test_B_BFu15s_BFu16i, "B_BFu15s_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu16ll  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 B_BFu15s_BFu16ll) C1{ Fc Fs:15 FL:16}



static void Test_B_BFu15s_BFu16ll()
{
  {
    init_simple_test("B_BFu15s_BFu16ll");
    static B_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "B_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "B_BFu15s_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu16ll(Test_B_BFu15s_BFu16ll, "B_BFu15s_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu16s  {
  bool v1;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 B_BFu15s_BFu16s) C1{ Fc Fs:15 Fs:16}



static void Test_B_BFu15s_BFu16s()
{
  {
    init_simple_test("B_BFu15s_BFu16s");
    static B_BFu15s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu15s_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu16s(Test_B_BFu15s_BFu16s, "B_BFu15s_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu17i  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 B_BFu15s_BFu17i) C1{ Fc Fs:15 Fi:17}



static void Test_B_BFu15s_BFu17i()
{
  {
    init_simple_test("B_BFu15s_BFu17i");
    static B_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu17i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu15s_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu17i(Test_B_BFu15s_BFu17i, "B_BFu15s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu17ll  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 B_BFu15s_BFu17ll) C1{ Fc Fs:15 FL:17}



static void Test_B_BFu15s_BFu17ll()
{
  {
    init_simple_test("B_BFu15s_BFu17ll");
    static B_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "B_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "B_BFu15s_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu17ll(Test_B_BFu15s_BFu17ll, "B_BFu15s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu1c  {
  bool v1;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 B_BFu15s_BFu1c) C1{ Fc Fs:15 Fc:1}



static void Test_B_BFu15s_BFu1c()
{
  {
    init_simple_test("B_BFu15s_BFu1c");
    static B_BFu15s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "B_BFu15s_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu1c(Test_B_BFu15s_BFu1c, "B_BFu15s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu1i  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 B_BFu15s_BFu1i) C1{ Fc Fs:15 Fi:1}



static void Test_B_BFu15s_BFu1i()
{
  {
    init_simple_test("B_BFu15s_BFu1i");
    static B_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "B_BFu15s_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu1i(Test_B_BFu15s_BFu1i, "B_BFu15s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu1ll  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 B_BFu15s_BFu1ll) C1{ Fc Fs:15 FL:1}



static void Test_B_BFu15s_BFu1ll()
{
  {
    init_simple_test("B_BFu15s_BFu1ll");
    static B_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "B_BFu15s_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu1ll(Test_B_BFu15s_BFu1ll, "B_BFu15s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu1s  {
  bool v1;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 B_BFu15s_BFu1s) C1{ Fc Fs:15 Fs:1}



static void Test_B_BFu15s_BFu1s()
{
  {
    init_simple_test("B_BFu15s_BFu1s");
    static B_BFu15s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu15s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "B_BFu15s_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu1s(Test_B_BFu15s_BFu1s, "B_BFu15s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu31i  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 B_BFu15s_BFu31i) C1{ Fc Fs:15 Fi:31}



static void Test_B_BFu15s_BFu31i()
{
  {
    init_simple_test("B_BFu15s_BFu31i");
    static B_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu31i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu15s_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu31i(Test_B_BFu15s_BFu31i, "B_BFu15s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu31ll  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 B_BFu15s_BFu31ll) C1{ Fc Fs:15 FL:31}



static void Test_B_BFu15s_BFu31ll()
{
  {
    init_simple_test("B_BFu15s_BFu31ll");
    static B_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "B_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "B_BFu15s_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu31ll(Test_B_BFu15s_BFu31ll, "B_BFu15s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu32i  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 B_BFu15s_BFu32i) C1{ Fc Fs:15 Fi:32}



static void Test_B_BFu15s_BFu32i()
{
  {
    init_simple_test("B_BFu15s_BFu32i");
    static B_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu32i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu15s_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu32i(Test_B_BFu15s_BFu32i, "B_BFu15s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu32ll  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 B_BFu15s_BFu32ll) C1{ Fc Fs:15 FL:32}



static void Test_B_BFu15s_BFu32ll()
{
  {
    init_simple_test("B_BFu15s_BFu32ll");
    static B_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "B_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "B_BFu15s_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu32ll(Test_B_BFu15s_BFu32ll, "B_BFu15s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu33  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 B_BFu15s_BFu33) C1{ Fc Fs:15 FL:33}



static void Test_B_BFu15s_BFu33()
{
  {
    init_simple_test("B_BFu15s_BFu33");
    static B_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "B_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "B_BFu15s_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu33(Test_B_BFu15s_BFu33, "B_BFu15s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu7c  {
  bool v1;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 B_BFu15s_BFu7c) C1{ Fc Fs:15 Fc:7}



static void Test_B_BFu15s_BFu7c()
{
  {
    init_simple_test("B_BFu15s_BFu7c");
    static B_BFu15s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_BFu15s_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu7c(Test_B_BFu15s_BFu7c, "B_BFu15s_BFu7c", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu7i  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 B_BFu15s_BFu7i) C1{ Fc Fs:15 Fi:7}



static void Test_B_BFu15s_BFu7i()
{
  {
    init_simple_test("B_BFu15s_BFu7i");
    static B_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_BFu15s_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu7i(Test_B_BFu15s_BFu7i, "B_BFu15s_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu7ll  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 B_BFu15s_BFu7ll) C1{ Fc Fs:15 FL:7}



static void Test_B_BFu15s_BFu7ll()
{
  {
    init_simple_test("B_BFu15s_BFu7ll");
    static B_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "B_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "B_BFu15s_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu7ll(Test_B_BFu15s_BFu7ll, "B_BFu15s_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu7s  {
  bool v1;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 B_BFu15s_BFu7s) C1{ Fc Fs:15 Fs:7}



static void Test_B_BFu15s_BFu7s()
{
  {
    init_simple_test("B_BFu15s_BFu7s");
    static B_BFu15s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_BFu15s_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu7s(Test_B_BFu15s_BFu7s, "B_BFu15s_BFu7s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu8c  {
  bool v1;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 B_BFu15s_BFu8c) C1{ Fc Fs:15 Fc:8}



static void Test_B_BFu15s_BFu8c()
{
  {
    init_simple_test("B_BFu15s_BFu8c");
    static B_BFu15s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu15s_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu8c(Test_B_BFu15s_BFu8c, "B_BFu15s_BFu8c", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu8i  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 B_BFu15s_BFu8i) C1{ Fc Fs:15 Fi:8}



static void Test_B_BFu15s_BFu8i()
{
  {
    init_simple_test("B_BFu15s_BFu8i");
    static B_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu15s_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu8i(Test_B_BFu15s_BFu8i, "B_BFu15s_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu8ll  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 B_BFu15s_BFu8ll) C1{ Fc Fs:15 FL:8}



static void Test_B_BFu15s_BFu8ll()
{
  {
    init_simple_test("B_BFu15s_BFu8ll");
    static B_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "B_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "B_BFu15s_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu8ll(Test_B_BFu15s_BFu8ll, "B_BFu15s_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu8s  {
  bool v1;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 B_BFu15s_BFu8s) C1{ Fc Fs:15 Fs:8}



static void Test_B_BFu15s_BFu8s()
{
  {
    init_simple_test("B_BFu15s_BFu8s");
    static B_BFu15s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu15s_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu8s(Test_B_BFu15s_BFu8s, "B_BFu15s_BFu8s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu9i  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 B_BFu15s_BFu9i) C1{ Fc Fs:15 Fi:9}



static void Test_B_BFu15s_BFu9i()
{
  {
    init_simple_test("B_BFu15s_BFu9i");
    static B_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu15s_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu9i(Test_B_BFu15s_BFu9i, "B_BFu15s_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu9ll  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 B_BFu15s_BFu9ll) C1{ Fc Fs:15 FL:9}



static void Test_B_BFu15s_BFu9ll()
{
  {
    init_simple_test("B_BFu15s_BFu9ll");
    static B_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "B_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "B_BFu15s_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu9ll(Test_B_BFu15s_BFu9ll, "B_BFu15s_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_BFu9s  {
  bool v1;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 B_BFu15s_BFu9s) C1{ Fc Fs:15 Fs:9}



static void Test_B_BFu15s_BFu9s()
{
  {
    init_simple_test("B_BFu15s_BFu9s");
    static B_BFu15s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu15s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu15s_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu15s_BFu9s(Test_B_BFu15s_BFu9s, "B_BFu15s_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_C  {
  bool v1;
  unsigned short v2:15;
  char v3;
};
//SIG(1 B_BFu15s_C) C1{ Fc Fs:15 Fc}



static void Test_B_BFu15s_C()
{
  {
    init_simple_test("B_BFu15s_C");
    static B_BFu15s_C lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_C)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_C)");
    check_field_offset(lv, v1, 0, "B_BFu15s_C.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_C");
    check_field_offset(lv, v3, 4, "B_BFu15s_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_C(Test_B_BFu15s_C, "B_BFu15s_C", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_D  {
  bool v1;
  unsigned short v2:15;
  double v3;
};
//SIG(1 B_BFu15s_D) C1{ Fc Fs:15 FL}



static void Test_B_BFu15s_D()
{
  {
    init_simple_test("B_BFu15s_D");
    static B_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_D)");
    check_field_offset(lv, v1, 0, "B_BFu15s_D.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15s_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_D(Test_B_BFu15s_D, "B_BFu15s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_F  {
  bool v1;
  unsigned short v2:15;
  float v3;
};
//SIG(1 B_BFu15s_F) C1{ Fc Fs:15 Fi}



static void Test_B_BFu15s_F()
{
  {
    init_simple_test("B_BFu15s_F");
    static B_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_F)");
    check_field_offset(lv, v1, 0, "B_BFu15s_F.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_F");
    check_field_offset(lv, v3, 4, "B_BFu15s_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_F(Test_B_BFu15s_F, "B_BFu15s_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_I  {
  bool v1;
  unsigned short v2:15;
  int v3;
};
//SIG(1 B_BFu15s_I) C1{ Fc Fs:15 Fi}



static void Test_B_BFu15s_I()
{
  {
    init_simple_test("B_BFu15s_I");
    static B_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_I)");
    check_field_offset(lv, v1, 0, "B_BFu15s_I.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_I");
    check_field_offset(lv, v3, 4, "B_BFu15s_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_I(Test_B_BFu15s_I, "B_BFu15s_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_Ip  {
  bool v1;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 B_BFu15s_Ip) C1{ Fc Fs:15 Fp}



static void Test_B_BFu15s_Ip()
{
  {
    init_simple_test("B_BFu15s_Ip");
    static B_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu15s_Ip.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15s_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_Ip(Test_B_BFu15s_Ip, "B_BFu15s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_L  {
  bool v1;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 B_BFu15s_L) C1{ Fc Fs:15 FL}



static void Test_B_BFu15s_L()
{
  {
    init_simple_test("B_BFu15s_L");
    static B_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_L)");
    check_field_offset(lv, v1, 0, "B_BFu15s_L.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15s_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_L(Test_B_BFu15s_L, "B_BFu15s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_S  {
  bool v1;
  unsigned short v2:15;
  short v3;
};
//SIG(1 B_BFu15s_S) C1{ Fc Fs:15 Fs}



static void Test_B_BFu15s_S()
{
  {
    init_simple_test("B_BFu15s_S");
    static B_BFu15s_S lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_S)");
    check_field_offset(lv, v1, 0, "B_BFu15s_S.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_S");
    check_field_offset(lv, v3, 4, "B_BFu15s_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_S(Test_B_BFu15s_S, "B_BFu15s_S", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_Uc  {
  bool v1;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 B_BFu15s_Uc) C1{ Fc Fs:15 Fc}



static void Test_B_BFu15s_Uc()
{
  {
    init_simple_test("B_BFu15s_Uc");
    static B_BFu15s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu15s_Uc.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "B_BFu15s_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_Uc(Test_B_BFu15s_Uc, "B_BFu15s_Uc", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_Ui  {
  bool v1;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 B_BFu15s_Ui) C1{ Fc Fs:15 Fi}



static void Test_B_BFu15s_Ui()
{
  {
    init_simple_test("B_BFu15s_Ui");
    static B_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu15s_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu15s_Ui.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "B_BFu15s_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_Ui(Test_B_BFu15s_Ui, "B_BFu15s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_Ul  {
  bool v1;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 B_BFu15s_Ul) C1{ Fc Fs:15 FL}



static void Test_B_BFu15s_Ul()
{
  {
    init_simple_test("B_BFu15s_Ul");
    static B_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu15s_Ul.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15s_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_Ul(Test_B_BFu15s_Ul, "B_BFu15s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_Us  {
  bool v1;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 B_BFu15s_Us) C1{ Fc Fs:15 Fs}



static void Test_B_BFu15s_Us()
{
  {
    init_simple_test("B_BFu15s_Us");
    static B_BFu15s_Us lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu15s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu15s_Us)");
    check_field_offset(lv, v1, 0, "B_BFu15s_Us.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_Us");
    check_field_offset(lv, v3, 4, "B_BFu15s_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_Us(Test_B_BFu15s_Us, "B_BFu15s_Us", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu15s_Vp  {
  bool v1;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 B_BFu15s_Vp) C1{ Fc Fs:15 Fp}



static void Test_B_BFu15s_Vp()
{
  {
    init_simple_test("B_BFu15s_Vp");
    static B_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu15s_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu15s_Vp.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "B_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "B_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu15s_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu15s_Vp(Test_B_BFu15s_Vp, "B_BFu15s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i  {
  bool v1;
  unsigned int v2:16;
};
//SIG(1 B_BFu16i) C1{ Fc Fi:16}



static void Test_B_BFu16i()
{
  {
    init_simple_test("B_BFu16i");
    static B_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu16i(Test_B_BFu16i, "B_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_B  {
  bool v1;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 B_BFu16i_B) C1{ Fc Fi:16 Fc}



static void Test_B_BFu16i_B()
{
  {
    init_simple_test("B_BFu16i_B");
    static B_BFu16i_B lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_B)");
    check_field_offset(lv, v1, 0, "B_BFu16i_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_B");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_B");
    check_field_offset(lv, v3, 3, "B_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_B(Test_B_BFu16i_B, "B_BFu16i_B", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu15i  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 B_BFu16i_BFu15i) C1{ Fc Fi:16 Fi:15}



static void Test_B_BFu16i_BFu15i()
{
  {
    init_simple_test("B_BFu16i_BFu15i");
    static B_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu16i_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu15i(Test_B_BFu16i_BFu15i, "B_BFu16i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu15ll  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 B_BFu16i_BFu15ll) C1{ Fc Fi:16 FL:15}



static void Test_B_BFu16i_BFu15ll()
{
  {
    init_simple_test("B_BFu16i_BFu15ll");
    static B_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "B_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "B_BFu16i_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu15ll(Test_B_BFu16i_BFu15ll, "B_BFu16i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu15s  {
  bool v1;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 B_BFu16i_BFu15s) C1{ Fc Fi:16 Fs:15}



static void Test_B_BFu16i_BFu15s()
{
  {
    init_simple_test("B_BFu16i_BFu15s");
    static B_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu16i_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu15s(Test_B_BFu16i_BFu15s, "B_BFu16i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu16i  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 B_BFu16i_BFu16i) C1{ Fc Fi:16 Fi:16}



static void Test_B_BFu16i_BFu16i()
{
  {
    init_simple_test("B_BFu16i_BFu16i");
    static B_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu16i(Test_B_BFu16i_BFu16i, "B_BFu16i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu16ll  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 B_BFu16i_BFu16ll) C1{ Fc Fi:16 FL:16}



static void Test_B_BFu16i_BFu16ll()
{
  {
    init_simple_test("B_BFu16i_BFu16ll");
    static B_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "B_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu16ll(Test_B_BFu16i_BFu16ll, "B_BFu16i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu16s  {
  bool v1;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 B_BFu16i_BFu16s) C1{ Fc Fi:16 Fs:16}



static void Test_B_BFu16i_BFu16s()
{
  {
    init_simple_test("B_BFu16i_BFu16s");
    static B_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu16s(Test_B_BFu16i_BFu16s, "B_BFu16i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu17i  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 B_BFu16i_BFu17i) C1{ Fc Fi:16 Fi:17}



static void Test_B_BFu16i_BFu17i()
{
  {
    init_simple_test("B_BFu16i_BFu17i");
    static B_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu16i_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu17i(Test_B_BFu16i_BFu17i, "B_BFu16i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu17ll  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 B_BFu16i_BFu17ll) C1{ Fc Fi:16 FL:17}



static void Test_B_BFu16i_BFu17ll()
{
  {
    init_simple_test("B_BFu16i_BFu17ll");
    static B_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "B_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "B_BFu16i_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu17ll(Test_B_BFu16i_BFu17ll, "B_BFu16i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu1c  {
  bool v1;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 B_BFu16i_BFu1c) C1{ Fc Fi:16 Fc:1}



static void Test_B_BFu16i_BFu1c()
{
  {
    init_simple_test("B_BFu16i_BFu1c");
    static B_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "B_BFu16i_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu1c(Test_B_BFu16i_BFu1c, "B_BFu16i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu1i  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 B_BFu16i_BFu1i) C1{ Fc Fi:16 Fi:1}



static void Test_B_BFu16i_BFu1i()
{
  {
    init_simple_test("B_BFu16i_BFu1i");
    static B_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "B_BFu16i_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu1i(Test_B_BFu16i_BFu1i, "B_BFu16i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu1ll  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 B_BFu16i_BFu1ll) C1{ Fc Fi:16 FL:1}



static void Test_B_BFu16i_BFu1ll()
{
  {
    init_simple_test("B_BFu16i_BFu1ll");
    static B_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "B_BFu16i_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu1ll(Test_B_BFu16i_BFu1ll, "B_BFu16i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu1s  {
  bool v1;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 B_BFu16i_BFu1s) C1{ Fc Fi:16 Fs:1}



static void Test_B_BFu16i_BFu1s()
{
  {
    init_simple_test("B_BFu16i_BFu1s");
    static B_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "B_BFu16i_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu1s(Test_B_BFu16i_BFu1s, "B_BFu16i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu31i  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 B_BFu16i_BFu31i) C1{ Fc Fi:16 Fi:31}



static void Test_B_BFu16i_BFu31i()
{
  {
    init_simple_test("B_BFu16i_BFu31i");
    static B_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu16i_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu31i(Test_B_BFu16i_BFu31i, "B_BFu16i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu31ll  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 B_BFu16i_BFu31ll) C1{ Fc Fi:16 FL:31}



static void Test_B_BFu16i_BFu31ll()
{
  {
    init_simple_test("B_BFu16i_BFu31ll");
    static B_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "B_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "B_BFu16i_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu31ll(Test_B_BFu16i_BFu31ll, "B_BFu16i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu32i  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 B_BFu16i_BFu32i) C1{ Fc Fi:16 Fi:32}



static void Test_B_BFu16i_BFu32i()
{
  {
    init_simple_test("B_BFu16i_BFu32i");
    static B_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu16i_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu32i(Test_B_BFu16i_BFu32i, "B_BFu16i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu32ll  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 B_BFu16i_BFu32ll) C1{ Fc Fi:16 FL:32}



static void Test_B_BFu16i_BFu32ll()
{
  {
    init_simple_test("B_BFu16i_BFu32ll");
    static B_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "B_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "B_BFu16i_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu32ll(Test_B_BFu16i_BFu32ll, "B_BFu16i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu33  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 B_BFu16i_BFu33) C1{ Fc Fi:16 FL:33}



static void Test_B_BFu16i_BFu33()
{
  {
    init_simple_test("B_BFu16i_BFu33");
    static B_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "B_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "B_BFu16i_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu33(Test_B_BFu16i_BFu33, "B_BFu16i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu7c  {
  bool v1;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 B_BFu16i_BFu7c) C1{ Fc Fi:16 Fc:7}



static void Test_B_BFu16i_BFu7c()
{
  {
    init_simple_test("B_BFu16i_BFu7c");
    static B_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu16i_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu7c(Test_B_BFu16i_BFu7c, "B_BFu16i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu7i  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 B_BFu16i_BFu7i) C1{ Fc Fi:16 Fi:7}



static void Test_B_BFu16i_BFu7i()
{
  {
    init_simple_test("B_BFu16i_BFu7i");
    static B_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu16i_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu7i(Test_B_BFu16i_BFu7i, "B_BFu16i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu7ll  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 B_BFu16i_BFu7ll) C1{ Fc Fi:16 FL:7}



static void Test_B_BFu16i_BFu7ll()
{
  {
    init_simple_test("B_BFu16i_BFu7ll");
    static B_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu16i_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu7ll(Test_B_BFu16i_BFu7ll, "B_BFu16i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu7s  {
  bool v1;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 B_BFu16i_BFu7s) C1{ Fc Fi:16 Fs:7}



static void Test_B_BFu16i_BFu7s()
{
  {
    init_simple_test("B_BFu16i_BFu7s");
    static B_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu16i_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu7s(Test_B_BFu16i_BFu7s, "B_BFu16i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu8c  {
  bool v1;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 B_BFu16i_BFu8c) C1{ Fc Fi:16 Fc:8}



static void Test_B_BFu16i_BFu8c()
{
  {
    init_simple_test("B_BFu16i_BFu8c");
    static B_BFu16i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu16i_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu8c(Test_B_BFu16i_BFu8c, "B_BFu16i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu8i  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 B_BFu16i_BFu8i) C1{ Fc Fi:16 Fi:8}



static void Test_B_BFu16i_BFu8i()
{
  {
    init_simple_test("B_BFu16i_BFu8i");
    static B_BFu16i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu16i_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu8i(Test_B_BFu16i_BFu8i, "B_BFu16i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu8ll  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 B_BFu16i_BFu8ll) C1{ Fc Fi:16 FL:8}



static void Test_B_BFu16i_BFu8ll()
{
  {
    init_simple_test("B_BFu16i_BFu8ll");
    static B_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu16i_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu8ll(Test_B_BFu16i_BFu8ll, "B_BFu16i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu8s  {
  bool v1;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 B_BFu16i_BFu8s) C1{ Fc Fi:16 Fs:8}



static void Test_B_BFu16i_BFu8s()
{
  {
    init_simple_test("B_BFu16i_BFu8s");
    static B_BFu16i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu16i_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu8s(Test_B_BFu16i_BFu8s, "B_BFu16i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu9i  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 B_BFu16i_BFu9i) C1{ Fc Fi:16 Fi:9}



static void Test_B_BFu16i_BFu9i()
{
  {
    init_simple_test("B_BFu16i_BFu9i");
    static B_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu16i_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu9i(Test_B_BFu16i_BFu9i, "B_BFu16i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu9ll  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 B_BFu16i_BFu9ll) C1{ Fc Fi:16 FL:9}



static void Test_B_BFu16i_BFu9ll()
{
  {
    init_simple_test("B_BFu16i_BFu9ll");
    static B_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "B_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "B_BFu16i_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu9ll(Test_B_BFu16i_BFu9ll, "B_BFu16i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_BFu9s  {
  bool v1;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 B_BFu16i_BFu9s) C1{ Fc Fi:16 Fs:9}



static void Test_B_BFu16i_BFu9s()
{
  {
    init_simple_test("B_BFu16i_BFu9s");
    static B_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu16i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu16i_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu16i_BFu9s(Test_B_BFu16i_BFu9s, "B_BFu16i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_C  {
  bool v1;
  unsigned int v2:16;
  char v3;
};
//SIG(1 B_BFu16i_C) C1{ Fc Fi:16 Fc}



static void Test_B_BFu16i_C()
{
  {
    init_simple_test("B_BFu16i_C");
    static B_BFu16i_C lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_C)");
    check_field_offset(lv, v1, 0, "B_BFu16i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_C");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_C");
    check_field_offset(lv, v3, 3, "B_BFu16i_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_C(Test_B_BFu16i_C, "B_BFu16i_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_D  {
  bool v1;
  unsigned int v2:16;
  double v3;
};
//SIG(1 B_BFu16i_D) C1{ Fc Fi:16 FL}



static void Test_B_BFu16i_D()
{
  {
    init_simple_test("B_BFu16i_D");
    static B_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_D)");
    check_field_offset(lv, v1, 0, "B_BFu16i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_D");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16i_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_D(Test_B_BFu16i_D, "B_BFu16i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_F  {
  bool v1;
  unsigned int v2:16;
  float v3;
};
//SIG(1 B_BFu16i_F) C1{ Fc Fi:16 Fi}



static void Test_B_BFu16i_F()
{
  {
    init_simple_test("B_BFu16i_F");
    static B_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_F)");
    check_field_offset(lv, v1, 0, "B_BFu16i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_F");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_F");
    check_field_offset(lv, v3, 4, "B_BFu16i_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_F(Test_B_BFu16i_F, "B_BFu16i_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_I  {
  bool v1;
  unsigned int v2:16;
  int v3;
};
//SIG(1 B_BFu16i_I) C1{ Fc Fi:16 Fi}



static void Test_B_BFu16i_I()
{
  {
    init_simple_test("B_BFu16i_I");
    static B_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_I)");
    check_field_offset(lv, v1, 0, "B_BFu16i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_I");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_I");
    check_field_offset(lv, v3, 4, "B_BFu16i_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_I(Test_B_BFu16i_I, "B_BFu16i_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_Ip  {
  bool v1;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 B_BFu16i_Ip) C1{ Fc Fi:16 Fp}



static void Test_B_BFu16i_Ip()
{
  {
    init_simple_test("B_BFu16i_Ip");
    static B_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu16i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16i_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_Ip(Test_B_BFu16i_Ip, "B_BFu16i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_L  {
  bool v1;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 B_BFu16i_L) C1{ Fc Fi:16 FL}



static void Test_B_BFu16i_L()
{
  {
    init_simple_test("B_BFu16i_L");
    static B_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_L)");
    check_field_offset(lv, v1, 0, "B_BFu16i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_L");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16i_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_L(Test_B_BFu16i_L, "B_BFu16i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_S  {
  bool v1;
  unsigned int v2:16;
  short v3;
};
//SIG(1 B_BFu16i_S) C1{ Fc Fi:16 Fs}



static void Test_B_BFu16i_S()
{
  {
    init_simple_test("B_BFu16i_S");
    static B_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_S)");
    check_field_offset(lv, v1, 0, "B_BFu16i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_S");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_S");
    check_field_offset(lv, v3, 4, "B_BFu16i_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_S(Test_B_BFu16i_S, "B_BFu16i_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_Uc  {
  bool v1;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 B_BFu16i_Uc) C1{ Fc Fi:16 Fc}



static void Test_B_BFu16i_Uc()
{
  {
    init_simple_test("B_BFu16i_Uc");
    static B_BFu16i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu16i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_Uc");
    check_field_offset(lv, v3, 3, "B_BFu16i_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_Uc(Test_B_BFu16i_Uc, "B_BFu16i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_Ui  {
  bool v1;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 B_BFu16i_Ui) C1{ Fc Fi:16 Fi}



static void Test_B_BFu16i_Ui()
{
  {
    init_simple_test("B_BFu16i_Ui");
    static B_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu16i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "B_BFu16i_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_Ui(Test_B_BFu16i_Ui, "B_BFu16i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_Ul  {
  bool v1;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 B_BFu16i_Ul) C1{ Fc Fi:16 FL}



static void Test_B_BFu16i_Ul()
{
  {
    init_simple_test("B_BFu16i_Ul");
    static B_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu16i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16i_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_Ul(Test_B_BFu16i_Ul, "B_BFu16i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_Us  {
  bool v1;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 B_BFu16i_Us) C1{ Fc Fi:16 Fs}



static void Test_B_BFu16i_Us()
{
  {
    init_simple_test("B_BFu16i_Us");
    static B_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16i_Us)");
    check_field_offset(lv, v1, 0, "B_BFu16i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_Us");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_Us");
    check_field_offset(lv, v3, 4, "B_BFu16i_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_Us(Test_B_BFu16i_Us, "B_BFu16i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16i_Vp  {
  bool v1;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 B_BFu16i_Vp) C1{ Fc Fi:16 Fp}



static void Test_B_BFu16i_Vp()
{
  {
    init_simple_test("B_BFu16i_Vp");
    static B_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16i_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu16i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16i_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16i_Vp(Test_B_BFu16i_Vp, "B_BFu16i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll  {
  bool v1;
  __tsu64 v2:16;
};
//SIG(1 B_BFu16ll) C1{ Fc FL:16}



static void Test_B_BFu16ll()
{
  {
    init_simple_test("B_BFu16ll");
    static B_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll(Test_B_BFu16ll, "B_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_B  {
  bool v1;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 B_BFu16ll_B) C1{ Fc FL:16 Fc}



static void Test_B_BFu16ll_B()
{
  {
    init_simple_test("B_BFu16ll_B");
    static B_BFu16ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_B)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_B");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_B");
    check_field_offset(lv, v3, 3, "B_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_B(Test_B_BFu16ll_B, "B_BFu16ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu15i  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 B_BFu16ll_BFu15i) C1{ Fc FL:16 Fi:15}



static void Test_B_BFu16ll_BFu15i()
{
  {
    init_simple_test("B_BFu16ll_BFu15i");
    static B_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu16ll_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu15i(Test_B_BFu16ll_BFu15i, "B_BFu16ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu15ll  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 B_BFu16ll_BFu15ll) C1{ Fc FL:16 FL:15}



static void Test_B_BFu16ll_BFu15ll()
{
  {
    init_simple_test("B_BFu16ll_BFu15ll");
    static B_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "B_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "B_BFu16ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu15ll(Test_B_BFu16ll_BFu15ll, "B_BFu16ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu15s  {
  bool v1;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 B_BFu16ll_BFu15s) C1{ Fc FL:16 Fs:15}



static void Test_B_BFu16ll_BFu15s()
{
  {
    init_simple_test("B_BFu16ll_BFu15s");
    static B_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu16ll_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu15s(Test_B_BFu16ll_BFu15s, "B_BFu16ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu16i  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 B_BFu16ll_BFu16i) C1{ Fc FL:16 Fi:16}



static void Test_B_BFu16ll_BFu16i()
{
  {
    init_simple_test("B_BFu16ll_BFu16i");
    static B_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu16i(Test_B_BFu16ll_BFu16i, "B_BFu16ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu16ll  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 B_BFu16ll_BFu16ll) C1{ Fc FL:16 FL:16}



static void Test_B_BFu16ll_BFu16ll()
{
  {
    init_simple_test("B_BFu16ll_BFu16ll");
    static B_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "B_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu16ll(Test_B_BFu16ll_BFu16ll, "B_BFu16ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu16s  {
  bool v1;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 B_BFu16ll_BFu16s) C1{ Fc FL:16 Fs:16}



static void Test_B_BFu16ll_BFu16s()
{
  {
    init_simple_test("B_BFu16ll_BFu16s");
    static B_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu16s(Test_B_BFu16ll_BFu16s, "B_BFu16ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu17i  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 B_BFu16ll_BFu17i) C1{ Fc FL:16 Fi:17}



static void Test_B_BFu16ll_BFu17i()
{
  {
    init_simple_test("B_BFu16ll_BFu17i");
    static B_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu16ll_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu17i(Test_B_BFu16ll_BFu17i, "B_BFu16ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu17ll  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 B_BFu16ll_BFu17ll) C1{ Fc FL:16 FL:17}



static void Test_B_BFu16ll_BFu17ll()
{
  {
    init_simple_test("B_BFu16ll_BFu17ll");
    static B_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "B_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "B_BFu16ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu17ll(Test_B_BFu16ll_BFu17ll, "B_BFu16ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu1c  {
  bool v1;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 B_BFu16ll_BFu1c) C1{ Fc FL:16 Fc:1}



static void Test_B_BFu16ll_BFu1c()
{
  {
    init_simple_test("B_BFu16ll_BFu1c");
    static B_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "B_BFu16ll_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu1c(Test_B_BFu16ll_BFu1c, "B_BFu16ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu1i  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 B_BFu16ll_BFu1i) C1{ Fc FL:16 Fi:1}



static void Test_B_BFu16ll_BFu1i()
{
  {
    init_simple_test("B_BFu16ll_BFu1i");
    static B_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "B_BFu16ll_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu1i(Test_B_BFu16ll_BFu1i, "B_BFu16ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu1ll  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 B_BFu16ll_BFu1ll) C1{ Fc FL:16 FL:1}



static void Test_B_BFu16ll_BFu1ll()
{
  {
    init_simple_test("B_BFu16ll_BFu1ll");
    static B_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "B_BFu16ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu1ll(Test_B_BFu16ll_BFu1ll, "B_BFu16ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu1s  {
  bool v1;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 B_BFu16ll_BFu1s) C1{ Fc FL:16 Fs:1}



static void Test_B_BFu16ll_BFu1s()
{
  {
    init_simple_test("B_BFu16ll_BFu1s");
    static B_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "B_BFu16ll_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu1s(Test_B_BFu16ll_BFu1s, "B_BFu16ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu31i  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 B_BFu16ll_BFu31i) C1{ Fc FL:16 Fi:31}



static void Test_B_BFu16ll_BFu31i()
{
  {
    init_simple_test("B_BFu16ll_BFu31i");
    static B_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu16ll_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu31i(Test_B_BFu16ll_BFu31i, "B_BFu16ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu31ll  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 B_BFu16ll_BFu31ll) C1{ Fc FL:16 FL:31}



static void Test_B_BFu16ll_BFu31ll()
{
  {
    init_simple_test("B_BFu16ll_BFu31ll");
    static B_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "B_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "B_BFu16ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu31ll(Test_B_BFu16ll_BFu31ll, "B_BFu16ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu32i  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 B_BFu16ll_BFu32i) C1{ Fc FL:16 Fi:32}



static void Test_B_BFu16ll_BFu32i()
{
  {
    init_simple_test("B_BFu16ll_BFu32i");
    static B_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu16ll_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu32i(Test_B_BFu16ll_BFu32i, "B_BFu16ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu32ll  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 B_BFu16ll_BFu32ll) C1{ Fc FL:16 FL:32}



static void Test_B_BFu16ll_BFu32ll()
{
  {
    init_simple_test("B_BFu16ll_BFu32ll");
    static B_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "B_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "B_BFu16ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu32ll(Test_B_BFu16ll_BFu32ll, "B_BFu16ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu33  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 B_BFu16ll_BFu33) C1{ Fc FL:16 FL:33}



static void Test_B_BFu16ll_BFu33()
{
  {
    init_simple_test("B_BFu16ll_BFu33");
    static B_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "B_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "B_BFu16ll_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu33(Test_B_BFu16ll_BFu33, "B_BFu16ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu7c  {
  bool v1;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 B_BFu16ll_BFu7c) C1{ Fc FL:16 Fc:7}



static void Test_B_BFu16ll_BFu7c()
{
  {
    init_simple_test("B_BFu16ll_BFu7c");
    static B_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu16ll_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu7c(Test_B_BFu16ll_BFu7c, "B_BFu16ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu7i  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 B_BFu16ll_BFu7i) C1{ Fc FL:16 Fi:7}



static void Test_B_BFu16ll_BFu7i()
{
  {
    init_simple_test("B_BFu16ll_BFu7i");
    static B_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu16ll_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu7i(Test_B_BFu16ll_BFu7i, "B_BFu16ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu7ll  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 B_BFu16ll_BFu7ll) C1{ Fc FL:16 FL:7}



static void Test_B_BFu16ll_BFu7ll()
{
  {
    init_simple_test("B_BFu16ll_BFu7ll");
    static B_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu16ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu7ll(Test_B_BFu16ll_BFu7ll, "B_BFu16ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu7s  {
  bool v1;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 B_BFu16ll_BFu7s) C1{ Fc FL:16 Fs:7}



static void Test_B_BFu16ll_BFu7s()
{
  {
    init_simple_test("B_BFu16ll_BFu7s");
    static B_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "B_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "B_BFu16ll_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu7s(Test_B_BFu16ll_BFu7s, "B_BFu16ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu8c  {
  bool v1;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 B_BFu16ll_BFu8c) C1{ Fc FL:16 Fc:8}



static void Test_B_BFu16ll_BFu8c()
{
  {
    init_simple_test("B_BFu16ll_BFu8c");
    static B_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu16ll_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu8c(Test_B_BFu16ll_BFu8c, "B_BFu16ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu8i  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 B_BFu16ll_BFu8i) C1{ Fc FL:16 Fi:8}



static void Test_B_BFu16ll_BFu8i()
{
  {
    init_simple_test("B_BFu16ll_BFu8i");
    static B_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu16ll_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu8i(Test_B_BFu16ll_BFu8i, "B_BFu16ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu8ll  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 B_BFu16ll_BFu8ll) C1{ Fc FL:16 FL:8}



static void Test_B_BFu16ll_BFu8ll()
{
  {
    init_simple_test("B_BFu16ll_BFu8ll");
    static B_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu16ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu8ll(Test_B_BFu16ll_BFu8ll, "B_BFu16ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu8s  {
  bool v1;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 B_BFu16ll_BFu8s) C1{ Fc FL:16 Fs:8}



static void Test_B_BFu16ll_BFu8s()
{
  {
    init_simple_test("B_BFu16ll_BFu8s");
    static B_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu16ll_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu8s(Test_B_BFu16ll_BFu8s, "B_BFu16ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu9i  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 B_BFu16ll_BFu9i) C1{ Fc FL:16 Fi:9}



static void Test_B_BFu16ll_BFu9i()
{
  {
    init_simple_test("B_BFu16ll_BFu9i");
    static B_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu16ll_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu9i(Test_B_BFu16ll_BFu9i, "B_BFu16ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu9ll  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 B_BFu16ll_BFu9ll) C1{ Fc FL:16 FL:9}



static void Test_B_BFu16ll_BFu9ll()
{
  {
    init_simple_test("B_BFu16ll_BFu9ll");
    static B_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "B_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "B_BFu16ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu9ll(Test_B_BFu16ll_BFu9ll, "B_BFu16ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_BFu9s  {
  bool v1;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 B_BFu16ll_BFu9s) C1{ Fc FL:16 Fs:9}



static void Test_B_BFu16ll_BFu9s()
{
  {
    init_simple_test("B_BFu16ll_BFu9s");
    static B_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu16ll_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_BFu9s(Test_B_BFu16ll_BFu9s, "B_BFu16ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_C  {
  bool v1;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 B_BFu16ll_C) C1{ Fc FL:16 Fc}



static void Test_B_BFu16ll_C()
{
  {
    init_simple_test("B_BFu16ll_C");
    static B_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_C)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_C");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_C");
    check_field_offset(lv, v3, 3, "B_BFu16ll_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_C(Test_B_BFu16ll_C, "B_BFu16ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_D  {
  bool v1;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 B_BFu16ll_D) C1{ Fc FL:16 FL}



static void Test_B_BFu16ll_D()
{
  {
    init_simple_test("B_BFu16ll_D");
    static B_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_D)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_D");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16ll_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_D(Test_B_BFu16ll_D, "B_BFu16ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_F  {
  bool v1;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 B_BFu16ll_F) C1{ Fc FL:16 Fi}



static void Test_B_BFu16ll_F()
{
  {
    init_simple_test("B_BFu16ll_F");
    static B_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_F)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_F");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_F");
    check_field_offset(lv, v3, 4, "B_BFu16ll_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_F(Test_B_BFu16ll_F, "B_BFu16ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_I  {
  bool v1;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 B_BFu16ll_I) C1{ Fc FL:16 Fi}



static void Test_B_BFu16ll_I()
{
  {
    init_simple_test("B_BFu16ll_I");
    static B_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_I)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_I");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_I");
    check_field_offset(lv, v3, 4, "B_BFu16ll_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_I(Test_B_BFu16ll_I, "B_BFu16ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_Ip  {
  bool v1;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 B_BFu16ll_Ip) C1{ Fc FL:16 Fp}



static void Test_B_BFu16ll_Ip()
{
  {
    init_simple_test("B_BFu16ll_Ip");
    static B_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_Ip(Test_B_BFu16ll_Ip, "B_BFu16ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_L  {
  bool v1;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 B_BFu16ll_L) C1{ Fc FL:16 FL}



static void Test_B_BFu16ll_L()
{
  {
    init_simple_test("B_BFu16ll_L");
    static B_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_L)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_L");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16ll_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_L(Test_B_BFu16ll_L, "B_BFu16ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_S  {
  bool v1;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 B_BFu16ll_S) C1{ Fc FL:16 Fs}



static void Test_B_BFu16ll_S()
{
  {
    init_simple_test("B_BFu16ll_S");
    static B_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_S)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_S");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_S");
    check_field_offset(lv, v3, 4, "B_BFu16ll_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_S(Test_B_BFu16ll_S, "B_BFu16ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_Uc  {
  bool v1;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 B_BFu16ll_Uc) C1{ Fc FL:16 Fc}



static void Test_B_BFu16ll_Uc()
{
  {
    init_simple_test("B_BFu16ll_Uc");
    static B_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_Uc");
    check_field_offset(lv, v3, 3, "B_BFu16ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_Uc(Test_B_BFu16ll_Uc, "B_BFu16ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_Ui  {
  bool v1;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 B_BFu16ll_Ui) C1{ Fc FL:16 Fi}



static void Test_B_BFu16ll_Ui()
{
  {
    init_simple_test("B_BFu16ll_Ui");
    static B_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "B_BFu16ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_Ui(Test_B_BFu16ll_Ui, "B_BFu16ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_Ul  {
  bool v1;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 B_BFu16ll_Ul) C1{ Fc FL:16 FL}



static void Test_B_BFu16ll_Ul()
{
  {
    init_simple_test("B_BFu16ll_Ul");
    static B_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_Ul(Test_B_BFu16ll_Ul, "B_BFu16ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_Us  {
  bool v1;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 B_BFu16ll_Us) C1{ Fc FL:16 Fs}



static void Test_B_BFu16ll_Us()
{
  {
    init_simple_test("B_BFu16ll_Us");
    static B_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_Us)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "B_BFu16ll_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_Us(Test_B_BFu16ll_Us, "B_BFu16ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16ll_Vp  {
  bool v1;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 B_BFu16ll_Vp) C1{ Fc FL:16 Fp}



static void Test_B_BFu16ll_Vp()
{
  {
    init_simple_test("B_BFu16ll_Vp");
    static B_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16ll_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu16ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "B_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "B_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16ll_Vp(Test_B_BFu16ll_Vp, "B_BFu16ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s  {
  bool v1;
  unsigned short v2:16;
};
//SIG(1 B_BFu16s) C1{ Fc Fs:16}



static void Test_B_BFu16s()
{
  {
    init_simple_test("B_BFu16s");
    static B_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu16s(Test_B_BFu16s, "B_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_B  {
  bool v1;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 B_BFu16s_B) C1{ Fc Fs:16 Fc}



static void Test_B_BFu16s_B()
{
  {
    init_simple_test("B_BFu16s_B");
    static B_BFu16s_B lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_B)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_B)");
    check_field_offset(lv, v1, 0, "B_BFu16s_B.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_B");
    check_field_offset(lv, v3, 4, "B_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_B(Test_B_BFu16s_B, "B_BFu16s_B", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu15i  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 B_BFu16s_BFu15i) C1{ Fc Fs:16 Fi:15}



static void Test_B_BFu16s_BFu15i()
{
  {
    init_simple_test("B_BFu16s_BFu15i");
    static B_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu16s_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu15i(Test_B_BFu16s_BFu15i, "B_BFu16s_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu15ll  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 B_BFu16s_BFu15ll) C1{ Fc Fs:16 FL:15}



static void Test_B_BFu16s_BFu15ll()
{
  {
    init_simple_test("B_BFu16s_BFu15ll");
    static B_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu16s_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu15ll(Test_B_BFu16s_BFu15ll, "B_BFu16s_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu15s  {
  bool v1;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 B_BFu16s_BFu15s) C1{ Fc Fs:16 Fs:15}



static void Test_B_BFu16s_BFu15s()
{
  {
    init_simple_test("B_BFu16s_BFu15s");
    static B_BFu16s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu16s_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu15s(Test_B_BFu16s_BFu15s, "B_BFu16s_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu16i  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 B_BFu16s_BFu16i) C1{ Fc Fs:16 Fi:16}



static void Test_B_BFu16s_BFu16i()
{
  {
    init_simple_test("B_BFu16s_BFu16i");
    static B_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu16i(Test_B_BFu16s_BFu16i, "B_BFu16s_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu16ll  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 B_BFu16s_BFu16ll) C1{ Fc Fs:16 FL:16}



static void Test_B_BFu16s_BFu16ll()
{
  {
    init_simple_test("B_BFu16s_BFu16ll");
    static B_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu16ll(Test_B_BFu16s_BFu16ll, "B_BFu16s_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu16s  {
  bool v1;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 B_BFu16s_BFu16s) C1{ Fc Fs:16 Fs:16}



static void Test_B_BFu16s_BFu16s()
{
  {
    init_simple_test("B_BFu16s_BFu16s");
    static B_BFu16s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu16s(Test_B_BFu16s_BFu16s, "B_BFu16s_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu17i  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 B_BFu16s_BFu17i) C1{ Fc Fs:16 Fi:17}



static void Test_B_BFu16s_BFu17i()
{
  {
    init_simple_test("B_BFu16s_BFu17i");
    static B_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu17i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu16s_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu17i(Test_B_BFu16s_BFu17i, "B_BFu16s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu17ll  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 B_BFu16s_BFu17ll) C1{ Fc Fs:16 FL:17}



static void Test_B_BFu16s_BFu17ll()
{
  {
    init_simple_test("B_BFu16s_BFu17ll");
    static B_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu16s_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu17ll(Test_B_BFu16s_BFu17ll, "B_BFu16s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu1c  {
  bool v1;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 B_BFu16s_BFu1c) C1{ Fc Fs:16 Fc:1}



static void Test_B_BFu16s_BFu1c()
{
  {
    init_simple_test("B_BFu16s_BFu1c");
    static B_BFu16s_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_BFu16s_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu1c(Test_B_BFu16s_BFu1c, "B_BFu16s_BFu1c", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu1i  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 B_BFu16s_BFu1i) C1{ Fc Fs:16 Fi:1}



static void Test_B_BFu16s_BFu1i()
{
  {
    init_simple_test("B_BFu16s_BFu1i");
    static B_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_BFu16s_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu1i(Test_B_BFu16s_BFu1i, "B_BFu16s_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu1ll  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 B_BFu16s_BFu1ll) C1{ Fc Fs:16 FL:1}



static void Test_B_BFu16s_BFu1ll()
{
  {
    init_simple_test("B_BFu16s_BFu1ll");
    static B_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_BFu16s_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu1ll(Test_B_BFu16s_BFu1ll, "B_BFu16s_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu1s  {
  bool v1;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 B_BFu16s_BFu1s) C1{ Fc Fs:16 Fs:1}



static void Test_B_BFu16s_BFu1s()
{
  {
    init_simple_test("B_BFu16s_BFu1s");
    static B_BFu16s_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_BFu16s_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu1s(Test_B_BFu16s_BFu1s, "B_BFu16s_BFu1s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu31i  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 B_BFu16s_BFu31i) C1{ Fc Fs:16 Fi:31}



static void Test_B_BFu16s_BFu31i()
{
  {
    init_simple_test("B_BFu16s_BFu31i");
    static B_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu31i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu16s_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu31i(Test_B_BFu16s_BFu31i, "B_BFu16s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu31ll  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 B_BFu16s_BFu31ll) C1{ Fc Fs:16 FL:31}



static void Test_B_BFu16s_BFu31ll()
{
  {
    init_simple_test("B_BFu16s_BFu31ll");
    static B_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu16s_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu31ll(Test_B_BFu16s_BFu31ll, "B_BFu16s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu32i  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 B_BFu16s_BFu32i) C1{ Fc Fs:16 Fi:32}



static void Test_B_BFu16s_BFu32i()
{
  {
    init_simple_test("B_BFu16s_BFu32i");
    static B_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu32i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu16s_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu32i(Test_B_BFu16s_BFu32i, "B_BFu16s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu32ll  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 B_BFu16s_BFu32ll) C1{ Fc Fs:16 FL:32}



static void Test_B_BFu16s_BFu32ll()
{
  {
    init_simple_test("B_BFu16s_BFu32ll");
    static B_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu16s_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu32ll(Test_B_BFu16s_BFu32ll, "B_BFu16s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu33  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 B_BFu16s_BFu33) C1{ Fc Fs:16 FL:33}



static void Test_B_BFu16s_BFu33()
{
  {
    init_simple_test("B_BFu16s_BFu33");
    static B_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "B_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "B_BFu16s_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu33(Test_B_BFu16s_BFu33, "B_BFu16s_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu7c  {
  bool v1;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 B_BFu16s_BFu7c) C1{ Fc Fs:16 Fc:7}



static void Test_B_BFu16s_BFu7c()
{
  {
    init_simple_test("B_BFu16s_BFu7c");
    static B_BFu16s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_BFu16s_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu7c(Test_B_BFu16s_BFu7c, "B_BFu16s_BFu7c", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu7i  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 B_BFu16s_BFu7i) C1{ Fc Fs:16 Fi:7}



static void Test_B_BFu16s_BFu7i()
{
  {
    init_simple_test("B_BFu16s_BFu7i");
    static B_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_BFu16s_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu7i(Test_B_BFu16s_BFu7i, "B_BFu16s_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu7ll  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 B_BFu16s_BFu7ll) C1{ Fc Fs:16 FL:7}



static void Test_B_BFu16s_BFu7ll()
{
  {
    init_simple_test("B_BFu16s_BFu7ll");
    static B_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_BFu16s_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu7ll(Test_B_BFu16s_BFu7ll, "B_BFu16s_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu7s  {
  bool v1;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 B_BFu16s_BFu7s) C1{ Fc Fs:16 Fs:7}



static void Test_B_BFu16s_BFu7s()
{
  {
    init_simple_test("B_BFu16s_BFu7s");
    static B_BFu16s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_BFu16s_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu7s(Test_B_BFu16s_BFu7s, "B_BFu16s_BFu7s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu8c  {
  bool v1;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 B_BFu16s_BFu8c) C1{ Fc Fs:16 Fc:8}



static void Test_B_BFu16s_BFu8c()
{
  {
    init_simple_test("B_BFu16s_BFu8c");
    static B_BFu16s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu16s_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu8c(Test_B_BFu16s_BFu8c, "B_BFu16s_BFu8c", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu8i  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 B_BFu16s_BFu8i) C1{ Fc Fs:16 Fi:8}



static void Test_B_BFu16s_BFu8i()
{
  {
    init_simple_test("B_BFu16s_BFu8i");
    static B_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu16s_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu8i(Test_B_BFu16s_BFu8i, "B_BFu16s_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu8ll  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 B_BFu16s_BFu8ll) C1{ Fc Fs:16 FL:8}



static void Test_B_BFu16s_BFu8ll()
{
  {
    init_simple_test("B_BFu16s_BFu8ll");
    static B_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu16s_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu8ll(Test_B_BFu16s_BFu8ll, "B_BFu16s_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu8s  {
  bool v1;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 B_BFu16s_BFu8s) C1{ Fc Fs:16 Fs:8}



static void Test_B_BFu16s_BFu8s()
{
  {
    init_simple_test("B_BFu16s_BFu8s");
    static B_BFu16s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu16s_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu8s(Test_B_BFu16s_BFu8s, "B_BFu16s_BFu8s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu9i  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 B_BFu16s_BFu9i) C1{ Fc Fs:16 Fi:9}



static void Test_B_BFu16s_BFu9i()
{
  {
    init_simple_test("B_BFu16s_BFu9i");
    static B_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu16s_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu9i(Test_B_BFu16s_BFu9i, "B_BFu16s_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu9ll  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 B_BFu16s_BFu9ll) C1{ Fc Fs:16 FL:9}



static void Test_B_BFu16s_BFu9ll()
{
  {
    init_simple_test("B_BFu16s_BFu9ll");
    static B_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu16s_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu9ll(Test_B_BFu16s_BFu9ll, "B_BFu16s_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_BFu9s  {
  bool v1;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 B_BFu16s_BFu9s) C1{ Fc Fs:16 Fs:9}



static void Test_B_BFu16s_BFu9s()
{
  {
    init_simple_test("B_BFu16s_BFu9s");
    static B_BFu16s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu16s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu16s_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu16s_BFu9s(Test_B_BFu16s_BFu9s, "B_BFu16s_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_C  {
  bool v1;
  unsigned short v2:16;
  char v3;
};
//SIG(1 B_BFu16s_C) C1{ Fc Fs:16 Fc}



static void Test_B_BFu16s_C()
{
  {
    init_simple_test("B_BFu16s_C");
    static B_BFu16s_C lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_C)");
    check_field_offset(lv, v1, 0, "B_BFu16s_C.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_C");
    check_field_offset(lv, v3, 4, "B_BFu16s_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_C(Test_B_BFu16s_C, "B_BFu16s_C", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_D  {
  bool v1;
  unsigned short v2:16;
  double v3;
};
//SIG(1 B_BFu16s_D) C1{ Fc Fs:16 FL}



static void Test_B_BFu16s_D()
{
  {
    init_simple_test("B_BFu16s_D");
    static B_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_D)");
    check_field_offset(lv, v1, 0, "B_BFu16s_D.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16s_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_D(Test_B_BFu16s_D, "B_BFu16s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_F  {
  bool v1;
  unsigned short v2:16;
  float v3;
};
//SIG(1 B_BFu16s_F) C1{ Fc Fs:16 Fi}



static void Test_B_BFu16s_F()
{
  {
    init_simple_test("B_BFu16s_F");
    static B_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_F)");
    check_field_offset(lv, v1, 0, "B_BFu16s_F.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_F");
    check_field_offset(lv, v3, 4, "B_BFu16s_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_F(Test_B_BFu16s_F, "B_BFu16s_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_I  {
  bool v1;
  unsigned short v2:16;
  int v3;
};
//SIG(1 B_BFu16s_I) C1{ Fc Fs:16 Fi}



static void Test_B_BFu16s_I()
{
  {
    init_simple_test("B_BFu16s_I");
    static B_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_I)");
    check_field_offset(lv, v1, 0, "B_BFu16s_I.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_I");
    check_field_offset(lv, v3, 4, "B_BFu16s_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_I(Test_B_BFu16s_I, "B_BFu16s_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_Ip  {
  bool v1;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 B_BFu16s_Ip) C1{ Fc Fs:16 Fp}



static void Test_B_BFu16s_Ip()
{
  {
    init_simple_test("B_BFu16s_Ip");
    static B_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu16s_Ip.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16s_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_Ip(Test_B_BFu16s_Ip, "B_BFu16s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_L  {
  bool v1;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 B_BFu16s_L) C1{ Fc Fs:16 FL}



static void Test_B_BFu16s_L()
{
  {
    init_simple_test("B_BFu16s_L");
    static B_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_L)");
    check_field_offset(lv, v1, 0, "B_BFu16s_L.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16s_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_L(Test_B_BFu16s_L, "B_BFu16s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_S  {
  bool v1;
  unsigned short v2:16;
  short v3;
};
//SIG(1 B_BFu16s_S) C1{ Fc Fs:16 Fs}



static void Test_B_BFu16s_S()
{
  {
    init_simple_test("B_BFu16s_S");
    static B_BFu16s_S lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_S)");
    check_field_offset(lv, v1, 0, "B_BFu16s_S.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_S");
    check_field_offset(lv, v3, 4, "B_BFu16s_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_S(Test_B_BFu16s_S, "B_BFu16s_S", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_Uc  {
  bool v1;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 B_BFu16s_Uc) C1{ Fc Fs:16 Fc}



static void Test_B_BFu16s_Uc()
{
  {
    init_simple_test("B_BFu16s_Uc");
    static B_BFu16s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu16s_Uc.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "B_BFu16s_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_Uc(Test_B_BFu16s_Uc, "B_BFu16s_Uc", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_Ui  {
  bool v1;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 B_BFu16s_Ui) C1{ Fc Fs:16 Fi}



static void Test_B_BFu16s_Ui()
{
  {
    init_simple_test("B_BFu16s_Ui");
    static B_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu16s_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu16s_Ui.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "B_BFu16s_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_Ui(Test_B_BFu16s_Ui, "B_BFu16s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_Ul  {
  bool v1;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 B_BFu16s_Ul) C1{ Fc Fs:16 FL}



static void Test_B_BFu16s_Ul()
{
  {
    init_simple_test("B_BFu16s_Ul");
    static B_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu16s_Ul.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16s_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_Ul(Test_B_BFu16s_Ul, "B_BFu16s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_Us  {
  bool v1;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 B_BFu16s_Us) C1{ Fc Fs:16 Fs}



static void Test_B_BFu16s_Us()
{
  {
    init_simple_test("B_BFu16s_Us");
    static B_BFu16s_Us lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu16s_Us)");
    check_field_offset(lv, v1, 0, "B_BFu16s_Us.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_Us");
    check_field_offset(lv, v3, 4, "B_BFu16s_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_Us(Test_B_BFu16s_Us, "B_BFu16s_Us", 6);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu16s_Vp  {
  bool v1;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 B_BFu16s_Vp) C1{ Fc Fs:16 Fp}



static void Test_B_BFu16s_Vp()
{
  {
    init_simple_test("B_BFu16s_Vp");
    static B_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu16s_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu16s_Vp.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "B_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "B_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu16s_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu16s_Vp(Test_B_BFu16s_Vp, "B_BFu16s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i  {
  bool v1;
  unsigned int v2:17;
};
//SIG(1 B_BFu17i) C1{ Fc Fi:17}



static void Test_B_BFu17i()
{
  {
    init_simple_test("B_BFu17i");
    static B_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu17i(Test_B_BFu17i, "B_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_B  {
  bool v1;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 B_BFu17i_B) C1{ Fc Fi:17 Fc}



static void Test_B_BFu17i_B()
{
  {
    init_simple_test("B_BFu17i_B");
    static B_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_B)");
    check_field_offset(lv, v1, 0, "B_BFu17i_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_B");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_B");
    check_field_offset(lv, v3, 4, "B_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_B(Test_B_BFu17i_B, "B_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu15i  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 B_BFu17i_BFu15i) C1{ Fc Fi:17 Fi:15}



static void Test_B_BFu17i_BFu15i()
{
  {
    init_simple_test("B_BFu17i_BFu15i");
    static B_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu17i_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu15i(Test_B_BFu17i_BFu15i, "B_BFu17i_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu15ll  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 B_BFu17i_BFu15ll) C1{ Fc Fi:17 FL:15}



static void Test_B_BFu17i_BFu15ll()
{
  {
    init_simple_test("B_BFu17i_BFu15ll");
    static B_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "B_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "B_BFu17i_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu15ll(Test_B_BFu17i_BFu15ll, "B_BFu17i_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu15s  {
  bool v1;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 B_BFu17i_BFu15s) C1{ Fc Fi:17 Fs:15}



static void Test_B_BFu17i_BFu15s()
{
  {
    init_simple_test("B_BFu17i_BFu15s");
    static B_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu17i_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu15s(Test_B_BFu17i_BFu15s, "B_BFu17i_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu16i  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 B_BFu17i_BFu16i) C1{ Fc Fi:17 Fi:16}



static void Test_B_BFu17i_BFu16i()
{
  {
    init_simple_test("B_BFu17i_BFu16i");
    static B_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu17i_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu16i(Test_B_BFu17i_BFu16i, "B_BFu17i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu16ll  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 B_BFu17i_BFu16ll) C1{ Fc Fi:17 FL:16}



static void Test_B_BFu17i_BFu16ll()
{
  {
    init_simple_test("B_BFu17i_BFu16ll");
    static B_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "B_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "B_BFu17i_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu16ll(Test_B_BFu17i_BFu16ll, "B_BFu17i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu16s  {
  bool v1;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 B_BFu17i_BFu16s) C1{ Fc Fi:17 Fs:16}



static void Test_B_BFu17i_BFu16s()
{
  {
    init_simple_test("B_BFu17i_BFu16s");
    static B_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu17i_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu16s(Test_B_BFu17i_BFu16s, "B_BFu17i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu17i  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 B_BFu17i_BFu17i) C1{ Fc Fi:17 Fi:17}



static void Test_B_BFu17i_BFu17i()
{
  {
    init_simple_test("B_BFu17i_BFu17i");
    static B_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu17i(Test_B_BFu17i_BFu17i, "B_BFu17i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu17ll  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 B_BFu17i_BFu17ll) C1{ Fc Fi:17 FL:17}



static void Test_B_BFu17i_BFu17ll()
{
  {
    init_simple_test("B_BFu17i_BFu17ll");
    static B_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "B_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "B_BFu17i_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu17ll(Test_B_BFu17i_BFu17ll, "B_BFu17i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu1c  {
  bool v1;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 B_BFu17i_BFu1c) C1{ Fc Fi:17 Fc:1}



static void Test_B_BFu17i_BFu1c()
{
  {
    init_simple_test("B_BFu17i_BFu1c");
    static B_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu17i_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu1c(Test_B_BFu17i_BFu1c, "B_BFu17i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu1i  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 B_BFu17i_BFu1i) C1{ Fc Fi:17 Fi:1}



static void Test_B_BFu17i_BFu1i()
{
  {
    init_simple_test("B_BFu17i_BFu1i");
    static B_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu17i_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu1i(Test_B_BFu17i_BFu1i, "B_BFu17i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu1ll  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 B_BFu17i_BFu1ll) C1{ Fc Fi:17 FL:1}



static void Test_B_BFu17i_BFu1ll()
{
  {
    init_simple_test("B_BFu17i_BFu1ll");
    static B_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu17i_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu1ll(Test_B_BFu17i_BFu1ll, "B_BFu17i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu1s  {
  bool v1;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 B_BFu17i_BFu1s) C1{ Fc Fi:17 Fs:1}



static void Test_B_BFu17i_BFu1s()
{
  {
    init_simple_test("B_BFu17i_BFu1s");
    static B_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu17i_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu1s(Test_B_BFu17i_BFu1s, "B_BFu17i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu31i  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 B_BFu17i_BFu31i) C1{ Fc Fi:17 Fi:31}



static void Test_B_BFu17i_BFu31i()
{
  {
    init_simple_test("B_BFu17i_BFu31i");
    static B_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu17i_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu31i(Test_B_BFu17i_BFu31i, "B_BFu17i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu31ll  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 B_BFu17i_BFu31ll) C1{ Fc Fi:17 FL:31}



static void Test_B_BFu17i_BFu31ll()
{
  {
    init_simple_test("B_BFu17i_BFu31ll");
    static B_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "B_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "B_BFu17i_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu31ll(Test_B_BFu17i_BFu31ll, "B_BFu17i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu32i  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 B_BFu17i_BFu32i) C1{ Fc Fi:17 Fi:32}



static void Test_B_BFu17i_BFu32i()
{
  {
    init_simple_test("B_BFu17i_BFu32i");
    static B_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu17i_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu32i(Test_B_BFu17i_BFu32i, "B_BFu17i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu32ll  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 B_BFu17i_BFu32ll) C1{ Fc Fi:17 FL:32}



static void Test_B_BFu17i_BFu32ll()
{
  {
    init_simple_test("B_BFu17i_BFu32ll");
    static B_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "B_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "B_BFu17i_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu32ll(Test_B_BFu17i_BFu32ll, "B_BFu17i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu33  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 B_BFu17i_BFu33) C1{ Fc Fi:17 FL:33}



static void Test_B_BFu17i_BFu33()
{
  {
    init_simple_test("B_BFu17i_BFu33");
    static B_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "B_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "B_BFu17i_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu33(Test_B_BFu17i_BFu33, "B_BFu17i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu7c  {
  bool v1;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 B_BFu17i_BFu7c) C1{ Fc Fi:17 Fc:7}



static void Test_B_BFu17i_BFu7c()
{
  {
    init_simple_test("B_BFu17i_BFu7c");
    static B_BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu17i_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu7c(Test_B_BFu17i_BFu7c, "B_BFu17i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu7i  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 B_BFu17i_BFu7i) C1{ Fc Fi:17 Fi:7}



static void Test_B_BFu17i_BFu7i()
{
  {
    init_simple_test("B_BFu17i_BFu7i");
    static B_BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu17i_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu7i(Test_B_BFu17i_BFu7i, "B_BFu17i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu7ll  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 B_BFu17i_BFu7ll) C1{ Fc Fi:17 FL:7}



static void Test_B_BFu17i_BFu7ll()
{
  {
    init_simple_test("B_BFu17i_BFu7ll");
    static B_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu17i_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu7ll(Test_B_BFu17i_BFu7ll, "B_BFu17i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu7s  {
  bool v1;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 B_BFu17i_BFu7s) C1{ Fc Fi:17 Fs:7}



static void Test_B_BFu17i_BFu7s()
{
  {
    init_simple_test("B_BFu17i_BFu7s");
    static B_BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu17i_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu7s(Test_B_BFu17i_BFu7s, "B_BFu17i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu8c  {
  bool v1;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 B_BFu17i_BFu8c) C1{ Fc Fi:17 Fc:8}



static void Test_B_BFu17i_BFu8c()
{
  {
    init_simple_test("B_BFu17i_BFu8c");
    static B_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu17i_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu8c(Test_B_BFu17i_BFu8c, "B_BFu17i_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu8i  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 B_BFu17i_BFu8i) C1{ Fc Fi:17 Fi:8}



static void Test_B_BFu17i_BFu8i()
{
  {
    init_simple_test("B_BFu17i_BFu8i");
    static B_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu17i_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu8i(Test_B_BFu17i_BFu8i, "B_BFu17i_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu8ll  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 B_BFu17i_BFu8ll) C1{ Fc Fi:17 FL:8}



static void Test_B_BFu17i_BFu8ll()
{
  {
    init_simple_test("B_BFu17i_BFu8ll");
    static B_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "B_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "B_BFu17i_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu8ll(Test_B_BFu17i_BFu8ll, "B_BFu17i_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu8s  {
  bool v1;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 B_BFu17i_BFu8s) C1{ Fc Fi:17 Fs:8}



static void Test_B_BFu17i_BFu8s()
{
  {
    init_simple_test("B_BFu17i_BFu8s");
    static B_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu17i_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu8s(Test_B_BFu17i_BFu8s, "B_BFu17i_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu9i  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 B_BFu17i_BFu9i) C1{ Fc Fi:17 Fi:9}



static void Test_B_BFu17i_BFu9i()
{
  {
    init_simple_test("B_BFu17i_BFu9i");
    static B_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu17i_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu9i(Test_B_BFu17i_BFu9i, "B_BFu17i_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu9ll  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 B_BFu17i_BFu9ll) C1{ Fc Fi:17 FL:9}



static void Test_B_BFu17i_BFu9ll()
{
  {
    init_simple_test("B_BFu17i_BFu9ll");
    static B_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "B_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "B_BFu17i_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu9ll(Test_B_BFu17i_BFu9ll, "B_BFu17i_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_BFu9s  {
  bool v1;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 B_BFu17i_BFu9s) C1{ Fc Fi:17 Fs:9}



static void Test_B_BFu17i_BFu9s()
{
  {
    init_simple_test("B_BFu17i_BFu9s");
    static B_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu17i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu17i_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu17i_BFu9s(Test_B_BFu17i_BFu9s, "B_BFu17i_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_C  {
  bool v1;
  unsigned int v2:17;
  char v3;
};
//SIG(1 B_BFu17i_C) C1{ Fc Fi:17 Fc}



static void Test_B_BFu17i_C()
{
  {
    init_simple_test("B_BFu17i_C");
    static B_BFu17i_C lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_C)");
    check_field_offset(lv, v1, 0, "B_BFu17i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_C");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_C");
    check_field_offset(lv, v3, 4, "B_BFu17i_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_C(Test_B_BFu17i_C, "B_BFu17i_C", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_D  {
  bool v1;
  unsigned int v2:17;
  double v3;
};
//SIG(1 B_BFu17i_D) C1{ Fc Fi:17 FL}



static void Test_B_BFu17i_D()
{
  {
    init_simple_test("B_BFu17i_D");
    static B_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_D)");
    check_field_offset(lv, v1, 0, "B_BFu17i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_D");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17i_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_D(Test_B_BFu17i_D, "B_BFu17i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_F  {
  bool v1;
  unsigned int v2:17;
  float v3;
};
//SIG(1 B_BFu17i_F) C1{ Fc Fi:17 Fi}



static void Test_B_BFu17i_F()
{
  {
    init_simple_test("B_BFu17i_F");
    static B_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_F)");
    check_field_offset(lv, v1, 0, "B_BFu17i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_F");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_F");
    check_field_offset(lv, v3, 4, "B_BFu17i_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_F(Test_B_BFu17i_F, "B_BFu17i_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_I  {
  bool v1;
  unsigned int v2:17;
  int v3;
};
//SIG(1 B_BFu17i_I) C1{ Fc Fi:17 Fi}



static void Test_B_BFu17i_I()
{
  {
    init_simple_test("B_BFu17i_I");
    static B_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_I)");
    check_field_offset(lv, v1, 0, "B_BFu17i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_I");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_I");
    check_field_offset(lv, v3, 4, "B_BFu17i_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_I(Test_B_BFu17i_I, "B_BFu17i_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_Ip  {
  bool v1;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 B_BFu17i_Ip) C1{ Fc Fi:17 Fp}



static void Test_B_BFu17i_Ip()
{
  {
    init_simple_test("B_BFu17i_Ip");
    static B_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu17i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17i_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_Ip(Test_B_BFu17i_Ip, "B_BFu17i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_L  {
  bool v1;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 B_BFu17i_L) C1{ Fc Fi:17 FL}



static void Test_B_BFu17i_L()
{
  {
    init_simple_test("B_BFu17i_L");
    static B_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_L)");
    check_field_offset(lv, v1, 0, "B_BFu17i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_L");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17i_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_L(Test_B_BFu17i_L, "B_BFu17i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_S  {
  bool v1;
  unsigned int v2:17;
  short v3;
};
//SIG(1 B_BFu17i_S) C1{ Fc Fi:17 Fs}



static void Test_B_BFu17i_S()
{
  {
    init_simple_test("B_BFu17i_S");
    static B_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_S)");
    check_field_offset(lv, v1, 0, "B_BFu17i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_S");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_S");
    check_field_offset(lv, v3, 4, "B_BFu17i_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_S(Test_B_BFu17i_S, "B_BFu17i_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_Uc  {
  bool v1;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 B_BFu17i_Uc) C1{ Fc Fi:17 Fc}



static void Test_B_BFu17i_Uc()
{
  {
    init_simple_test("B_BFu17i_Uc");
    static B_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu17i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_Uc");
    check_field_offset(lv, v3, 4, "B_BFu17i_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_Uc(Test_B_BFu17i_Uc, "B_BFu17i_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_Ui  {
  bool v1;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 B_BFu17i_Ui) C1{ Fc Fi:17 Fi}



static void Test_B_BFu17i_Ui()
{
  {
    init_simple_test("B_BFu17i_Ui");
    static B_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu17i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "B_BFu17i_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_Ui(Test_B_BFu17i_Ui, "B_BFu17i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_Ul  {
  bool v1;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 B_BFu17i_Ul) C1{ Fc Fi:17 FL}



static void Test_B_BFu17i_Ul()
{
  {
    init_simple_test("B_BFu17i_Ul");
    static B_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu17i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17i_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_Ul(Test_B_BFu17i_Ul, "B_BFu17i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_Us  {
  bool v1;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 B_BFu17i_Us) C1{ Fc Fi:17 Fs}



static void Test_B_BFu17i_Us()
{
  {
    init_simple_test("B_BFu17i_Us");
    static B_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu17i_Us)");
    check_field_offset(lv, v1, 0, "B_BFu17i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_Us");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_Us");
    check_field_offset(lv, v3, 4, "B_BFu17i_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_Us(Test_B_BFu17i_Us, "B_BFu17i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17i_Vp  {
  bool v1;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 B_BFu17i_Vp) C1{ Fc Fi:17 Fp}



static void Test_B_BFu17i_Vp()
{
  {
    init_simple_test("B_BFu17i_Vp");
    static B_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17i_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu17i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17i_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17i_Vp(Test_B_BFu17i_Vp, "B_BFu17i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll  {
  bool v1;
  __tsu64 v2:17;
};
//SIG(1 B_BFu17ll) C1{ Fc FL:17}



static void Test_B_BFu17ll()
{
  {
    init_simple_test("B_BFu17ll");
    static B_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll(Test_B_BFu17ll, "B_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_B  {
  bool v1;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 B_BFu17ll_B) C1{ Fc FL:17 Fc}



static void Test_B_BFu17ll_B()
{
  {
    init_simple_test("B_BFu17ll_B");
    static B_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_B)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_B");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_B");
    check_field_offset(lv, v3, 4, "B_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_B(Test_B_BFu17ll_B, "B_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu15i  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 B_BFu17ll_BFu15i) C1{ Fc FL:17 Fi:15}



static void Test_B_BFu17ll_BFu15i()
{
  {
    init_simple_test("B_BFu17ll_BFu15i");
    static B_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu17ll_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu15i(Test_B_BFu17ll_BFu15i, "B_BFu17ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu15ll  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 B_BFu17ll_BFu15ll) C1{ Fc FL:17 FL:15}



static void Test_B_BFu17ll_BFu15ll()
{
  {
    init_simple_test("B_BFu17ll_BFu15ll");
    static B_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "B_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "B_BFu17ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu15ll(Test_B_BFu17ll_BFu15ll, "B_BFu17ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu15s  {
  bool v1;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 B_BFu17ll_BFu15s) C1{ Fc FL:17 Fs:15}



static void Test_B_BFu17ll_BFu15s()
{
  {
    init_simple_test("B_BFu17ll_BFu15s");
    static B_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu17ll_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu15s(Test_B_BFu17ll_BFu15s, "B_BFu17ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu16i  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 B_BFu17ll_BFu16i) C1{ Fc FL:17 Fi:16}



static void Test_B_BFu17ll_BFu16i()
{
  {
    init_simple_test("B_BFu17ll_BFu16i");
    static B_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu17ll_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu16i(Test_B_BFu17ll_BFu16i, "B_BFu17ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu16ll  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 B_BFu17ll_BFu16ll) C1{ Fc FL:17 FL:16}



static void Test_B_BFu17ll_BFu16ll()
{
  {
    init_simple_test("B_BFu17ll_BFu16ll");
    static B_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "B_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "B_BFu17ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu16ll(Test_B_BFu17ll_BFu16ll, "B_BFu17ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu16s  {
  bool v1;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 B_BFu17ll_BFu16s) C1{ Fc FL:17 Fs:16}



static void Test_B_BFu17ll_BFu16s()
{
  {
    init_simple_test("B_BFu17ll_BFu16s");
    static B_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu17ll_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu16s(Test_B_BFu17ll_BFu16s, "B_BFu17ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu17i  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 B_BFu17ll_BFu17i) C1{ Fc FL:17 Fi:17}



static void Test_B_BFu17ll_BFu17i()
{
  {
    init_simple_test("B_BFu17ll_BFu17i");
    static B_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu17i(Test_B_BFu17ll_BFu17i, "B_BFu17ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu17ll  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 B_BFu17ll_BFu17ll) C1{ Fc FL:17 FL:17}



static void Test_B_BFu17ll_BFu17ll()
{
  {
    init_simple_test("B_BFu17ll_BFu17ll");
    static B_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "B_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu17ll(Test_B_BFu17ll_BFu17ll, "B_BFu17ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu1c  {
  bool v1;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 B_BFu17ll_BFu1c) C1{ Fc FL:17 Fc:1}



static void Test_B_BFu17ll_BFu1c()
{
  {
    init_simple_test("B_BFu17ll_BFu1c");
    static B_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu17ll_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu1c(Test_B_BFu17ll_BFu1c, "B_BFu17ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu1i  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 B_BFu17ll_BFu1i) C1{ Fc FL:17 Fi:1}



static void Test_B_BFu17ll_BFu1i()
{
  {
    init_simple_test("B_BFu17ll_BFu1i");
    static B_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu17ll_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu1i(Test_B_BFu17ll_BFu1i, "B_BFu17ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu1ll  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 B_BFu17ll_BFu1ll) C1{ Fc FL:17 FL:1}



static void Test_B_BFu17ll_BFu1ll()
{
  {
    init_simple_test("B_BFu17ll_BFu1ll");
    static B_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu17ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu1ll(Test_B_BFu17ll_BFu1ll, "B_BFu17ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu1s  {
  bool v1;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 B_BFu17ll_BFu1s) C1{ Fc FL:17 Fs:1}



static void Test_B_BFu17ll_BFu1s()
{
  {
    init_simple_test("B_BFu17ll_BFu1s");
    static B_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu17ll_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu1s(Test_B_BFu17ll_BFu1s, "B_BFu17ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu31i  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 B_BFu17ll_BFu31i) C1{ Fc FL:17 Fi:31}



static void Test_B_BFu17ll_BFu31i()
{
  {
    init_simple_test("B_BFu17ll_BFu31i");
    static B_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu17ll_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu31i(Test_B_BFu17ll_BFu31i, "B_BFu17ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu31ll  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 B_BFu17ll_BFu31ll) C1{ Fc FL:17 FL:31}



static void Test_B_BFu17ll_BFu31ll()
{
  {
    init_simple_test("B_BFu17ll_BFu31ll");
    static B_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "B_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "B_BFu17ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu31ll(Test_B_BFu17ll_BFu31ll, "B_BFu17ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu32i  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 B_BFu17ll_BFu32i) C1{ Fc FL:17 Fi:32}



static void Test_B_BFu17ll_BFu32i()
{
  {
    init_simple_test("B_BFu17ll_BFu32i");
    static B_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu17ll_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu32i(Test_B_BFu17ll_BFu32i, "B_BFu17ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu32ll  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 B_BFu17ll_BFu32ll) C1{ Fc FL:17 FL:32}



static void Test_B_BFu17ll_BFu32ll()
{
  {
    init_simple_test("B_BFu17ll_BFu32ll");
    static B_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "B_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "B_BFu17ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu32ll(Test_B_BFu17ll_BFu32ll, "B_BFu17ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu33  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 B_BFu17ll_BFu33) C1{ Fc FL:17 FL:33}



static void Test_B_BFu17ll_BFu33()
{
  {
    init_simple_test("B_BFu17ll_BFu33");
    static B_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "B_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "B_BFu17ll_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu33(Test_B_BFu17ll_BFu33, "B_BFu17ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu7c  {
  bool v1;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 B_BFu17ll_BFu7c) C1{ Fc FL:17 Fc:7}



static void Test_B_BFu17ll_BFu7c()
{
  {
    init_simple_test("B_BFu17ll_BFu7c");
    static B_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu17ll_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu7c(Test_B_BFu17ll_BFu7c, "B_BFu17ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu7i  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 B_BFu17ll_BFu7i) C1{ Fc FL:17 Fi:7}



static void Test_B_BFu17ll_BFu7i()
{
  {
    init_simple_test("B_BFu17ll_BFu7i");
    static B_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu17ll_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu7i(Test_B_BFu17ll_BFu7i, "B_BFu17ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu7ll  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 B_BFu17ll_BFu7ll) C1{ Fc FL:17 FL:7}



static void Test_B_BFu17ll_BFu7ll()
{
  {
    init_simple_test("B_BFu17ll_BFu7ll");
    static B_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu17ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu7ll(Test_B_BFu17ll_BFu7ll, "B_BFu17ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu7s  {
  bool v1;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 B_BFu17ll_BFu7s) C1{ Fc FL:17 Fs:7}



static void Test_B_BFu17ll_BFu7s()
{
  {
    init_simple_test("B_BFu17ll_BFu7s");
    static B_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu17ll_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu7s(Test_B_BFu17ll_BFu7s, "B_BFu17ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu8c  {
  bool v1;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 B_BFu17ll_BFu8c) C1{ Fc FL:17 Fc:8}



static void Test_B_BFu17ll_BFu8c()
{
  {
    init_simple_test("B_BFu17ll_BFu8c");
    static B_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu17ll_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu8c(Test_B_BFu17ll_BFu8c, "B_BFu17ll_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu8i  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 B_BFu17ll_BFu8i) C1{ Fc FL:17 Fi:8}



static void Test_B_BFu17ll_BFu8i()
{
  {
    init_simple_test("B_BFu17ll_BFu8i");
    static B_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu17ll_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu8i(Test_B_BFu17ll_BFu8i, "B_BFu17ll_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu8ll  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 B_BFu17ll_BFu8ll) C1{ Fc FL:17 FL:8}



static void Test_B_BFu17ll_BFu8ll()
{
  {
    init_simple_test("B_BFu17ll_BFu8ll");
    static B_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "B_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "B_BFu17ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu8ll(Test_B_BFu17ll_BFu8ll, "B_BFu17ll_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu8s  {
  bool v1;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 B_BFu17ll_BFu8s) C1{ Fc FL:17 Fs:8}



static void Test_B_BFu17ll_BFu8s()
{
  {
    init_simple_test("B_BFu17ll_BFu8s");
    static B_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu17ll_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu8s(Test_B_BFu17ll_BFu8s, "B_BFu17ll_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu9i  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 B_BFu17ll_BFu9i) C1{ Fc FL:17 Fi:9}



static void Test_B_BFu17ll_BFu9i()
{
  {
    init_simple_test("B_BFu17ll_BFu9i");
    static B_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu17ll_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu9i(Test_B_BFu17ll_BFu9i, "B_BFu17ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu9ll  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 B_BFu17ll_BFu9ll) C1{ Fc FL:17 FL:9}



static void Test_B_BFu17ll_BFu9ll()
{
  {
    init_simple_test("B_BFu17ll_BFu9ll");
    static B_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "B_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "B_BFu17ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu9ll(Test_B_BFu17ll_BFu9ll, "B_BFu17ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_BFu9s  {
  bool v1;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 B_BFu17ll_BFu9s) C1{ Fc FL:17 Fs:9}



static void Test_B_BFu17ll_BFu9s()
{
  {
    init_simple_test("B_BFu17ll_BFu9s");
    static B_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu17ll_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_BFu9s(Test_B_BFu17ll_BFu9s, "B_BFu17ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_C  {
  bool v1;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 B_BFu17ll_C) C1{ Fc FL:17 Fc}



static void Test_B_BFu17ll_C()
{
  {
    init_simple_test("B_BFu17ll_C");
    static B_BFu17ll_C lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_C)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_C");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_C");
    check_field_offset(lv, v3, 4, "B_BFu17ll_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_C(Test_B_BFu17ll_C, "B_BFu17ll_C", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_D  {
  bool v1;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 B_BFu17ll_D) C1{ Fc FL:17 FL}



static void Test_B_BFu17ll_D()
{
  {
    init_simple_test("B_BFu17ll_D");
    static B_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_D)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_D");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17ll_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_D(Test_B_BFu17ll_D, "B_BFu17ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_F  {
  bool v1;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 B_BFu17ll_F) C1{ Fc FL:17 Fi}



static void Test_B_BFu17ll_F()
{
  {
    init_simple_test("B_BFu17ll_F");
    static B_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_F)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_F");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_F");
    check_field_offset(lv, v3, 4, "B_BFu17ll_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_F(Test_B_BFu17ll_F, "B_BFu17ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_I  {
  bool v1;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 B_BFu17ll_I) C1{ Fc FL:17 Fi}



static void Test_B_BFu17ll_I()
{
  {
    init_simple_test("B_BFu17ll_I");
    static B_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_I)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_I");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_I");
    check_field_offset(lv, v3, 4, "B_BFu17ll_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_I(Test_B_BFu17ll_I, "B_BFu17ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_Ip  {
  bool v1;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 B_BFu17ll_Ip) C1{ Fc FL:17 Fp}



static void Test_B_BFu17ll_Ip()
{
  {
    init_simple_test("B_BFu17ll_Ip");
    static B_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_Ip(Test_B_BFu17ll_Ip, "B_BFu17ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_L  {
  bool v1;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 B_BFu17ll_L) C1{ Fc FL:17 FL}



static void Test_B_BFu17ll_L()
{
  {
    init_simple_test("B_BFu17ll_L");
    static B_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_L)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_L");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17ll_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_L(Test_B_BFu17ll_L, "B_BFu17ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_S  {
  bool v1;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 B_BFu17ll_S) C1{ Fc FL:17 Fs}



static void Test_B_BFu17ll_S()
{
  {
    init_simple_test("B_BFu17ll_S");
    static B_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_S)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_S");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_S");
    check_field_offset(lv, v3, 4, "B_BFu17ll_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_S(Test_B_BFu17ll_S, "B_BFu17ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_Uc  {
  bool v1;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 B_BFu17ll_Uc) C1{ Fc FL:17 Fc}



static void Test_B_BFu17ll_Uc()
{
  {
    init_simple_test("B_BFu17ll_Uc");
    static B_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_Uc");
    check_field_offset(lv, v3, 4, "B_BFu17ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_Uc(Test_B_BFu17ll_Uc, "B_BFu17ll_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_Ui  {
  bool v1;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 B_BFu17ll_Ui) C1{ Fc FL:17 Fi}



static void Test_B_BFu17ll_Ui()
{
  {
    init_simple_test("B_BFu17ll_Ui");
    static B_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "B_BFu17ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_Ui(Test_B_BFu17ll_Ui, "B_BFu17ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_Ul  {
  bool v1;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 B_BFu17ll_Ul) C1{ Fc FL:17 FL}



static void Test_B_BFu17ll_Ul()
{
  {
    init_simple_test("B_BFu17ll_Ul");
    static B_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_Ul(Test_B_BFu17ll_Ul, "B_BFu17ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_Us  {
  bool v1;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 B_BFu17ll_Us) C1{ Fc FL:17 Fs}



static void Test_B_BFu17ll_Us()
{
  {
    init_simple_test("B_BFu17ll_Us");
    static B_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_Us)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "B_BFu17ll_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_Us(Test_B_BFu17ll_Us, "B_BFu17ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu17ll_Vp  {
  bool v1;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 B_BFu17ll_Vp) C1{ Fc FL:17 Fp}



static void Test_B_BFu17ll_Vp()
{
  {
    init_simple_test("B_BFu17ll_Vp");
    static B_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu17ll_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu17ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "B_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "B_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu17ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu17ll_Vp(Test_B_BFu17ll_Vp, "B_BFu17ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c  {
  bool v1;
  unsigned char v2:1;
};
//SIG(1 B_BFu1c) C1{ Fc Fc:1}



static void Test_B_BFu1c()
{
  {
    init_simple_test("B_BFu1c");
    static B_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu1c(Test_B_BFu1c, "B_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_B  {
  bool v1;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 B_BFu1c_B) C1{ Fc Fc:1 Fc}



static void Test_B_BFu1c_B()
{
  {
    init_simple_test("B_BFu1c_B");
    static B_BFu1c_B lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu1c_B)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu1c_B)");
    check_field_offset(lv, v1, 0, "B_BFu1c_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_B");
    check_field_offset(lv, v3, 2, "B_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_B(Test_B_BFu1c_B, "B_BFu1c_B", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu15i  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 B_BFu1c_BFu15i) C1{ Fc Fc:1 Fi:15}



static void Test_B_BFu1c_BFu15i()
{
  {
    init_simple_test("B_BFu1c_BFu15i");
    static B_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "B_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "B_BFu1c_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu15i(Test_B_BFu1c_BFu15i, "B_BFu1c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu15ll  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 B_BFu1c_BFu15ll) C1{ Fc Fc:1 FL:15}



static void Test_B_BFu1c_BFu15ll()
{
  {
    init_simple_test("B_BFu1c_BFu15ll");
    static B_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "B_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "B_BFu1c_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu15ll(Test_B_BFu1c_BFu15ll, "B_BFu1c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu15s  {
  bool v1;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 B_BFu1c_BFu15s) C1{ Fc Fc:1 Fs:15}



static void Test_B_BFu1c_BFu15s()
{
  {
    init_simple_test("B_BFu1c_BFu15s");
    static B_BFu1c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1c_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu1c_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu15s(Test_B_BFu1c_BFu15s, "B_BFu1c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu16i  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 B_BFu1c_BFu16i) C1{ Fc Fc:1 Fi:16}



static void Test_B_BFu1c_BFu16i()
{
  {
    init_simple_test("B_BFu1c_BFu16i");
    static B_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "B_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "B_BFu1c_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu16i(Test_B_BFu1c_BFu16i, "B_BFu1c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu16ll  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 B_BFu1c_BFu16ll) C1{ Fc Fc:1 FL:16}



static void Test_B_BFu1c_BFu16ll()
{
  {
    init_simple_test("B_BFu1c_BFu16ll");
    static B_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "B_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "B_BFu1c_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu16ll(Test_B_BFu1c_BFu16ll, "B_BFu1c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu16s  {
  bool v1;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 B_BFu1c_BFu16s) C1{ Fc Fc:1 Fs:16}



static void Test_B_BFu1c_BFu16s()
{
  {
    init_simple_test("B_BFu1c_BFu16s");
    static B_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1c_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu1c_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu16s(Test_B_BFu1c_BFu16s, "B_BFu1c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu17i  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 B_BFu1c_BFu17i) C1{ Fc Fc:1 Fi:17}



static void Test_B_BFu1c_BFu17i()
{
  {
    init_simple_test("B_BFu1c_BFu17i");
    static B_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "B_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "B_BFu1c_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu17i(Test_B_BFu1c_BFu17i, "B_BFu1c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu17ll  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 B_BFu1c_BFu17ll) C1{ Fc Fc:1 FL:17}



static void Test_B_BFu1c_BFu17ll()
{
  {
    init_simple_test("B_BFu1c_BFu17ll");
    static B_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "B_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "B_BFu1c_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu17ll(Test_B_BFu1c_BFu17ll, "B_BFu1c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu1c  {
  bool v1;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 B_BFu1c_BFu1c) C1{ Fc Fc:1 Fc:1}



static void Test_B_BFu1c_BFu1c()
{
  {
    init_simple_test("B_BFu1c_BFu1c");
    static B_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu1c_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1c_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu1c(Test_B_BFu1c_BFu1c, "B_BFu1c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu1i  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 B_BFu1c_BFu1i) C1{ Fc Fc:1 Fi:1}



static void Test_B_BFu1c_BFu1i()
{
  {
    init_simple_test("B_BFu1c_BFu1i");
    static B_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1c_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu1i(Test_B_BFu1c_BFu1i, "B_BFu1c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu1ll  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 B_BFu1c_BFu1ll) C1{ Fc Fc:1 FL:1}



static void Test_B_BFu1c_BFu1ll()
{
  {
    init_simple_test("B_BFu1c_BFu1ll");
    static B_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1c_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu1ll(Test_B_BFu1c_BFu1ll, "B_BFu1c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu1s  {
  bool v1;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 B_BFu1c_BFu1s) C1{ Fc Fc:1 Fs:1}



static void Test_B_BFu1c_BFu1s()
{
  {
    init_simple_test("B_BFu1c_BFu1s");
    static B_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1c_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1c_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu1s(Test_B_BFu1c_BFu1s, "B_BFu1c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu31i  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 B_BFu1c_BFu31i) C1{ Fc Fc:1 Fi:31}



static void Test_B_BFu1c_BFu31i()
{
  {
    init_simple_test("B_BFu1c_BFu31i");
    static B_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu1c_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu31i(Test_B_BFu1c_BFu31i, "B_BFu1c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu31ll  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 B_BFu1c_BFu31ll) C1{ Fc Fc:1 FL:31}



static void Test_B_BFu1c_BFu31ll()
{
  {
    init_simple_test("B_BFu1c_BFu31ll");
    static B_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "B_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "B_BFu1c_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu31ll(Test_B_BFu1c_BFu31ll, "B_BFu1c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu32i  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 B_BFu1c_BFu32i) C1{ Fc Fc:1 Fi:32}



static void Test_B_BFu1c_BFu32i()
{
  {
    init_simple_test("B_BFu1c_BFu32i");
    static B_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu1c_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu32i(Test_B_BFu1c_BFu32i, "B_BFu1c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu32ll  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 B_BFu1c_BFu32ll) C1{ Fc Fc:1 FL:32}



static void Test_B_BFu1c_BFu32ll()
{
  {
    init_simple_test("B_BFu1c_BFu32ll");
    static B_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "B_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "B_BFu1c_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu32ll(Test_B_BFu1c_BFu32ll, "B_BFu1c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu33  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 B_BFu1c_BFu33) C1{ Fc Fc:1 FL:33}



static void Test_B_BFu1c_BFu33()
{
  {
    init_simple_test("B_BFu1c_BFu33");
    static B_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "B_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "B_BFu1c_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu33(Test_B_BFu1c_BFu33, "B_BFu1c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu7c  {
  bool v1;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 B_BFu1c_BFu7c) C1{ Fc Fc:1 Fc:7}



static void Test_B_BFu1c_BFu7c()
{
  {
    init_simple_test("B_BFu1c_BFu7c");
    static B_BFu1c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu1c_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1c_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu7c(Test_B_BFu1c_BFu7c, "B_BFu1c_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu7i  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 B_BFu1c_BFu7i) C1{ Fc Fc:1 Fi:7}



static void Test_B_BFu1c_BFu7i()
{
  {
    init_simple_test("B_BFu1c_BFu7i");
    static B_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1c_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu7i(Test_B_BFu1c_BFu7i, "B_BFu1c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu7ll  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 B_BFu1c_BFu7ll) C1{ Fc Fc:1 FL:7}



static void Test_B_BFu1c_BFu7ll()
{
  {
    init_simple_test("B_BFu1c_BFu7ll");
    static B_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1c_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu7ll(Test_B_BFu1c_BFu7ll, "B_BFu1c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu7s  {
  bool v1;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 B_BFu1c_BFu7s) C1{ Fc Fc:1 Fs:7}



static void Test_B_BFu1c_BFu7s()
{
  {
    init_simple_test("B_BFu1c_BFu7s");
    static B_BFu1c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1c_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1c_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu7s(Test_B_BFu1c_BFu7s, "B_BFu1c_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu8c  {
  bool v1;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 B_BFu1c_BFu8c) C1{ Fc Fc:1 Fc:8}



static void Test_B_BFu1c_BFu8c()
{
  {
    init_simple_test("B_BFu1c_BFu8c");
    static B_BFu1c_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu1c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu1c_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu1c_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu8c(Test_B_BFu1c_BFu8c, "B_BFu1c_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu8i  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 B_BFu1c_BFu8i) C1{ Fc Fc:1 Fi:8}



static void Test_B_BFu1c_BFu8i()
{
  {
    init_simple_test("B_BFu1c_BFu8i");
    static B_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "B_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "B_BFu1c_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu8i(Test_B_BFu1c_BFu8i, "B_BFu1c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu8ll  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 B_BFu1c_BFu8ll) C1{ Fc Fc:1 FL:8}



static void Test_B_BFu1c_BFu8ll()
{
  {
    init_simple_test("B_BFu1c_BFu8ll");
    static B_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "B_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "B_BFu1c_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu8ll(Test_B_BFu1c_BFu8ll, "B_BFu1c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu8s  {
  bool v1;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 B_BFu1c_BFu8s) C1{ Fc Fc:1 Fs:8}



static void Test_B_BFu1c_BFu8s()
{
  {
    init_simple_test("B_BFu1c_BFu8s");
    static B_BFu1c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1c_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu1c_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu8s(Test_B_BFu1c_BFu8s, "B_BFu1c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu9i  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 B_BFu1c_BFu9i) C1{ Fc Fc:1 Fi:9}



static void Test_B_BFu1c_BFu9i()
{
  {
    init_simple_test("B_BFu1c_BFu9i");
    static B_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "B_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "B_BFu1c_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu9i(Test_B_BFu1c_BFu9i, "B_BFu1c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu9ll  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 B_BFu1c_BFu9ll) C1{ Fc Fc:1 FL:9}



static void Test_B_BFu1c_BFu9ll()
{
  {
    init_simple_test("B_BFu1c_BFu9ll");
    static B_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "B_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "B_BFu1c_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu9ll(Test_B_BFu1c_BFu9ll, "B_BFu1c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_BFu9s  {
  bool v1;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 B_BFu1c_BFu9s) C1{ Fc Fc:1 Fs:9}



static void Test_B_BFu1c_BFu9s()
{
  {
    init_simple_test("B_BFu1c_BFu9s");
    static B_BFu1c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1c_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu1c_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu1c_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu1c_BFu9s(Test_B_BFu1c_BFu9s, "B_BFu1c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_C  {
  bool v1;
  unsigned char v2:1;
  char v3;
};
//SIG(1 B_BFu1c_C) C1{ Fc Fc:1 Fc}



static void Test_B_BFu1c_C()
{
  {
    init_simple_test("B_BFu1c_C");
    static B_BFu1c_C lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu1c_C)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu1c_C)");
    check_field_offset(lv, v1, 0, "B_BFu1c_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_C");
    check_field_offset(lv, v3, 2, "B_BFu1c_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_C(Test_B_BFu1c_C, "B_BFu1c_C", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_D  {
  bool v1;
  unsigned char v2:1;
  double v3;
};
//SIG(1 B_BFu1c_D) C1{ Fc Fc:1 FL}



static void Test_B_BFu1c_D()
{
  {
    init_simple_test("B_BFu1c_D");
    static B_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_D)");
    check_field_offset(lv, v1, 0, "B_BFu1c_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1c_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_D(Test_B_BFu1c_D, "B_BFu1c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_F  {
  bool v1;
  unsigned char v2:1;
  float v3;
};
//SIG(1 B_BFu1c_F) C1{ Fc Fc:1 Fi}



static void Test_B_BFu1c_F()
{
  {
    init_simple_test("B_BFu1c_F");
    static B_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_F)");
    check_field_offset(lv, v1, 0, "B_BFu1c_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_F");
    check_field_offset(lv, v3, 4, "B_BFu1c_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_F(Test_B_BFu1c_F, "B_BFu1c_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_I  {
  bool v1;
  unsigned char v2:1;
  int v3;
};
//SIG(1 B_BFu1c_I) C1{ Fc Fc:1 Fi}



static void Test_B_BFu1c_I()
{
  {
    init_simple_test("B_BFu1c_I");
    static B_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_I)");
    check_field_offset(lv, v1, 0, "B_BFu1c_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_I");
    check_field_offset(lv, v3, 4, "B_BFu1c_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_I(Test_B_BFu1c_I, "B_BFu1c_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_Ip  {
  bool v1;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 B_BFu1c_Ip) C1{ Fc Fc:1 Fp}



static void Test_B_BFu1c_Ip()
{
  {
    init_simple_test("B_BFu1c_Ip");
    static B_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu1c_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1c_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_Ip(Test_B_BFu1c_Ip, "B_BFu1c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_B_BFu1c_L()
{
  {
    init_simple_test("B_BFu1c_L");
    static B_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_L)");
    check_field_offset(lv, v1, 0, "B_BFu1c_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1c_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_L(Test_B_BFu1c_L, "B_BFu1c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_S  {
  bool v1;
  unsigned char v2:1;
  short v3;
};
//SIG(1 B_BFu1c_S) C1{ Fc Fc:1 Fs}



static void Test_B_BFu1c_S()
{
  {
    init_simple_test("B_BFu1c_S");
    static B_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1c_S)");
    check_field_offset(lv, v1, 0, "B_BFu1c_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_S");
    check_field_offset(lv, v3, 2, "B_BFu1c_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_S(Test_B_BFu1c_S, "B_BFu1c_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_Uc  {
  bool v1;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 B_BFu1c_Uc) C1{ Fc Fc:1 Fc}



static void Test_B_BFu1c_Uc()
{
  {
    init_simple_test("B_BFu1c_Uc");
    static B_BFu1c_Uc lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu1c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu1c_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu1c_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_Uc");
    check_field_offset(lv, v3, 2, "B_BFu1c_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_Uc(Test_B_BFu1c_Uc, "B_BFu1c_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_Ui  {
  bool v1;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 B_BFu1c_Ui) C1{ Fc Fc:1 Fi}



static void Test_B_BFu1c_Ui()
{
  {
    init_simple_test("B_BFu1c_Ui");
    static B_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1c_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu1c_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "B_BFu1c_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_Ui(Test_B_BFu1c_Ui, "B_BFu1c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_Ul  {
  bool v1;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 B_BFu1c_Ul) C1{ Fc Fc:1 FL}



static void Test_B_BFu1c_Ul()
{
  {
    init_simple_test("B_BFu1c_Ul");
    static B_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu1c_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1c_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_Ul(Test_B_BFu1c_Ul, "B_BFu1c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_Us  {
  bool v1;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 B_BFu1c_Us) C1{ Fc Fc:1 Fs}



static void Test_B_BFu1c_Us()
{
  {
    init_simple_test("B_BFu1c_Us");
    static B_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1c_Us)");
    check_field_offset(lv, v1, 0, "B_BFu1c_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_Us");
    check_field_offset(lv, v3, 2, "B_BFu1c_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_Us(Test_B_BFu1c_Us, "B_BFu1c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1c_Vp  {
  bool v1;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 B_BFu1c_Vp) C1{ Fc Fc:1 Fp}



static void Test_B_BFu1c_Vp()
{
  {
    init_simple_test("B_BFu1c_Vp");
    static B_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1c_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu1c_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1c_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1c_Vp(Test_B_BFu1c_Vp, "B_BFu1c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i  {
  bool v1;
  unsigned int v2:1;
};
//SIG(1 B_BFu1i) C1{ Fc Fi:1}



static void Test_B_BFu1i()
{
  {
    init_simple_test("B_BFu1i");
    static B_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu1i(Test_B_BFu1i, "B_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_B  {
  bool v1;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 B_BFu1i_B) C1{ Fc Fi:1 Fc}



static void Test_B_BFu1i_B()
{
  {
    init_simple_test("B_BFu1i_B");
    static B_BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_B)");
    check_field_offset(lv, v1, 0, "B_BFu1i_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_B");
    check_field_offset(lv, v3, 2, "B_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_B(Test_B_BFu1i_B, "B_BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu15i  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 B_BFu1i_BFu15i) C1{ Fc Fi:1 Fi:15}



static void Test_B_BFu1i_BFu15i()
{
  {
    init_simple_test("B_BFu1i_BFu15i");
    static B_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "B_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "B_BFu1i_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu15i(Test_B_BFu1i_BFu15i, "B_BFu1i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu15ll  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 B_BFu1i_BFu15ll) C1{ Fc Fi:1 FL:15}



static void Test_B_BFu1i_BFu15ll()
{
  {
    init_simple_test("B_BFu1i_BFu15ll");
    static B_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "B_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "B_BFu1i_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu15ll(Test_B_BFu1i_BFu15ll, "B_BFu1i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu15s  {
  bool v1;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 B_BFu1i_BFu15s) C1{ Fc Fi:1 Fs:15}



static void Test_B_BFu1i_BFu15s()
{
  {
    init_simple_test("B_BFu1i_BFu15s");
    static B_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu1i_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu15s(Test_B_BFu1i_BFu15s, "B_BFu1i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu16i  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 B_BFu1i_BFu16i) C1{ Fc Fi:1 Fi:16}



static void Test_B_BFu1i_BFu16i()
{
  {
    init_simple_test("B_BFu1i_BFu16i");
    static B_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "B_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "B_BFu1i_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu16i(Test_B_BFu1i_BFu16i, "B_BFu1i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu16ll  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 B_BFu1i_BFu16ll) C1{ Fc Fi:1 FL:16}



static void Test_B_BFu1i_BFu16ll()
{
  {
    init_simple_test("B_BFu1i_BFu16ll");
    static B_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "B_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "B_BFu1i_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu16ll(Test_B_BFu1i_BFu16ll, "B_BFu1i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu16s  {
  bool v1;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 B_BFu1i_BFu16s) C1{ Fc Fi:1 Fs:16}



static void Test_B_BFu1i_BFu16s()
{
  {
    init_simple_test("B_BFu1i_BFu16s");
    static B_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu1i_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu16s(Test_B_BFu1i_BFu16s, "B_BFu1i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu17i  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 B_BFu1i_BFu17i) C1{ Fc Fi:1 Fi:17}



static void Test_B_BFu1i_BFu17i()
{
  {
    init_simple_test("B_BFu1i_BFu17i");
    static B_BFu1i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "B_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "B_BFu1i_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu17i(Test_B_BFu1i_BFu17i, "B_BFu1i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu17ll  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 B_BFu1i_BFu17ll) C1{ Fc Fi:1 FL:17}



static void Test_B_BFu1i_BFu17ll()
{
  {
    init_simple_test("B_BFu1i_BFu17ll");
    static B_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "B_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "B_BFu1i_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu17ll(Test_B_BFu1i_BFu17ll, "B_BFu1i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu1c  {
  bool v1;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 B_BFu1i_BFu1c) C1{ Fc Fi:1 Fc:1}



static void Test_B_BFu1i_BFu1c()
{
  {
    init_simple_test("B_BFu1i_BFu1c");
    static B_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1i_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu1c(Test_B_BFu1i_BFu1c, "B_BFu1i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu1i  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 B_BFu1i_BFu1i) C1{ Fc Fi:1 Fi:1}



static void Test_B_BFu1i_BFu1i()
{
  {
    init_simple_test("B_BFu1i_BFu1i");
    static B_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1i_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu1i(Test_B_BFu1i_BFu1i, "B_BFu1i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu1ll  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 B_BFu1i_BFu1ll) C1{ Fc Fi:1 FL:1}



static void Test_B_BFu1i_BFu1ll()
{
  {
    init_simple_test("B_BFu1i_BFu1ll");
    static B_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1i_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu1ll(Test_B_BFu1i_BFu1ll, "B_BFu1i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu1s  {
  bool v1;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 B_BFu1i_BFu1s) C1{ Fc Fi:1 Fs:1}



static void Test_B_BFu1i_BFu1s()
{
  {
    init_simple_test("B_BFu1i_BFu1s");
    static B_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1i_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu1s(Test_B_BFu1i_BFu1s, "B_BFu1i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu31i  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 B_BFu1i_BFu31i) C1{ Fc Fi:1 Fi:31}



static void Test_B_BFu1i_BFu31i()
{
  {
    init_simple_test("B_BFu1i_BFu31i");
    static B_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu1i_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu31i(Test_B_BFu1i_BFu31i, "B_BFu1i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu31ll  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 B_BFu1i_BFu31ll) C1{ Fc Fi:1 FL:31}



static void Test_B_BFu1i_BFu31ll()
{
  {
    init_simple_test("B_BFu1i_BFu31ll");
    static B_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "B_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "B_BFu1i_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu31ll(Test_B_BFu1i_BFu31ll, "B_BFu1i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu32i  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 B_BFu1i_BFu32i) C1{ Fc Fi:1 Fi:32}



static void Test_B_BFu1i_BFu32i()
{
  {
    init_simple_test("B_BFu1i_BFu32i");
    static B_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu1i_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu32i(Test_B_BFu1i_BFu32i, "B_BFu1i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu32ll  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 B_BFu1i_BFu32ll) C1{ Fc Fi:1 FL:32}



static void Test_B_BFu1i_BFu32ll()
{
  {
    init_simple_test("B_BFu1i_BFu32ll");
    static B_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "B_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "B_BFu1i_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu32ll(Test_B_BFu1i_BFu32ll, "B_BFu1i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu33  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 B_BFu1i_BFu33) C1{ Fc Fi:1 FL:33}



static void Test_B_BFu1i_BFu33()
{
  {
    init_simple_test("B_BFu1i_BFu33");
    static B_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "B_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "B_BFu1i_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu33(Test_B_BFu1i_BFu33, "B_BFu1i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu7c  {
  bool v1;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 B_BFu1i_BFu7c) C1{ Fc Fi:1 Fc:7}



static void Test_B_BFu1i_BFu7c()
{
  {
    init_simple_test("B_BFu1i_BFu7c");
    static B_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1i_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu7c(Test_B_BFu1i_BFu7c, "B_BFu1i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu7i  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 B_BFu1i_BFu7i) C1{ Fc Fi:1 Fi:7}



static void Test_B_BFu1i_BFu7i()
{
  {
    init_simple_test("B_BFu1i_BFu7i");
    static B_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1i_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu7i(Test_B_BFu1i_BFu7i, "B_BFu1i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu7ll  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 B_BFu1i_BFu7ll) C1{ Fc Fi:1 FL:7}



static void Test_B_BFu1i_BFu7ll()
{
  {
    init_simple_test("B_BFu1i_BFu7ll");
    static B_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1i_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu7ll(Test_B_BFu1i_BFu7ll, "B_BFu1i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu7s  {
  bool v1;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 B_BFu1i_BFu7s) C1{ Fc Fi:1 Fs:7}



static void Test_B_BFu1i_BFu7s()
{
  {
    init_simple_test("B_BFu1i_BFu7s");
    static B_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1i_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu7s(Test_B_BFu1i_BFu7s, "B_BFu1i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu8c  {
  bool v1;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 B_BFu1i_BFu8c) C1{ Fc Fi:1 Fc:8}



static void Test_B_BFu1i_BFu8c()
{
  {
    init_simple_test("B_BFu1i_BFu8c");
    static B_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu1i_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu8c(Test_B_BFu1i_BFu8c, "B_BFu1i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu8i  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 B_BFu1i_BFu8i) C1{ Fc Fi:1 Fi:8}



static void Test_B_BFu1i_BFu8i()
{
  {
    init_simple_test("B_BFu1i_BFu8i");
    static B_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "B_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "B_BFu1i_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu8i(Test_B_BFu1i_BFu8i, "B_BFu1i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu8ll  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 B_BFu1i_BFu8ll) C1{ Fc Fi:1 FL:8}



static void Test_B_BFu1i_BFu8ll()
{
  {
    init_simple_test("B_BFu1i_BFu8ll");
    static B_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "B_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "B_BFu1i_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu8ll(Test_B_BFu1i_BFu8ll, "B_BFu1i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu8s  {
  bool v1;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 B_BFu1i_BFu8s) C1{ Fc Fi:1 Fs:8}



static void Test_B_BFu1i_BFu8s()
{
  {
    init_simple_test("B_BFu1i_BFu8s");
    static B_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu1i_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu8s(Test_B_BFu1i_BFu8s, "B_BFu1i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu9i  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 B_BFu1i_BFu9i) C1{ Fc Fi:1 Fi:9}



static void Test_B_BFu1i_BFu9i()
{
  {
    init_simple_test("B_BFu1i_BFu9i");
    static B_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "B_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "B_BFu1i_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu9i(Test_B_BFu1i_BFu9i, "B_BFu1i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu9ll  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 B_BFu1i_BFu9ll) C1{ Fc Fi:1 FL:9}



static void Test_B_BFu1i_BFu9ll()
{
  {
    init_simple_test("B_BFu1i_BFu9ll");
    static B_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "B_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "B_BFu1i_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu9ll(Test_B_BFu1i_BFu9ll, "B_BFu1i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_BFu9s  {
  bool v1;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 B_BFu1i_BFu9s) C1{ Fc Fi:1 Fs:9}



static void Test_B_BFu1i_BFu9s()
{
  {
    init_simple_test("B_BFu1i_BFu9s");
    static B_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu1i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu1i_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu1i_BFu9s(Test_B_BFu1i_BFu9s, "B_BFu1i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_C  {
  bool v1;
  unsigned int v2:1;
  char v3;
};
//SIG(1 B_BFu1i_C) C1{ Fc Fi:1 Fc}



static void Test_B_BFu1i_C()
{
  {
    init_simple_test("B_BFu1i_C");
    static B_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_C)");
    check_field_offset(lv, v1, 0, "B_BFu1i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_C");
    check_field_offset(lv, v3, 2, "B_BFu1i_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_C(Test_B_BFu1i_C, "B_BFu1i_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_D  {
  bool v1;
  unsigned int v2:1;
  double v3;
};
//SIG(1 B_BFu1i_D) C1{ Fc Fi:1 FL}



static void Test_B_BFu1i_D()
{
  {
    init_simple_test("B_BFu1i_D");
    static B_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_D)");
    check_field_offset(lv, v1, 0, "B_BFu1i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1i_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_D(Test_B_BFu1i_D, "B_BFu1i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_F  {
  bool v1;
  unsigned int v2:1;
  float v3;
};
//SIG(1 B_BFu1i_F) C1{ Fc Fi:1 Fi}



static void Test_B_BFu1i_F()
{
  {
    init_simple_test("B_BFu1i_F");
    static B_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_F)");
    check_field_offset(lv, v1, 0, "B_BFu1i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_F");
    check_field_offset(lv, v3, 4, "B_BFu1i_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_F(Test_B_BFu1i_F, "B_BFu1i_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_I  {
  bool v1;
  unsigned int v2:1;
  int v3;
};
//SIG(1 B_BFu1i_I) C1{ Fc Fi:1 Fi}



static void Test_B_BFu1i_I()
{
  {
    init_simple_test("B_BFu1i_I");
    static B_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_I)");
    check_field_offset(lv, v1, 0, "B_BFu1i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_I");
    check_field_offset(lv, v3, 4, "B_BFu1i_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_I(Test_B_BFu1i_I, "B_BFu1i_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_Ip  {
  bool v1;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 B_BFu1i_Ip) C1{ Fc Fi:1 Fp}



static void Test_B_BFu1i_Ip()
{
  {
    init_simple_test("B_BFu1i_Ip");
    static B_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu1i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1i_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_Ip(Test_B_BFu1i_Ip, "B_BFu1i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_B_BFu1i_L()
{
  {
    init_simple_test("B_BFu1i_L");
    static B_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_L)");
    check_field_offset(lv, v1, 0, "B_BFu1i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1i_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_L(Test_B_BFu1i_L, "B_BFu1i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_S  {
  bool v1;
  unsigned int v2:1;
  short v3;
};
//SIG(1 B_BFu1i_S) C1{ Fc Fi:1 Fs}



static void Test_B_BFu1i_S()
{
  {
    init_simple_test("B_BFu1i_S");
    static B_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_S)");
    check_field_offset(lv, v1, 0, "B_BFu1i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_S");
    check_field_offset(lv, v3, 2, "B_BFu1i_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_S(Test_B_BFu1i_S, "B_BFu1i_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_Uc  {
  bool v1;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 B_BFu1i_Uc) C1{ Fc Fi:1 Fc}



static void Test_B_BFu1i_Uc()
{
  {
    init_simple_test("B_BFu1i_Uc");
    static B_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu1i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_Uc");
    check_field_offset(lv, v3, 2, "B_BFu1i_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_Uc(Test_B_BFu1i_Uc, "B_BFu1i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_Ui  {
  bool v1;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 B_BFu1i_Ui) C1{ Fc Fi:1 Fi}



static void Test_B_BFu1i_Ui()
{
  {
    init_simple_test("B_BFu1i_Ui");
    static B_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu1i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "B_BFu1i_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_Ui(Test_B_BFu1i_Ui, "B_BFu1i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_Ul  {
  bool v1;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 B_BFu1i_Ul) C1{ Fc Fi:1 FL}



static void Test_B_BFu1i_Ul()
{
  {
    init_simple_test("B_BFu1i_Ul");
    static B_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu1i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1i_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_Ul(Test_B_BFu1i_Ul, "B_BFu1i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_Us  {
  bool v1;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 B_BFu1i_Us) C1{ Fc Fi:1 Fs}



static void Test_B_BFu1i_Us()
{
  {
    init_simple_test("B_BFu1i_Us");
    static B_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1i_Us)");
    check_field_offset(lv, v1, 0, "B_BFu1i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_Us");
    check_field_offset(lv, v3, 2, "B_BFu1i_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_Us(Test_B_BFu1i_Us, "B_BFu1i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1i_Vp  {
  bool v1;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 B_BFu1i_Vp) C1{ Fc Fi:1 Fp}



static void Test_B_BFu1i_Vp()
{
  {
    init_simple_test("B_BFu1i_Vp");
    static B_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1i_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu1i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1i_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1i_Vp(Test_B_BFu1i_Vp, "B_BFu1i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll  {
  bool v1;
  __tsu64 v2:1;
};
//SIG(1 B_BFu1ll) C1{ Fc FL:1}



static void Test_B_BFu1ll()
{
  {
    init_simple_test("B_BFu1ll");
    static B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll(Test_B_BFu1ll, "B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_B  {
  bool v1;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 B_BFu1ll_B) C1{ Fc FL:1 Fc}



static void Test_B_BFu1ll_B()
{
  {
    init_simple_test("B_BFu1ll_B");
    static B_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_B)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_B");
    check_field_offset(lv, v3, 2, "B_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_B(Test_B_BFu1ll_B, "B_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu15i  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 B_BFu1ll_BFu15i) C1{ Fc FL:1 Fi:15}



static void Test_B_BFu1ll_BFu15i()
{
  {
    init_simple_test("B_BFu1ll_BFu15i");
    static B_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "B_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "B_BFu1ll_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu15i(Test_B_BFu1ll_BFu15i, "B_BFu1ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu15ll  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 B_BFu1ll_BFu15ll) C1{ Fc FL:1 FL:15}



static void Test_B_BFu1ll_BFu15ll()
{
  {
    init_simple_test("B_BFu1ll_BFu15ll");
    static B_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "B_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "B_BFu1ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu15ll(Test_B_BFu1ll_BFu15ll, "B_BFu1ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu15s  {
  bool v1;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 B_BFu1ll_BFu15s) C1{ Fc FL:1 Fs:15}



static void Test_B_BFu1ll_BFu15s()
{
  {
    init_simple_test("B_BFu1ll_BFu15s");
    static B_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu1ll_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu15s(Test_B_BFu1ll_BFu15s, "B_BFu1ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu16i  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 B_BFu1ll_BFu16i) C1{ Fc FL:1 Fi:16}



static void Test_B_BFu1ll_BFu16i()
{
  {
    init_simple_test("B_BFu1ll_BFu16i");
    static B_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "B_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "B_BFu1ll_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu16i(Test_B_BFu1ll_BFu16i, "B_BFu1ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu16ll  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 B_BFu1ll_BFu16ll) C1{ Fc FL:1 FL:16}



static void Test_B_BFu1ll_BFu16ll()
{
  {
    init_simple_test("B_BFu1ll_BFu16ll");
    static B_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "B_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "B_BFu1ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu16ll(Test_B_BFu1ll_BFu16ll, "B_BFu1ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu16s  {
  bool v1;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 B_BFu1ll_BFu16s) C1{ Fc FL:1 Fs:16}



static void Test_B_BFu1ll_BFu16s()
{
  {
    init_simple_test("B_BFu1ll_BFu16s");
    static B_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu1ll_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu16s(Test_B_BFu1ll_BFu16s, "B_BFu1ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu17i  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 B_BFu1ll_BFu17i) C1{ Fc FL:1 Fi:17}



static void Test_B_BFu1ll_BFu17i()
{
  {
    init_simple_test("B_BFu1ll_BFu17i");
    static B_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "B_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "B_BFu1ll_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu17i(Test_B_BFu1ll_BFu17i, "B_BFu1ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu17ll  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 B_BFu1ll_BFu17ll) C1{ Fc FL:1 FL:17}



static void Test_B_BFu1ll_BFu17ll()
{
  {
    init_simple_test("B_BFu1ll_BFu17ll");
    static B_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "B_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "B_BFu1ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu17ll(Test_B_BFu1ll_BFu17ll, "B_BFu1ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu1c  {
  bool v1;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 B_BFu1ll_BFu1c) C1{ Fc FL:1 Fc:1}



static void Test_B_BFu1ll_BFu1c()
{
  {
    init_simple_test("B_BFu1ll_BFu1c");
    static B_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1ll_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu1c(Test_B_BFu1ll_BFu1c, "B_BFu1ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu1i  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 B_BFu1ll_BFu1i) C1{ Fc FL:1 Fi:1}



static void Test_B_BFu1ll_BFu1i()
{
  {
    init_simple_test("B_BFu1ll_BFu1i");
    static B_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1ll_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu1i(Test_B_BFu1ll_BFu1i, "B_BFu1ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu1ll  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 B_BFu1ll_BFu1ll) C1{ Fc FL:1 FL:1}



static void Test_B_BFu1ll_BFu1ll()
{
  {
    init_simple_test("B_BFu1ll_BFu1ll");
    static B_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu1ll(Test_B_BFu1ll_BFu1ll, "B_BFu1ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu1s  {
  bool v1;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 B_BFu1ll_BFu1s) C1{ Fc FL:1 Fs:1}



static void Test_B_BFu1ll_BFu1s()
{
  {
    init_simple_test("B_BFu1ll_BFu1s");
    static B_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1ll_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu1s(Test_B_BFu1ll_BFu1s, "B_BFu1ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu31i  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 B_BFu1ll_BFu31i) C1{ Fc FL:1 Fi:31}



static void Test_B_BFu1ll_BFu31i()
{
  {
    init_simple_test("B_BFu1ll_BFu31i");
    static B_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu1ll_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu31i(Test_B_BFu1ll_BFu31i, "B_BFu1ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu31ll  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 B_BFu1ll_BFu31ll) C1{ Fc FL:1 FL:31}



static void Test_B_BFu1ll_BFu31ll()
{
  {
    init_simple_test("B_BFu1ll_BFu31ll");
    static B_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "B_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "B_BFu1ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu31ll(Test_B_BFu1ll_BFu31ll, "B_BFu1ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu32i  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 B_BFu1ll_BFu32i) C1{ Fc FL:1 Fi:32}



static void Test_B_BFu1ll_BFu32i()
{
  {
    init_simple_test("B_BFu1ll_BFu32i");
    static B_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu1ll_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu32i(Test_B_BFu1ll_BFu32i, "B_BFu1ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu32ll  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 B_BFu1ll_BFu32ll) C1{ Fc FL:1 FL:32}



static void Test_B_BFu1ll_BFu32ll()
{
  {
    init_simple_test("B_BFu1ll_BFu32ll");
    static B_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "B_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "B_BFu1ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu32ll(Test_B_BFu1ll_BFu32ll, "B_BFu1ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu33  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 B_BFu1ll_BFu33) C1{ Fc FL:1 FL:33}



static void Test_B_BFu1ll_BFu33()
{
  {
    init_simple_test("B_BFu1ll_BFu33");
    static B_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "B_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "B_BFu1ll_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu33(Test_B_BFu1ll_BFu33, "B_BFu1ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu7c  {
  bool v1;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 B_BFu1ll_BFu7c) C1{ Fc FL:1 Fc:7}



static void Test_B_BFu1ll_BFu7c()
{
  {
    init_simple_test("B_BFu1ll_BFu7c");
    static B_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1ll_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu7c(Test_B_BFu1ll_BFu7c, "B_BFu1ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu7i  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 B_BFu1ll_BFu7i) C1{ Fc FL:1 Fi:7}



static void Test_B_BFu1ll_BFu7i()
{
  {
    init_simple_test("B_BFu1ll_BFu7i");
    static B_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1ll_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu7i(Test_B_BFu1ll_BFu7i, "B_BFu1ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu7ll  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 B_BFu1ll_BFu7ll) C1{ Fc FL:1 FL:7}



static void Test_B_BFu1ll_BFu7ll()
{
  {
    init_simple_test("B_BFu1ll_BFu7ll");
    static B_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu7ll(Test_B_BFu1ll_BFu7ll, "B_BFu1ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu7s  {
  bool v1;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 B_BFu1ll_BFu7s) C1{ Fc FL:1 Fs:7}



static void Test_B_BFu1ll_BFu7s()
{
  {
    init_simple_test("B_BFu1ll_BFu7s");
    static B_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1ll_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu7s(Test_B_BFu1ll_BFu7s, "B_BFu1ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu8c  {
  bool v1;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 B_BFu1ll_BFu8c) C1{ Fc FL:1 Fc:8}



static void Test_B_BFu1ll_BFu8c()
{
  {
    init_simple_test("B_BFu1ll_BFu8c");
    static B_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu1ll_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu8c(Test_B_BFu1ll_BFu8c, "B_BFu1ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu8i  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 B_BFu1ll_BFu8i) C1{ Fc FL:1 Fi:8}



static void Test_B_BFu1ll_BFu8i()
{
  {
    init_simple_test("B_BFu1ll_BFu8i");
    static B_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "B_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "B_BFu1ll_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu8i(Test_B_BFu1ll_BFu8i, "B_BFu1ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu8ll  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 B_BFu1ll_BFu8ll) C1{ Fc FL:1 FL:8}



static void Test_B_BFu1ll_BFu8ll()
{
  {
    init_simple_test("B_BFu1ll_BFu8ll");
    static B_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "B_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "B_BFu1ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu8ll(Test_B_BFu1ll_BFu8ll, "B_BFu1ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu8s  {
  bool v1;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 B_BFu1ll_BFu8s) C1{ Fc FL:1 Fs:8}



static void Test_B_BFu1ll_BFu8s()
{
  {
    init_simple_test("B_BFu1ll_BFu8s");
    static B_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu1ll_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu8s(Test_B_BFu1ll_BFu8s, "B_BFu1ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu9i  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 B_BFu1ll_BFu9i) C1{ Fc FL:1 Fi:9}



static void Test_B_BFu1ll_BFu9i()
{
  {
    init_simple_test("B_BFu1ll_BFu9i");
    static B_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "B_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "B_BFu1ll_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu9i(Test_B_BFu1ll_BFu9i, "B_BFu1ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu9ll  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 B_BFu1ll_BFu9ll) C1{ Fc FL:1 FL:9}



static void Test_B_BFu1ll_BFu9ll()
{
  {
    init_simple_test("B_BFu1ll_BFu9ll");
    static B_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "B_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "B_BFu1ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu9ll(Test_B_BFu1ll_BFu9ll, "B_BFu1ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_BFu9s  {
  bool v1;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 B_BFu1ll_BFu9s) C1{ Fc FL:1 Fs:9}



static void Test_B_BFu1ll_BFu9s()
{
  {
    init_simple_test("B_BFu1ll_BFu9s");
    static B_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu1ll_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_BFu9s(Test_B_BFu1ll_BFu9s, "B_BFu1ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_C  {
  bool v1;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 B_BFu1ll_C) C1{ Fc FL:1 Fc}



static void Test_B_BFu1ll_C()
{
  {
    init_simple_test("B_BFu1ll_C");
    static B_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_C)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_C");
    check_field_offset(lv, v3, 2, "B_BFu1ll_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_C(Test_B_BFu1ll_C, "B_BFu1ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_D  {
  bool v1;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 B_BFu1ll_D) C1{ Fc FL:1 FL}



static void Test_B_BFu1ll_D()
{
  {
    init_simple_test("B_BFu1ll_D");
    static B_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_D)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1ll_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_D(Test_B_BFu1ll_D, "B_BFu1ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_F  {
  bool v1;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 B_BFu1ll_F) C1{ Fc FL:1 Fi}



static void Test_B_BFu1ll_F()
{
  {
    init_simple_test("B_BFu1ll_F");
    static B_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_F)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_F");
    check_field_offset(lv, v3, 4, "B_BFu1ll_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_F(Test_B_BFu1ll_F, "B_BFu1ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_I  {
  bool v1;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 B_BFu1ll_I) C1{ Fc FL:1 Fi}



static void Test_B_BFu1ll_I()
{
  {
    init_simple_test("B_BFu1ll_I");
    static B_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_I)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_I");
    check_field_offset(lv, v3, 4, "B_BFu1ll_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_I(Test_B_BFu1ll_I, "B_BFu1ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_Ip  {
  bool v1;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 B_BFu1ll_Ip) C1{ Fc FL:1 Fp}



static void Test_B_BFu1ll_Ip()
{
  {
    init_simple_test("B_BFu1ll_Ip");
    static B_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_Ip(Test_B_BFu1ll_Ip, "B_BFu1ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_L  {
  bool v1;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 B_BFu1ll_L) C1{ Fc FL:1 FL}



static void Test_B_BFu1ll_L()
{
  {
    init_simple_test("B_BFu1ll_L");
    static B_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_L)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1ll_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_L(Test_B_BFu1ll_L, "B_BFu1ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_S  {
  bool v1;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 B_BFu1ll_S) C1{ Fc FL:1 Fs}



static void Test_B_BFu1ll_S()
{
  {
    init_simple_test("B_BFu1ll_S");
    static B_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_S)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_S");
    check_field_offset(lv, v3, 2, "B_BFu1ll_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_S(Test_B_BFu1ll_S, "B_BFu1ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_Uc  {
  bool v1;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 B_BFu1ll_Uc) C1{ Fc FL:1 Fc}



static void Test_B_BFu1ll_Uc()
{
  {
    init_simple_test("B_BFu1ll_Uc");
    static B_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_Uc");
    check_field_offset(lv, v3, 2, "B_BFu1ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_Uc(Test_B_BFu1ll_Uc, "B_BFu1ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_Ui  {
  bool v1;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 B_BFu1ll_Ui) C1{ Fc FL:1 Fi}



static void Test_B_BFu1ll_Ui()
{
  {
    init_simple_test("B_BFu1ll_Ui");
    static B_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "B_BFu1ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_Ui(Test_B_BFu1ll_Ui, "B_BFu1ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_Ul  {
  bool v1;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 B_BFu1ll_Ul) C1{ Fc FL:1 FL}



static void Test_B_BFu1ll_Ul()
{
  {
    init_simple_test("B_BFu1ll_Ul");
    static B_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_Ul(Test_B_BFu1ll_Ul, "B_BFu1ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_Us  {
  bool v1;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 B_BFu1ll_Us) C1{ Fc FL:1 Fs}



static void Test_B_BFu1ll_Us()
{
  {
    init_simple_test("B_BFu1ll_Us");
    static B_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_Us)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "B_BFu1ll_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_Us(Test_B_BFu1ll_Us, "B_BFu1ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1ll_Vp  {
  bool v1;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 B_BFu1ll_Vp) C1{ Fc FL:1 Fp}



static void Test_B_BFu1ll_Vp()
{
  {
    init_simple_test("B_BFu1ll_Vp");
    static B_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1ll_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu1ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1ll_Vp(Test_B_BFu1ll_Vp, "B_BFu1ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s  {
  bool v1;
  unsigned short v2:1;
};
//SIG(1 B_BFu1s) C1{ Fc Fs:1}



static void Test_B_BFu1s()
{
  {
    init_simple_test("B_BFu1s");
    static B_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu1s(Test_B_BFu1s, "B_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_B  {
  bool v1;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 B_BFu1s_B) C1{ Fc Fs:1 Fc}



static void Test_B_BFu1s_B()
{
  {
    init_simple_test("B_BFu1s_B");
    static B_BFu1s_B lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_B)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_B)");
    check_field_offset(lv, v1, 0, "B_BFu1s_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_B");
    check_field_offset(lv, v3, 2, "B_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_B(Test_B_BFu1s_B, "B_BFu1s_B", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu15i  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 B_BFu1s_BFu15i) C1{ Fc Fs:1 Fi:15}



static void Test_B_BFu1s_BFu15i()
{
  {
    init_simple_test("B_BFu1s_BFu15i");
    static B_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "B_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "B_BFu1s_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu15i(Test_B_BFu1s_BFu15i, "B_BFu1s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu15ll  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 B_BFu1s_BFu15ll) C1{ Fc Fs:1 FL:15}



static void Test_B_BFu1s_BFu15ll()
{
  {
    init_simple_test("B_BFu1s_BFu15ll");
    static B_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, 1, "B_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 1, 15, hide_ull(1LL<<14), "B_BFu1s_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu15ll(Test_B_BFu1s_BFu15ll, "B_BFu1s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu15s  {
  bool v1;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 B_BFu1s_BFu15s) C1{ Fc Fs:1 Fs:15}



static void Test_B_BFu1s_BFu15s()
{
  {
    init_simple_test("B_BFu1s_BFu15s");
    static B_BFu1s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu1s_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu15s(Test_B_BFu1s_BFu15s, "B_BFu1s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu16i  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 B_BFu1s_BFu16i) C1{ Fc Fs:1 Fi:16}



static void Test_B_BFu1s_BFu16i()
{
  {
    init_simple_test("B_BFu1s_BFu16i");
    static B_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "B_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "B_BFu1s_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu16i(Test_B_BFu1s_BFu16i, "B_BFu1s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu16ll  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 B_BFu1s_BFu16ll) C1{ Fc Fs:1 FL:16}



static void Test_B_BFu1s_BFu16ll()
{
  {
    init_simple_test("B_BFu1s_BFu16ll");
    static B_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, 1, "B_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 1, 16, hide_ull(1LL<<15), "B_BFu1s_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu16ll(Test_B_BFu1s_BFu16ll, "B_BFu1s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu16s  {
  bool v1;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 B_BFu1s_BFu16s) C1{ Fc Fs:1 Fs:16}



static void Test_B_BFu1s_BFu16s()
{
  {
    init_simple_test("B_BFu1s_BFu16s");
    static B_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu1s_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu16s(Test_B_BFu1s_BFu16s, "B_BFu1s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu17i  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 B_BFu1s_BFu17i) C1{ Fc Fs:1 Fi:17}



static void Test_B_BFu1s_BFu17i()
{
  {
    init_simple_test("B_BFu1s_BFu17i");
    static B_BFu1s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "B_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "B_BFu1s_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu17i(Test_B_BFu1s_BFu17i, "B_BFu1s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu17ll  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 B_BFu1s_BFu17ll) C1{ Fc Fs:1 FL:17}



static void Test_B_BFu1s_BFu17ll()
{
  {
    init_simple_test("B_BFu1s_BFu17ll");
    static B_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, 1, "B_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 1, 17, hide_ull(1LL<<16), "B_BFu1s_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu17ll(Test_B_BFu1s_BFu17ll, "B_BFu1s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu1c  {
  bool v1;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 B_BFu1s_BFu1c) C1{ Fc Fs:1 Fc:1}



static void Test_B_BFu1s_BFu1c()
{
  {
    init_simple_test("B_BFu1s_BFu1c");
    static B_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1s_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu1c(Test_B_BFu1s_BFu1c, "B_BFu1s_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu1i  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 B_BFu1s_BFu1i) C1{ Fc Fs:1 Fi:1}



static void Test_B_BFu1s_BFu1i()
{
  {
    init_simple_test("B_BFu1s_BFu1i");
    static B_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1s_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu1i(Test_B_BFu1s_BFu1i, "B_BFu1s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu1ll  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 B_BFu1s_BFu1ll) C1{ Fc Fs:1 FL:1}



static void Test_B_BFu1s_BFu1ll()
{
  {
    init_simple_test("B_BFu1s_BFu1ll");
    static B_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1s_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu1ll(Test_B_BFu1s_BFu1ll, "B_BFu1s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu1s  {
  bool v1;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 B_BFu1s_BFu1s) C1{ Fc Fs:1 Fs:1}



static void Test_B_BFu1s_BFu1s()
{
  {
    init_simple_test("B_BFu1s_BFu1s");
    static B_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 1, 1, 1, 1, "B_BFu1s_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu1s(Test_B_BFu1s_BFu1s, "B_BFu1s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu31i  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 B_BFu1s_BFu31i) C1{ Fc Fs:1 Fi:31}



static void Test_B_BFu1s_BFu31i()
{
  {
    init_simple_test("B_BFu1s_BFu31i");
    static B_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu1s_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu31i(Test_B_BFu1s_BFu31i, "B_BFu1s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu31ll  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 B_BFu1s_BFu31ll) C1{ Fc Fs:1 FL:31}



static void Test_B_BFu1s_BFu31ll()
{
  {
    init_simple_test("B_BFu1s_BFu31ll");
    static B_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, 1, "B_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 1, 31, hide_ull(1LL<<30), "B_BFu1s_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu31ll(Test_B_BFu1s_BFu31ll, "B_BFu1s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu32i  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 B_BFu1s_BFu32i) C1{ Fc Fs:1 Fi:32}



static void Test_B_BFu1s_BFu32i()
{
  {
    init_simple_test("B_BFu1s_BFu32i");
    static B_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu1s_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu32i(Test_B_BFu1s_BFu32i, "B_BFu1s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu32ll  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 B_BFu1s_BFu32ll) C1{ Fc Fs:1 FL:32}



static void Test_B_BFu1s_BFu32ll()
{
  {
    init_simple_test("B_BFu1s_BFu32ll");
    static B_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, 1, "B_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 1, 32, hide_ull(1LL<<31), "B_BFu1s_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu32ll(Test_B_BFu1s_BFu32ll, "B_BFu1s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu33  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 B_BFu1s_BFu33) C1{ Fc Fs:1 FL:33}



static void Test_B_BFu1s_BFu33()
{
  {
    init_simple_test("B_BFu1s_BFu33");
    static B_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, 1, "B_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 1, 33, hide_ull(1LL<<32), "B_BFu1s_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu33(Test_B_BFu1s_BFu33, "B_BFu1s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu7c  {
  bool v1;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 B_BFu1s_BFu7c) C1{ Fc Fs:1 Fc:7}



static void Test_B_BFu1s_BFu7c()
{
  {
    init_simple_test("B_BFu1s_BFu7c");
    static B_BFu1s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1s_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu7c(Test_B_BFu1s_BFu7c, "B_BFu1s_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu7i  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 B_BFu1s_BFu7i) C1{ Fc Fs:1 Fi:7}



static void Test_B_BFu1s_BFu7i()
{
  {
    init_simple_test("B_BFu1s_BFu7i");
    static B_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1s_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu7i(Test_B_BFu1s_BFu7i, "B_BFu1s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu7ll  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 B_BFu1s_BFu7ll) C1{ Fc Fs:1 FL:7}



static void Test_B_BFu1s_BFu7ll()
{
  {
    init_simple_test("B_BFu1s_BFu7ll");
    static B_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1s_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu7ll(Test_B_BFu1s_BFu7ll, "B_BFu1s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu7s  {
  bool v1;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 B_BFu1s_BFu7s) C1{ Fc Fs:1 Fs:7}



static void Test_B_BFu1s_BFu7s()
{
  {
    init_simple_test("B_BFu1s_BFu7s");
    static B_BFu1s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu1s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, 1, "B_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 1, 7, hide_ull(1LL<<6), "B_BFu1s_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu7s(Test_B_BFu1s_BFu7s, "B_BFu1s_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu8c  {
  bool v1;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 B_BFu1s_BFu8c) C1{ Fc Fs:1 Fc:8}



static void Test_B_BFu1s_BFu8c()
{
  {
    init_simple_test("B_BFu1s_BFu8c");
    static B_BFu1s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu1s_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu8c(Test_B_BFu1s_BFu8c, "B_BFu1s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu8i  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 B_BFu1s_BFu8i) C1{ Fc Fs:1 Fi:8}



static void Test_B_BFu1s_BFu8i()
{
  {
    init_simple_test("B_BFu1s_BFu8i");
    static B_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "B_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "B_BFu1s_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu8i(Test_B_BFu1s_BFu8i, "B_BFu1s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu8ll  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 B_BFu1s_BFu8ll) C1{ Fc Fs:1 FL:8}



static void Test_B_BFu1s_BFu8ll()
{
  {
    init_simple_test("B_BFu1s_BFu8ll");
    static B_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, 1, "B_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 1, 8, hide_ull(1LL<<7), "B_BFu1s_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu8ll(Test_B_BFu1s_BFu8ll, "B_BFu1s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu8s  {
  bool v1;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 B_BFu1s_BFu8s) C1{ Fc Fs:1 Fs:8}



static void Test_B_BFu1s_BFu8s()
{
  {
    init_simple_test("B_BFu1s_BFu8s");
    static B_BFu1s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu1s_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu8s(Test_B_BFu1s_BFu8s, "B_BFu1s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu9i  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 B_BFu1s_BFu9i) C1{ Fc Fs:1 Fi:9}



static void Test_B_BFu1s_BFu9i()
{
  {
    init_simple_test("B_BFu1s_BFu9i");
    static B_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "B_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "B_BFu1s_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu9i(Test_B_BFu1s_BFu9i, "B_BFu1s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu9ll  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 B_BFu1s_BFu9ll) C1{ Fc Fs:1 FL:9}



static void Test_B_BFu1s_BFu9ll()
{
  {
    init_simple_test("B_BFu1s_BFu9ll");
    static B_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, 1, "B_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 1, 9, hide_ull(1LL<<8), "B_BFu1s_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu9ll(Test_B_BFu1s_BFu9ll, "B_BFu1s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_BFu9s  {
  bool v1;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 B_BFu1s_BFu9s) C1{ Fc Fs:1 Fs:9}



static void Test_B_BFu1s_BFu9s()
{
  {
    init_simple_test("B_BFu1s_BFu9s");
    static B_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu1s_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu1s_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu1s_BFu9s(Test_B_BFu1s_BFu9s, "B_BFu1s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_C  {
  bool v1;
  unsigned short v2:1;
  char v3;
};
//SIG(1 B_BFu1s_C) C1{ Fc Fs:1 Fc}



static void Test_B_BFu1s_C()
{
  {
    init_simple_test("B_BFu1s_C");
    static B_BFu1s_C lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_C)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_C)");
    check_field_offset(lv, v1, 0, "B_BFu1s_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_C");
    check_field_offset(lv, v3, 2, "B_BFu1s_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_C(Test_B_BFu1s_C, "B_BFu1s_C", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_D  {
  bool v1;
  unsigned short v2:1;
  double v3;
};
//SIG(1 B_BFu1s_D) C1{ Fc Fs:1 FL}



static void Test_B_BFu1s_D()
{
  {
    init_simple_test("B_BFu1s_D");
    static B_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_D)");
    check_field_offset(lv, v1, 0, "B_BFu1s_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1s_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_D(Test_B_BFu1s_D, "B_BFu1s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_F  {
  bool v1;
  unsigned short v2:1;
  float v3;
};
//SIG(1 B_BFu1s_F) C1{ Fc Fs:1 Fi}



static void Test_B_BFu1s_F()
{
  {
    init_simple_test("B_BFu1s_F");
    static B_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_F)");
    check_field_offset(lv, v1, 0, "B_BFu1s_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_F");
    check_field_offset(lv, v3, 4, "B_BFu1s_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_F(Test_B_BFu1s_F, "B_BFu1s_F", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_I  {
  bool v1;
  unsigned short v2:1;
  int v3;
};
//SIG(1 B_BFu1s_I) C1{ Fc Fs:1 Fi}



static void Test_B_BFu1s_I()
{
  {
    init_simple_test("B_BFu1s_I");
    static B_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_I)");
    check_field_offset(lv, v1, 0, "B_BFu1s_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_I");
    check_field_offset(lv, v3, 4, "B_BFu1s_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_I(Test_B_BFu1s_I, "B_BFu1s_I", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_Ip  {
  bool v1;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 B_BFu1s_Ip) C1{ Fc Fs:1 Fp}



static void Test_B_BFu1s_Ip()
{
  {
    init_simple_test("B_BFu1s_Ip");
    static B_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu1s_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1s_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_Ip(Test_B_BFu1s_Ip, "B_BFu1s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_B_BFu1s_L()
{
  {
    init_simple_test("B_BFu1s_L");
    static B_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_L)");
    check_field_offset(lv, v1, 0, "B_BFu1s_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1s_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_L(Test_B_BFu1s_L, "B_BFu1s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_S  {
  bool v1;
  unsigned short v2:1;
  short v3;
};
//SIG(1 B_BFu1s_S) C1{ Fc Fs:1 Fs}



static void Test_B_BFu1s_S()
{
  {
    init_simple_test("B_BFu1s_S");
    static B_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_S)");
    check_field_offset(lv, v1, 0, "B_BFu1s_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_S");
    check_field_offset(lv, v3, 2, "B_BFu1s_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_S(Test_B_BFu1s_S, "B_BFu1s_S", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_Uc  {
  bool v1;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 B_BFu1s_Uc) C1{ Fc Fs:1 Fc}



static void Test_B_BFu1s_Uc()
{
  {
    init_simple_test("B_BFu1s_Uc");
    static B_BFu1s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu1s_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_Uc");
    check_field_offset(lv, v3, 2, "B_BFu1s_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_Uc(Test_B_BFu1s_Uc, "B_BFu1s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_Ui  {
  bool v1;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 B_BFu1s_Ui) C1{ Fc Fs:1 Fi}



static void Test_B_BFu1s_Ui()
{
  {
    init_simple_test("B_BFu1s_Ui");
    static B_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu1s_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu1s_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "B_BFu1s_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_Ui(Test_B_BFu1s_Ui, "B_BFu1s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_Ul  {
  bool v1;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 B_BFu1s_Ul) C1{ Fc Fs:1 FL}



static void Test_B_BFu1s_Ul()
{
  {
    init_simple_test("B_BFu1s_Ul");
    static B_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu1s_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1s_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_Ul(Test_B_BFu1s_Ul, "B_BFu1s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_Us  {
  bool v1;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 B_BFu1s_Us) C1{ Fc Fs:1 Fs}



static void Test_B_BFu1s_Us()
{
  {
    init_simple_test("B_BFu1s_Us");
    static B_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu1s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu1s_Us)");
    check_field_offset(lv, v1, 0, "B_BFu1s_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_Us");
    check_field_offset(lv, v3, 2, "B_BFu1s_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_Us(Test_B_BFu1s_Us, "B_BFu1s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu1s_Vp  {
  bool v1;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 B_BFu1s_Vp) C1{ Fc Fs:1 Fp}



static void Test_B_BFu1s_Vp()
{
  {
    init_simple_test("B_BFu1s_Vp");
    static B_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu1s_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu1s_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "B_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu1s_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu1s_Vp(Test_B_BFu1s_Vp, "B_BFu1s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i  {
  bool v1;
  unsigned int v2:31;
};
//SIG(1 B_BFu31i) C1{ Fc Fi:31}



static void Test_B_BFu31i()
{
  {
    init_simple_test("B_BFu31i");
    static B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu31i(Test_B_BFu31i, "B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_B  {
  bool v1;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 B_BFu31i_B) C1{ Fc Fi:31 Fc}



static void Test_B_BFu31i_B()
{
  {
    init_simple_test("B_BFu31i_B");
    static B_BFu31i_B lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_B)");
    check_field_offset(lv, v1, 0, "B_BFu31i_B.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_B");
    check_field_offset(lv, v3, 8, "B_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_B(Test_B_BFu31i_B, "B_BFu31i_B", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu15i  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 B_BFu31i_BFu15i) C1{ Fc Fi:31 Fi:15}



static void Test_B_BFu31i_BFu15i()
{
  {
    init_simple_test("B_BFu31i_BFu15i");
    static B_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_BFu31i_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu15i(Test_B_BFu31i_BFu15i, "B_BFu31i_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu15ll  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 B_BFu31i_BFu15ll) C1{ Fc Fi:31 FL:15}



static void Test_B_BFu31i_BFu15ll()
{
  {
    init_simple_test("B_BFu31i_BFu15ll");
    static B_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "B_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "B_BFu31i_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu15ll(Test_B_BFu31i_BFu15ll, "B_BFu31i_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu15s  {
  bool v1;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 B_BFu31i_BFu15s) C1{ Fc Fi:31 Fs:15}



static void Test_B_BFu31i_BFu15s()
{
  {
    init_simple_test("B_BFu31i_BFu15s");
    static B_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_BFu31i_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu15s(Test_B_BFu31i_BFu15s, "B_BFu31i_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu16i  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 B_BFu31i_BFu16i) C1{ Fc Fi:31 Fi:16}



static void Test_B_BFu31i_BFu16i()
{
  {
    init_simple_test("B_BFu31i_BFu16i");
    static B_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_BFu31i_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu16i(Test_B_BFu31i_BFu16i, "B_BFu31i_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu16ll  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 B_BFu31i_BFu16ll) C1{ Fc Fi:31 FL:16}



static void Test_B_BFu31i_BFu16ll()
{
  {
    init_simple_test("B_BFu31i_BFu16ll");
    static B_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "B_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "B_BFu31i_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu16ll(Test_B_BFu31i_BFu16ll, "B_BFu31i_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu16s  {
  bool v1;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 B_BFu31i_BFu16s) C1{ Fc Fi:31 Fs:16}



static void Test_B_BFu31i_BFu16s()
{
  {
    init_simple_test("B_BFu31i_BFu16s");
    static B_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_BFu31i_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu16s(Test_B_BFu31i_BFu16s, "B_BFu31i_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu17i  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 B_BFu31i_BFu17i) C1{ Fc Fi:31 Fi:17}



static void Test_B_BFu31i_BFu17i()
{
  {
    init_simple_test("B_BFu31i_BFu17i");
    static B_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "B_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "B_BFu31i_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu17i(Test_B_BFu31i_BFu17i, "B_BFu31i_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu17ll  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 B_BFu31i_BFu17ll) C1{ Fc Fi:31 FL:17}



static void Test_B_BFu31i_BFu17ll()
{
  {
    init_simple_test("B_BFu31i_BFu17ll");
    static B_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "B_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "B_BFu31i_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu17ll(Test_B_BFu31i_BFu17ll, "B_BFu31i_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu1c  {
  bool v1;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 B_BFu31i_BFu1c) C1{ Fc Fi:31 Fc:1}



static void Test_B_BFu31i_BFu1c()
{
  {
    init_simple_test("B_BFu31i_BFu1c");
    static B_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "B_BFu31i_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu1c(Test_B_BFu31i_BFu1c, "B_BFu31i_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu1i  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 B_BFu31i_BFu1i) C1{ Fc Fi:31 Fi:1}



static void Test_B_BFu31i_BFu1i()
{
  {
    init_simple_test("B_BFu31i_BFu1i");
    static B_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "B_BFu31i_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu1i(Test_B_BFu31i_BFu1i, "B_BFu31i_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu1ll  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 B_BFu31i_BFu1ll) C1{ Fc Fi:31 FL:1}



static void Test_B_BFu31i_BFu1ll()
{
  {
    init_simple_test("B_BFu31i_BFu1ll");
    static B_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "B_BFu31i_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu1ll(Test_B_BFu31i_BFu1ll, "B_BFu31i_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu1s  {
  bool v1;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 B_BFu31i_BFu1s) C1{ Fc Fi:31 Fs:1}



static void Test_B_BFu31i_BFu1s()
{
  {
    init_simple_test("B_BFu31i_BFu1s");
    static B_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "B_BFu31i_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu1s(Test_B_BFu31i_BFu1s, "B_BFu31i_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu31i  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 B_BFu31i_BFu31i) C1{ Fc Fi:31 Fi:31}



static void Test_B_BFu31i_BFu31i()
{
  {
    init_simple_test("B_BFu31i_BFu31i");
    static B_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu31i(Test_B_BFu31i_BFu31i, "B_BFu31i_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu31ll  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 B_BFu31i_BFu31ll) C1{ Fc Fi:31 FL:31}



static void Test_B_BFu31i_BFu31ll()
{
  {
    init_simple_test("B_BFu31i_BFu31ll");
    static B_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "B_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "B_BFu31i_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu31ll(Test_B_BFu31i_BFu31ll, "B_BFu31i_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu32i  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 B_BFu31i_BFu32i) C1{ Fc Fi:31 Fi:32}



static void Test_B_BFu31i_BFu32i()
{
  {
    init_simple_test("B_BFu31i_BFu32i");
    static B_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_BFu31i_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu32i(Test_B_BFu31i_BFu32i, "B_BFu31i_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu32ll  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 B_BFu31i_BFu32ll) C1{ Fc Fi:31 FL:32}



static void Test_B_BFu31i_BFu32ll()
{
  {
    init_simple_test("B_BFu31i_BFu32ll");
    static B_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "B_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "B_BFu31i_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu32ll(Test_B_BFu31i_BFu32ll, "B_BFu31i_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu33  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 B_BFu31i_BFu33) C1{ Fc Fi:31 FL:33}



static void Test_B_BFu31i_BFu33()
{
  {
    init_simple_test("B_BFu31i_BFu33");
    static B_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu33.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "B_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "B_BFu31i_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu33(Test_B_BFu31i_BFu33, "B_BFu31i_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu7c  {
  bool v1;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 B_BFu31i_BFu7c) C1{ Fc Fi:31 Fc:7}



static void Test_B_BFu31i_BFu7c()
{
  {
    init_simple_test("B_BFu31i_BFu7c");
    static B_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_BFu31i_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu7c(Test_B_BFu31i_BFu7c, "B_BFu31i_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu7i  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 B_BFu31i_BFu7i) C1{ Fc Fi:31 Fi:7}



static void Test_B_BFu31i_BFu7i()
{
  {
    init_simple_test("B_BFu31i_BFu7i");
    static B_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_BFu31i_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu7i(Test_B_BFu31i_BFu7i, "B_BFu31i_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu7ll  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 B_BFu31i_BFu7ll) C1{ Fc Fi:31 FL:7}



static void Test_B_BFu31i_BFu7ll()
{
  {
    init_simple_test("B_BFu31i_BFu7ll");
    static B_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "B_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "B_BFu31i_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu7ll(Test_B_BFu31i_BFu7ll, "B_BFu31i_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu7s  {
  bool v1;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 B_BFu31i_BFu7s) C1{ Fc Fi:31 Fs:7}



static void Test_B_BFu31i_BFu7s()
{
  {
    init_simple_test("B_BFu31i_BFu7s");
    static B_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_BFu31i_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu7s(Test_B_BFu31i_BFu7s, "B_BFu31i_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu8c  {
  bool v1;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 B_BFu31i_BFu8c) C1{ Fc Fi:31 Fc:8}



static void Test_B_BFu31i_BFu8c()
{
  {
    init_simple_test("B_BFu31i_BFu8c");
    static B_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_BFu31i_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu8c(Test_B_BFu31i_BFu8c, "B_BFu31i_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu8i  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 B_BFu31i_BFu8i) C1{ Fc Fi:31 Fi:8}



static void Test_B_BFu31i_BFu8i()
{
  {
    init_simple_test("B_BFu31i_BFu8i");
    static B_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_BFu31i_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu8i(Test_B_BFu31i_BFu8i, "B_BFu31i_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu8ll  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 B_BFu31i_BFu8ll) C1{ Fc Fi:31 FL:8}



static void Test_B_BFu31i_BFu8ll()
{
  {
    init_simple_test("B_BFu31i_BFu8ll");
    static B_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "B_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "B_BFu31i_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu8ll(Test_B_BFu31i_BFu8ll, "B_BFu31i_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu8s  {
  bool v1;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 B_BFu31i_BFu8s) C1{ Fc Fi:31 Fs:8}



static void Test_B_BFu31i_BFu8s()
{
  {
    init_simple_test("B_BFu31i_BFu8s");
    static B_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_BFu31i_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu8s(Test_B_BFu31i_BFu8s, "B_BFu31i_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu9i  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 B_BFu31i_BFu9i) C1{ Fc Fi:31 Fi:9}



static void Test_B_BFu31i_BFu9i()
{
  {
    init_simple_test("B_BFu31i_BFu9i");
    static B_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_BFu31i_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu9i(Test_B_BFu31i_BFu9i, "B_BFu31i_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu9ll  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 B_BFu31i_BFu9ll) C1{ Fc Fi:31 FL:9}



static void Test_B_BFu31i_BFu9ll()
{
  {
    init_simple_test("B_BFu31i_BFu9ll");
    static B_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "B_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "B_BFu31i_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu9ll(Test_B_BFu31i_BFu9ll, "B_BFu31i_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_BFu9s  {
  bool v1;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 B_BFu31i_BFu9s) C1{ Fc Fi:31 Fs:9}



static void Test_B_BFu31i_BFu9s()
{
  {
    init_simple_test("B_BFu31i_BFu9s");
    static B_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu31i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_BFu31i_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu31i_BFu9s(Test_B_BFu31i_BFu9s, "B_BFu31i_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_C  {
  bool v1;
  unsigned int v2:31;
  char v3;
};
//SIG(1 B_BFu31i_C) C1{ Fc Fi:31 Fc}



static void Test_B_BFu31i_C()
{
  {
    init_simple_test("B_BFu31i_C");
    static B_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_C)");
    check_field_offset(lv, v1, 0, "B_BFu31i_C.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_C");
    check_field_offset(lv, v3, 8, "B_BFu31i_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_C(Test_B_BFu31i_C, "B_BFu31i_C", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_D  {
  bool v1;
  unsigned int v2:31;
  double v3;
};
//SIG(1 B_BFu31i_D) C1{ Fc Fi:31 FL}



static void Test_B_BFu31i_D()
{
  {
    init_simple_test("B_BFu31i_D");
    static B_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_D)");
    check_field_offset(lv, v1, 0, "B_BFu31i_D.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_D");
    check_field_offset(lv, v3, 8, "B_BFu31i_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_D(Test_B_BFu31i_D, "B_BFu31i_D", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_F  {
  bool v1;
  unsigned int v2:31;
  float v3;
};
//SIG(1 B_BFu31i_F) C1{ Fc Fi:31 Fi}



static void Test_B_BFu31i_F()
{
  {
    init_simple_test("B_BFu31i_F");
    static B_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_F)");
    check_field_offset(lv, v1, 0, "B_BFu31i_F.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_F");
    check_field_offset(lv, v3, 8, "B_BFu31i_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_F(Test_B_BFu31i_F, "B_BFu31i_F", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_I  {
  bool v1;
  unsigned int v2:31;
  int v3;
};
//SIG(1 B_BFu31i_I) C1{ Fc Fi:31 Fi}



static void Test_B_BFu31i_I()
{
  {
    init_simple_test("B_BFu31i_I");
    static B_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_I)");
    check_field_offset(lv, v1, 0, "B_BFu31i_I.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_I");
    check_field_offset(lv, v3, 8, "B_BFu31i_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_I(Test_B_BFu31i_I, "B_BFu31i_I", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_Ip  {
  bool v1;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 B_BFu31i_Ip) C1{ Fc Fi:31 Fp}



static void Test_B_BFu31i_Ip()
{
  {
    init_simple_test("B_BFu31i_Ip");
    static B_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu31i_Ip.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "B_BFu31i_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_Ip(Test_B_BFu31i_Ip, "B_BFu31i_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_L  {
  bool v1;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 B_BFu31i_L) C1{ Fc Fi:31 FL}



static void Test_B_BFu31i_L()
{
  {
    init_simple_test("B_BFu31i_L");
    static B_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_L)");
    check_field_offset(lv, v1, 0, "B_BFu31i_L.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_L");
    check_field_offset(lv, v3, 8, "B_BFu31i_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_L(Test_B_BFu31i_L, "B_BFu31i_L", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_S  {
  bool v1;
  unsigned int v2:31;
  short v3;
};
//SIG(1 B_BFu31i_S) C1{ Fc Fi:31 Fs}



static void Test_B_BFu31i_S()
{
  {
    init_simple_test("B_BFu31i_S");
    static B_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_S)");
    check_field_offset(lv, v1, 0, "B_BFu31i_S.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_S");
    check_field_offset(lv, v3, 8, "B_BFu31i_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_S(Test_B_BFu31i_S, "B_BFu31i_S", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_Uc  {
  bool v1;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 B_BFu31i_Uc) C1{ Fc Fi:31 Fc}



static void Test_B_BFu31i_Uc()
{
  {
    init_simple_test("B_BFu31i_Uc");
    static B_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu31i_Uc.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "B_BFu31i_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_Uc(Test_B_BFu31i_Uc, "B_BFu31i_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_Ui  {
  bool v1;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 B_BFu31i_Ui) C1{ Fc Fi:31 Fi}



static void Test_B_BFu31i_Ui()
{
  {
    init_simple_test("B_BFu31i_Ui");
    static B_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu31i_Ui.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "B_BFu31i_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_Ui(Test_B_BFu31i_Ui, "B_BFu31i_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_Ul  {
  bool v1;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 B_BFu31i_Ul) C1{ Fc Fi:31 FL}



static void Test_B_BFu31i_Ul()
{
  {
    init_simple_test("B_BFu31i_Ul");
    static B_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu31i_Ul.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "B_BFu31i_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_Ul(Test_B_BFu31i_Ul, "B_BFu31i_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_Us  {
  bool v1;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 B_BFu31i_Us) C1{ Fc Fi:31 Fs}



static void Test_B_BFu31i_Us()
{
  {
    init_simple_test("B_BFu31i_Us");
    static B_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu31i_Us)");
    check_field_offset(lv, v1, 0, "B_BFu31i_Us.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_Us");
    check_field_offset(lv, v3, 8, "B_BFu31i_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_Us(Test_B_BFu31i_Us, "B_BFu31i_Us", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31i_Vp  {
  bool v1;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 B_BFu31i_Vp) C1{ Fc Fi:31 Fp}



static void Test_B_BFu31i_Vp()
{
  {
    init_simple_test("B_BFu31i_Vp");
    static B_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31i_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu31i_Vp.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "B_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "B_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "B_BFu31i_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31i_Vp(Test_B_BFu31i_Vp, "B_BFu31i_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll  {
  bool v1;
  __tsu64 v2:31;
};
//SIG(1 B_BFu31ll) C1{ Fc FL:31}



static void Test_B_BFu31ll()
{
  {
    init_simple_test("B_BFu31ll");
    static B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll(Test_B_BFu31ll, "B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_B  {
  bool v1;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 B_BFu31ll_B) C1{ Fc FL:31 Fc}



static void Test_B_BFu31ll_B()
{
  {
    init_simple_test("B_BFu31ll_B");
    static B_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_B)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_B");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_B");
    check_field_offset(lv, v3, 5, "B_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_B(Test_B_BFu31ll_B, "B_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu15i  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 B_BFu31ll_BFu15i) C1{ Fc FL:31 Fi:15}



static void Test_B_BFu31ll_BFu15i()
{
  {
    init_simple_test("B_BFu31ll_BFu15i");
    static B_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "B_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "B_BFu31ll_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu15i(Test_B_BFu31ll_BFu15i, "B_BFu31ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu15ll  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 B_BFu31ll_BFu15ll) C1{ Fc FL:31 FL:15}



static void Test_B_BFu31ll_BFu15ll()
{
  {
    init_simple_test("B_BFu31ll_BFu15ll");
    static B_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "B_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "B_BFu31ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu15ll(Test_B_BFu31ll_BFu15ll, "B_BFu31ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu15s  {
  bool v1;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 B_BFu31ll_BFu15s) C1{ Fc FL:31 Fs:15}



static void Test_B_BFu31ll_BFu15s()
{
  {
    init_simple_test("B_BFu31ll_BFu15s");
    static B_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "B_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "B_BFu31ll_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu15s(Test_B_BFu31ll_BFu15s, "B_BFu31ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu16i  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 B_BFu31ll_BFu16i) C1{ Fc FL:31 Fi:16}



static void Test_B_BFu31ll_BFu16i()
{
  {
    init_simple_test("B_BFu31ll_BFu16i");
    static B_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "B_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "B_BFu31ll_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu16i(Test_B_BFu31ll_BFu16i, "B_BFu31ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu16ll  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 B_BFu31ll_BFu16ll) C1{ Fc FL:31 FL:16}



static void Test_B_BFu31ll_BFu16ll()
{
  {
    init_simple_test("B_BFu31ll_BFu16ll");
    static B_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "B_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "B_BFu31ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu16ll(Test_B_BFu31ll_BFu16ll, "B_BFu31ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu16s  {
  bool v1;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 B_BFu31ll_BFu16s) C1{ Fc FL:31 Fs:16}



static void Test_B_BFu31ll_BFu16s()
{
  {
    init_simple_test("B_BFu31ll_BFu16s");
    static B_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "B_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "B_BFu31ll_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu16s(Test_B_BFu31ll_BFu16s, "B_BFu31ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu17i  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 B_BFu31ll_BFu17i) C1{ Fc FL:31 Fi:17}



static void Test_B_BFu31ll_BFu17i()
{
  {
    init_simple_test("B_BFu31ll_BFu17i");
    static B_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "B_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "B_BFu31ll_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu17i(Test_B_BFu31ll_BFu17i, "B_BFu31ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu17ll  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 B_BFu31ll_BFu17ll) C1{ Fc FL:31 FL:17}



static void Test_B_BFu31ll_BFu17ll()
{
  {
    init_simple_test("B_BFu31ll_BFu17ll");
    static B_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "B_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "B_BFu31ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu17ll(Test_B_BFu31ll_BFu17ll, "B_BFu31ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu1c  {
  bool v1;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 B_BFu31ll_BFu1c) C1{ Fc FL:31 Fc:1}



static void Test_B_BFu31ll_BFu1c()
{
  {
    init_simple_test("B_BFu31ll_BFu1c");
    static B_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "B_BFu31ll_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu1c(Test_B_BFu31ll_BFu1c, "B_BFu31ll_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu1i  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 B_BFu31ll_BFu1i) C1{ Fc FL:31 Fi:1}



static void Test_B_BFu31ll_BFu1i()
{
  {
    init_simple_test("B_BFu31ll_BFu1i");
    static B_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "B_BFu31ll_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu1i(Test_B_BFu31ll_BFu1i, "B_BFu31ll_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu1ll  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 B_BFu31ll_BFu1ll) C1{ Fc FL:31 FL:1}



static void Test_B_BFu31ll_BFu1ll()
{
  {
    init_simple_test("B_BFu31ll_BFu1ll");
    static B_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "B_BFu31ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu1ll(Test_B_BFu31ll_BFu1ll, "B_BFu31ll_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu1s  {
  bool v1;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 B_BFu31ll_BFu1s) C1{ Fc FL:31 Fs:1}



static void Test_B_BFu31ll_BFu1s()
{
  {
    init_simple_test("B_BFu31ll_BFu1s");
    static B_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "B_BFu31ll_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu1s(Test_B_BFu31ll_BFu1s, "B_BFu31ll_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu31i  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 B_BFu31ll_BFu31i) C1{ Fc FL:31 Fi:31}



static void Test_B_BFu31ll_BFu31i()
{
  {
    init_simple_test("B_BFu31ll_BFu31i");
    static B_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu31i(Test_B_BFu31ll_BFu31i, "B_BFu31ll_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu31ll  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 B_BFu31ll_BFu31ll) C1{ Fc FL:31 FL:31}



static void Test_B_BFu31ll_BFu31ll()
{
  {
    init_simple_test("B_BFu31ll_BFu31ll");
    static B_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "B_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "B_BFu31ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu31ll(Test_B_BFu31ll_BFu31ll, "B_BFu31ll_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu32i  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 B_BFu31ll_BFu32i) C1{ Fc FL:31 Fi:32}



static void Test_B_BFu31ll_BFu32i()
{
  {
    init_simple_test("B_BFu31ll_BFu32i");
    static B_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_BFu31ll_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu32i(Test_B_BFu31ll_BFu32i, "B_BFu31ll_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu32ll  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 B_BFu31ll_BFu32ll) C1{ Fc FL:31 FL:32}



static void Test_B_BFu31ll_BFu32ll()
{
  {
    init_simple_test("B_BFu31ll_BFu32ll");
    static B_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "B_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "B_BFu31ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu32ll(Test_B_BFu31ll_BFu32ll, "B_BFu31ll_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu33  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 B_BFu31ll_BFu33) C1{ Fc FL:31 FL:33}



static void Test_B_BFu31ll_BFu33()
{
  {
    init_simple_test("B_BFu31ll_BFu33");
    static B_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "B_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "B_BFu31ll_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu33(Test_B_BFu31ll_BFu33, "B_BFu31ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu7c  {
  bool v1;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 B_BFu31ll_BFu7c) C1{ Fc FL:31 Fc:7}



static void Test_B_BFu31ll_BFu7c()
{
  {
    init_simple_test("B_BFu31ll_BFu7c");
    static B_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "B_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "B_BFu31ll_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu7c(Test_B_BFu31ll_BFu7c, "B_BFu31ll_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu7i  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 B_BFu31ll_BFu7i) C1{ Fc FL:31 Fi:7}



static void Test_B_BFu31ll_BFu7i()
{
  {
    init_simple_test("B_BFu31ll_BFu7i");
    static B_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "B_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "B_BFu31ll_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu7i(Test_B_BFu31ll_BFu7i, "B_BFu31ll_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu7ll  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 B_BFu31ll_BFu7ll) C1{ Fc FL:31 FL:7}



static void Test_B_BFu31ll_BFu7ll()
{
  {
    init_simple_test("B_BFu31ll_BFu7ll");
    static B_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "B_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "B_BFu31ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu7ll(Test_B_BFu31ll_BFu7ll, "B_BFu31ll_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu7s  {
  bool v1;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 B_BFu31ll_BFu7s) C1{ Fc FL:31 Fs:7}



static void Test_B_BFu31ll_BFu7s()
{
  {
    init_simple_test("B_BFu31ll_BFu7s");
    static B_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "B_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "B_BFu31ll_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu7s(Test_B_BFu31ll_BFu7s, "B_BFu31ll_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu8c  {
  bool v1;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 B_BFu31ll_BFu8c) C1{ Fc FL:31 Fc:8}



static void Test_B_BFu31ll_BFu8c()
{
  {
    init_simple_test("B_BFu31ll_BFu8c");
    static B_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "B_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "B_BFu31ll_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu8c(Test_B_BFu31ll_BFu8c, "B_BFu31ll_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu8i  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 B_BFu31ll_BFu8i) C1{ Fc FL:31 Fi:8}



static void Test_B_BFu31ll_BFu8i()
{
  {
    init_simple_test("B_BFu31ll_BFu8i");
    static B_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "B_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "B_BFu31ll_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu8i(Test_B_BFu31ll_BFu8i, "B_BFu31ll_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu8ll  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 B_BFu31ll_BFu8ll) C1{ Fc FL:31 FL:8}



static void Test_B_BFu31ll_BFu8ll()
{
  {
    init_simple_test("B_BFu31ll_BFu8ll");
    static B_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "B_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "B_BFu31ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu8ll(Test_B_BFu31ll_BFu8ll, "B_BFu31ll_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu8s  {
  bool v1;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 B_BFu31ll_BFu8s) C1{ Fc FL:31 Fs:8}



static void Test_B_BFu31ll_BFu8s()
{
  {
    init_simple_test("B_BFu31ll_BFu8s");
    static B_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "B_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "B_BFu31ll_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu8s(Test_B_BFu31ll_BFu8s, "B_BFu31ll_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu9i  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 B_BFu31ll_BFu9i) C1{ Fc FL:31 Fi:9}



static void Test_B_BFu31ll_BFu9i()
{
  {
    init_simple_test("B_BFu31ll_BFu9i");
    static B_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "B_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "B_BFu31ll_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu9i(Test_B_BFu31ll_BFu9i, "B_BFu31ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu9ll  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 B_BFu31ll_BFu9ll) C1{ Fc FL:31 FL:9}



static void Test_B_BFu31ll_BFu9ll()
{
  {
    init_simple_test("B_BFu31ll_BFu9ll");
    static B_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "B_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "B_BFu31ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu9ll(Test_B_BFu31ll_BFu9ll, "B_BFu31ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_BFu9s  {
  bool v1;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 B_BFu31ll_BFu9s) C1{ Fc FL:31 Fs:9}



static void Test_B_BFu31ll_BFu9s()
{
  {
    init_simple_test("B_BFu31ll_BFu9s");
    static B_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "B_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "B_BFu31ll_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_BFu9s(Test_B_BFu31ll_BFu9s, "B_BFu31ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_C  {
  bool v1;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 B_BFu31ll_C) C1{ Fc FL:31 Fc}



static void Test_B_BFu31ll_C()
{
  {
    init_simple_test("B_BFu31ll_C");
    static B_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_C)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_C");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_C");
    check_field_offset(lv, v3, 5, "B_BFu31ll_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_C(Test_B_BFu31ll_C, "B_BFu31ll_C", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_D  {
  bool v1;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 B_BFu31ll_D) C1{ Fc FL:31 FL}



static void Test_B_BFu31ll_D()
{
  {
    init_simple_test("B_BFu31ll_D");
    static B_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_D)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_D");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_D");
    check_field_offset(lv, v3, 8, "B_BFu31ll_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_D(Test_B_BFu31ll_D, "B_BFu31ll_D", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_F  {
  bool v1;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 B_BFu31ll_F) C1{ Fc FL:31 Fi}



static void Test_B_BFu31ll_F()
{
  {
    init_simple_test("B_BFu31ll_F");
    static B_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_F)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_F");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_F");
    check_field_offset(lv, v3, 8, "B_BFu31ll_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_F(Test_B_BFu31ll_F, "B_BFu31ll_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_I  {
  bool v1;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 B_BFu31ll_I) C1{ Fc FL:31 Fi}



static void Test_B_BFu31ll_I()
{
  {
    init_simple_test("B_BFu31ll_I");
    static B_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_I)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_I");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_I");
    check_field_offset(lv, v3, 8, "B_BFu31ll_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_I(Test_B_BFu31ll_I, "B_BFu31ll_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_Ip  {
  bool v1;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 B_BFu31ll_Ip) C1{ Fc FL:31 Fp}



static void Test_B_BFu31ll_Ip()
{
  {
    init_simple_test("B_BFu31ll_Ip");
    static B_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "B_BFu31ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_Ip(Test_B_BFu31ll_Ip, "B_BFu31ll_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_L  {
  bool v1;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 B_BFu31ll_L) C1{ Fc FL:31 FL}



static void Test_B_BFu31ll_L()
{
  {
    init_simple_test("B_BFu31ll_L");
    static B_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_L)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_L");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_L");
    check_field_offset(lv, v3, 8, "B_BFu31ll_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_L(Test_B_BFu31ll_L, "B_BFu31ll_L", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_S  {
  bool v1;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 B_BFu31ll_S) C1{ Fc FL:31 Fs}



static void Test_B_BFu31ll_S()
{
  {
    init_simple_test("B_BFu31ll_S");
    static B_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_S)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_S");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_S");
    check_field_offset(lv, v3, 6, "B_BFu31ll_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_S(Test_B_BFu31ll_S, "B_BFu31ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_Uc  {
  bool v1;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 B_BFu31ll_Uc) C1{ Fc FL:31 Fc}



static void Test_B_BFu31ll_Uc()
{
  {
    init_simple_test("B_BFu31ll_Uc");
    static B_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_Uc");
    check_field_offset(lv, v3, 5, "B_BFu31ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_Uc(Test_B_BFu31ll_Uc, "B_BFu31ll_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_Ui  {
  bool v1;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 B_BFu31ll_Ui) C1{ Fc FL:31 Fi}



static void Test_B_BFu31ll_Ui()
{
  {
    init_simple_test("B_BFu31ll_Ui");
    static B_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "B_BFu31ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_Ui(Test_B_BFu31ll_Ui, "B_BFu31ll_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_Ul  {
  bool v1;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 B_BFu31ll_Ul) C1{ Fc FL:31 FL}



static void Test_B_BFu31ll_Ul()
{
  {
    init_simple_test("B_BFu31ll_Ul");
    static B_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "B_BFu31ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_Ul(Test_B_BFu31ll_Ul, "B_BFu31ll_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_Us  {
  bool v1;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 B_BFu31ll_Us) C1{ Fc FL:31 Fs}



static void Test_B_BFu31ll_Us()
{
  {
    init_simple_test("B_BFu31ll_Us");
    static B_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_Us)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "B_BFu31ll_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_Us(Test_B_BFu31ll_Us, "B_BFu31ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu31ll_Vp  {
  bool v1;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 B_BFu31ll_Vp) C1{ Fc FL:31 Fp}



static void Test_B_BFu31ll_Vp()
{
  {
    init_simple_test("B_BFu31ll_Vp");
    static B_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu31ll_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu31ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "B_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "B_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "B_BFu31ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu31ll_Vp(Test_B_BFu31ll_Vp, "B_BFu31ll_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i  {
  bool v1;
  unsigned int v2:32;
};
//SIG(1 B_BFu32i) C1{ Fc Fi:32}



static void Test_B_BFu32i()
{
  {
    init_simple_test("B_BFu32i");
    static B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu32i(Test_B_BFu32i, "B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_B  {
  bool v1;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 B_BFu32i_B) C1{ Fc Fi:32 Fc}



static void Test_B_BFu32i_B()
{
  {
    init_simple_test("B_BFu32i_B");
    static B_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_B)");
    check_field_offset(lv, v1, 0, "B_BFu32i_B.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_B");
    check_field_offset(lv, v3, 8, "B_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_B(Test_B_BFu32i_B, "B_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu15i  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 B_BFu32i_BFu15i) C1{ Fc Fi:32 Fi:15}



static void Test_B_BFu32i_BFu15i()
{
  {
    init_simple_test("B_BFu32i_BFu15i");
    static B_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_BFu32i_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu15i(Test_B_BFu32i_BFu15i, "B_BFu32i_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu15ll  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 B_BFu32i_BFu15ll) C1{ Fc Fi:32 FL:15}



static void Test_B_BFu32i_BFu15ll()
{
  {
    init_simple_test("B_BFu32i_BFu15ll");
    static B_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_BFu32i_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu15ll(Test_B_BFu32i_BFu15ll, "B_BFu32i_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu15s  {
  bool v1;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 B_BFu32i_BFu15s) C1{ Fc Fi:32 Fs:15}



static void Test_B_BFu32i_BFu15s()
{
  {
    init_simple_test("B_BFu32i_BFu15s");
    static B_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_BFu32i_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu15s(Test_B_BFu32i_BFu15s, "B_BFu32i_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu16i  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 B_BFu32i_BFu16i) C1{ Fc Fi:32 Fi:16}



static void Test_B_BFu32i_BFu16i()
{
  {
    init_simple_test("B_BFu32i_BFu16i");
    static B_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_BFu32i_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu16i(Test_B_BFu32i_BFu16i, "B_BFu32i_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu16ll  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 B_BFu32i_BFu16ll) C1{ Fc Fi:32 FL:16}



static void Test_B_BFu32i_BFu16ll()
{
  {
    init_simple_test("B_BFu32i_BFu16ll");
    static B_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_BFu32i_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu16ll(Test_B_BFu32i_BFu16ll, "B_BFu32i_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu16s  {
  bool v1;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 B_BFu32i_BFu16s) C1{ Fc Fi:32 Fs:16}



static void Test_B_BFu32i_BFu16s()
{
  {
    init_simple_test("B_BFu32i_BFu16s");
    static B_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_BFu32i_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu16s(Test_B_BFu32i_BFu16s, "B_BFu32i_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu17i  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 B_BFu32i_BFu17i) C1{ Fc Fi:32 Fi:17}



static void Test_B_BFu32i_BFu17i()
{
  {
    init_simple_test("B_BFu32i_BFu17i");
    static B_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "B_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "B_BFu32i_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu17i(Test_B_BFu32i_BFu17i, "B_BFu32i_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu17ll  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 B_BFu32i_BFu17ll) C1{ Fc Fi:32 FL:17}



static void Test_B_BFu32i_BFu17ll()
{
  {
    init_simple_test("B_BFu32i_BFu17ll");
    static B_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "B_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "B_BFu32i_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu17ll(Test_B_BFu32i_BFu17ll, "B_BFu32i_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu1c  {
  bool v1;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 B_BFu32i_BFu1c) C1{ Fc Fi:32 Fc:1}



static void Test_B_BFu32i_BFu1c()
{
  {
    init_simple_test("B_BFu32i_BFu1c");
    static B_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_BFu32i_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu1c(Test_B_BFu32i_BFu1c, "B_BFu32i_BFu1c", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu1i  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 B_BFu32i_BFu1i) C1{ Fc Fi:32 Fi:1}



static void Test_B_BFu32i_BFu1i()
{
  {
    init_simple_test("B_BFu32i_BFu1i");
    static B_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_BFu32i_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu1i(Test_B_BFu32i_BFu1i, "B_BFu32i_BFu1i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu1ll  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 B_BFu32i_BFu1ll) C1{ Fc Fi:32 FL:1}



static void Test_B_BFu32i_BFu1ll()
{
  {
    init_simple_test("B_BFu32i_BFu1ll");
    static B_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_BFu32i_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu1ll(Test_B_BFu32i_BFu1ll, "B_BFu32i_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu1s  {
  bool v1;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 B_BFu32i_BFu1s) C1{ Fc Fi:32 Fs:1}



static void Test_B_BFu32i_BFu1s()
{
  {
    init_simple_test("B_BFu32i_BFu1s");
    static B_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_BFu32i_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu1s(Test_B_BFu32i_BFu1s, "B_BFu32i_BFu1s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu31i  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 B_BFu32i_BFu31i) C1{ Fc Fi:32 Fi:31}



static void Test_B_BFu32i_BFu31i()
{
  {
    init_simple_test("B_BFu32i_BFu31i");
    static B_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_BFu32i_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu31i(Test_B_BFu32i_BFu31i, "B_BFu32i_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu31ll  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 B_BFu32i_BFu31ll) C1{ Fc Fi:32 FL:31}



static void Test_B_BFu32i_BFu31ll()
{
  {
    init_simple_test("B_BFu32i_BFu31ll");
    static B_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_BFu32i_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu31ll(Test_B_BFu32i_BFu31ll, "B_BFu32i_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu32i  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 B_BFu32i_BFu32i) C1{ Fc Fi:32 Fi:32}



static void Test_B_BFu32i_BFu32i()
{
  {
    init_simple_test("B_BFu32i_BFu32i");
    static B_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu32i(Test_B_BFu32i_BFu32i, "B_BFu32i_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu32ll  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 B_BFu32i_BFu32ll) C1{ Fc Fi:32 FL:32}



static void Test_B_BFu32i_BFu32ll()
{
  {
    init_simple_test("B_BFu32i_BFu32ll");
    static B_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu32ll(Test_B_BFu32i_BFu32ll, "B_BFu32i_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu33  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 B_BFu32i_BFu33) C1{ Fc Fi:32 FL:33}



static void Test_B_BFu32i_BFu33()
{
  {
    init_simple_test("B_BFu32i_BFu33");
    static B_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu33.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "B_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "B_BFu32i_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu33(Test_B_BFu32i_BFu33, "B_BFu32i_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu7c  {
  bool v1;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 B_BFu32i_BFu7c) C1{ Fc Fi:32 Fc:7}



static void Test_B_BFu32i_BFu7c()
{
  {
    init_simple_test("B_BFu32i_BFu7c");
    static B_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_BFu32i_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu7c(Test_B_BFu32i_BFu7c, "B_BFu32i_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu7i  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 B_BFu32i_BFu7i) C1{ Fc Fi:32 Fi:7}



static void Test_B_BFu32i_BFu7i()
{
  {
    init_simple_test("B_BFu32i_BFu7i");
    static B_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_BFu32i_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu7i(Test_B_BFu32i_BFu7i, "B_BFu32i_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu7ll  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 B_BFu32i_BFu7ll) C1{ Fc Fi:32 FL:7}



static void Test_B_BFu32i_BFu7ll()
{
  {
    init_simple_test("B_BFu32i_BFu7ll");
    static B_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_BFu32i_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu7ll(Test_B_BFu32i_BFu7ll, "B_BFu32i_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu7s  {
  bool v1;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 B_BFu32i_BFu7s) C1{ Fc Fi:32 Fs:7}



static void Test_B_BFu32i_BFu7s()
{
  {
    init_simple_test("B_BFu32i_BFu7s");
    static B_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_BFu32i_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu7s(Test_B_BFu32i_BFu7s, "B_BFu32i_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu8c  {
  bool v1;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 B_BFu32i_BFu8c) C1{ Fc Fi:32 Fc:8}



static void Test_B_BFu32i_BFu8c()
{
  {
    init_simple_test("B_BFu32i_BFu8c");
    static B_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_BFu32i_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu8c(Test_B_BFu32i_BFu8c, "B_BFu32i_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu8i  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 B_BFu32i_BFu8i) C1{ Fc Fi:32 Fi:8}



static void Test_B_BFu32i_BFu8i()
{
  {
    init_simple_test("B_BFu32i_BFu8i");
    static B_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_BFu32i_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu8i(Test_B_BFu32i_BFu8i, "B_BFu32i_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu8ll  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 B_BFu32i_BFu8ll) C1{ Fc Fi:32 FL:8}



static void Test_B_BFu32i_BFu8ll()
{
  {
    init_simple_test("B_BFu32i_BFu8ll");
    static B_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_BFu32i_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu8ll(Test_B_BFu32i_BFu8ll, "B_BFu32i_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu8s  {
  bool v1;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 B_BFu32i_BFu8s) C1{ Fc Fi:32 Fs:8}



static void Test_B_BFu32i_BFu8s()
{
  {
    init_simple_test("B_BFu32i_BFu8s");
    static B_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_BFu32i_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu8s(Test_B_BFu32i_BFu8s, "B_BFu32i_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu9i  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 B_BFu32i_BFu9i) C1{ Fc Fi:32 Fi:9}



static void Test_B_BFu32i_BFu9i()
{
  {
    init_simple_test("B_BFu32i_BFu9i");
    static B_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_BFu32i_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu9i(Test_B_BFu32i_BFu9i, "B_BFu32i_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu9ll  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 B_BFu32i_BFu9ll) C1{ Fc Fi:32 FL:9}



static void Test_B_BFu32i_BFu9ll()
{
  {
    init_simple_test("B_BFu32i_BFu9ll");
    static B_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_BFu32i_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu9ll(Test_B_BFu32i_BFu9ll, "B_BFu32i_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_BFu9s  {
  bool v1;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 B_BFu32i_BFu9s) C1{ Fc Fi:32 Fs:9}



static void Test_B_BFu32i_BFu9s()
{
  {
    init_simple_test("B_BFu32i_BFu9s");
    static B_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu32i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_BFu32i_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu32i_BFu9s(Test_B_BFu32i_BFu9s, "B_BFu32i_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_C  {
  bool v1;
  unsigned int v2:32;
  char v3;
};
//SIG(1 B_BFu32i_C) C1{ Fc Fi:32 Fc}



static void Test_B_BFu32i_C()
{
  {
    init_simple_test("B_BFu32i_C");
    static B_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_C)");
    check_field_offset(lv, v1, 0, "B_BFu32i_C.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_C");
    check_field_offset(lv, v3, 8, "B_BFu32i_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_C(Test_B_BFu32i_C, "B_BFu32i_C", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_D  {
  bool v1;
  unsigned int v2:32;
  double v3;
};
//SIG(1 B_BFu32i_D) C1{ Fc Fi:32 FL}



static void Test_B_BFu32i_D()
{
  {
    init_simple_test("B_BFu32i_D");
    static B_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_D)");
    check_field_offset(lv, v1, 0, "B_BFu32i_D.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_D");
    check_field_offset(lv, v3, 8, "B_BFu32i_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_D(Test_B_BFu32i_D, "B_BFu32i_D", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_F  {
  bool v1;
  unsigned int v2:32;
  float v3;
};
//SIG(1 B_BFu32i_F) C1{ Fc Fi:32 Fi}



static void Test_B_BFu32i_F()
{
  {
    init_simple_test("B_BFu32i_F");
    static B_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_F)");
    check_field_offset(lv, v1, 0, "B_BFu32i_F.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_F");
    check_field_offset(lv, v3, 8, "B_BFu32i_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_F(Test_B_BFu32i_F, "B_BFu32i_F", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_I  {
  bool v1;
  unsigned int v2:32;
  int v3;
};
//SIG(1 B_BFu32i_I) C1{ Fc Fi:32 Fi}



static void Test_B_BFu32i_I()
{
  {
    init_simple_test("B_BFu32i_I");
    static B_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_I)");
    check_field_offset(lv, v1, 0, "B_BFu32i_I.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_I");
    check_field_offset(lv, v3, 8, "B_BFu32i_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_I(Test_B_BFu32i_I, "B_BFu32i_I", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_Ip  {
  bool v1;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 B_BFu32i_Ip) C1{ Fc Fi:32 Fp}



static void Test_B_BFu32i_Ip()
{
  {
    init_simple_test("B_BFu32i_Ip");
    static B_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu32i_Ip.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "B_BFu32i_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_Ip(Test_B_BFu32i_Ip, "B_BFu32i_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_L  {
  bool v1;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 B_BFu32i_L) C1{ Fc Fi:32 FL}



static void Test_B_BFu32i_L()
{
  {
    init_simple_test("B_BFu32i_L");
    static B_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_L)");
    check_field_offset(lv, v1, 0, "B_BFu32i_L.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_L");
    check_field_offset(lv, v3, 8, "B_BFu32i_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_L(Test_B_BFu32i_L, "B_BFu32i_L", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_S  {
  bool v1;
  unsigned int v2:32;
  short v3;
};
//SIG(1 B_BFu32i_S) C1{ Fc Fi:32 Fs}



static void Test_B_BFu32i_S()
{
  {
    init_simple_test("B_BFu32i_S");
    static B_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_S)");
    check_field_offset(lv, v1, 0, "B_BFu32i_S.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_S");
    check_field_offset(lv, v3, 8, "B_BFu32i_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_S(Test_B_BFu32i_S, "B_BFu32i_S", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_Uc  {
  bool v1;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 B_BFu32i_Uc) C1{ Fc Fi:32 Fc}



static void Test_B_BFu32i_Uc()
{
  {
    init_simple_test("B_BFu32i_Uc");
    static B_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu32i_Uc.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "B_BFu32i_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_Uc(Test_B_BFu32i_Uc, "B_BFu32i_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_Ui  {
  bool v1;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 B_BFu32i_Ui) C1{ Fc Fi:32 Fi}



static void Test_B_BFu32i_Ui()
{
  {
    init_simple_test("B_BFu32i_Ui");
    static B_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu32i_Ui.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "B_BFu32i_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_Ui(Test_B_BFu32i_Ui, "B_BFu32i_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_Ul  {
  bool v1;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 B_BFu32i_Ul) C1{ Fc Fi:32 FL}



static void Test_B_BFu32i_Ul()
{
  {
    init_simple_test("B_BFu32i_Ul");
    static B_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu32i_Ul.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "B_BFu32i_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_Ul(Test_B_BFu32i_Ul, "B_BFu32i_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_Us  {
  bool v1;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 B_BFu32i_Us) C1{ Fc Fi:32 Fs}



static void Test_B_BFu32i_Us()
{
  {
    init_simple_test("B_BFu32i_Us");
    static B_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(B_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu32i_Us)");
    check_field_offset(lv, v1, 0, "B_BFu32i_Us.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_Us");
    check_field_offset(lv, v3, 8, "B_BFu32i_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_Us(Test_B_BFu32i_Us, "B_BFu32i_Us", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32i_Vp  {
  bool v1;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 B_BFu32i_Vp) C1{ Fc Fi:32 Fp}



static void Test_B_BFu32i_Vp()
{
  {
    init_simple_test("B_BFu32i_Vp");
    static B_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32i_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu32i_Vp.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "B_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "B_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "B_BFu32i_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32i_Vp(Test_B_BFu32i_Vp, "B_BFu32i_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll  {
  bool v1;
  __tsu64 v2:32;
};
//SIG(1 B_BFu32ll) C1{ Fc FL:32}



static void Test_B_BFu32ll()
{
  {
    init_simple_test("B_BFu32ll");
    static B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll(Test_B_BFu32ll, "B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_B  {
  bool v1;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 B_BFu32ll_B) C1{ Fc FL:32 Fc}



static void Test_B_BFu32ll_B()
{
  {
    init_simple_test("B_BFu32ll_B");
    static B_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_B)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_B");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_B");
    check_field_offset(lv, v3, 5, "B_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_B(Test_B_BFu32ll_B, "B_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu15i  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 B_BFu32ll_BFu15i) C1{ Fc FL:32 Fi:15}



static void Test_B_BFu32ll_BFu15i()
{
  {
    init_simple_test("B_BFu32ll_BFu15i");
    static B_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "B_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "B_BFu32ll_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu15i(Test_B_BFu32ll_BFu15i, "B_BFu32ll_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu15ll  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 B_BFu32ll_BFu15ll) C1{ Fc FL:32 FL:15}



static void Test_B_BFu32ll_BFu15ll()
{
  {
    init_simple_test("B_BFu32ll_BFu15ll");
    static B_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "B_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "B_BFu32ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu15ll(Test_B_BFu32ll_BFu15ll, "B_BFu32ll_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu15s  {
  bool v1;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 B_BFu32ll_BFu15s) C1{ Fc FL:32 Fs:15}



static void Test_B_BFu32ll_BFu15s()
{
  {
    init_simple_test("B_BFu32ll_BFu15s");
    static B_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "B_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "B_BFu32ll_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu15s(Test_B_BFu32ll_BFu15s, "B_BFu32ll_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu16i  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 B_BFu32ll_BFu16i) C1{ Fc FL:32 Fi:16}



static void Test_B_BFu32ll_BFu16i()
{
  {
    init_simple_test("B_BFu32ll_BFu16i");
    static B_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "B_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "B_BFu32ll_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu16i(Test_B_BFu32ll_BFu16i, "B_BFu32ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu16ll  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 B_BFu32ll_BFu16ll) C1{ Fc FL:32 FL:16}



static void Test_B_BFu32ll_BFu16ll()
{
  {
    init_simple_test("B_BFu32ll_BFu16ll");
    static B_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "B_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "B_BFu32ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu16ll(Test_B_BFu32ll_BFu16ll, "B_BFu32ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu16s  {
  bool v1;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 B_BFu32ll_BFu16s) C1{ Fc FL:32 Fs:16}



static void Test_B_BFu32ll_BFu16s()
{
  {
    init_simple_test("B_BFu32ll_BFu16s");
    static B_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "B_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "B_BFu32ll_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu16s(Test_B_BFu32ll_BFu16s, "B_BFu32ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu17i  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 B_BFu32ll_BFu17i) C1{ Fc FL:32 Fi:17}



static void Test_B_BFu32ll_BFu17i()
{
  {
    init_simple_test("B_BFu32ll_BFu17i");
    static B_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "B_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "B_BFu32ll_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu17i(Test_B_BFu32ll_BFu17i, "B_BFu32ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu17ll  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 B_BFu32ll_BFu17ll) C1{ Fc FL:32 FL:17}



static void Test_B_BFu32ll_BFu17ll()
{
  {
    init_simple_test("B_BFu32ll_BFu17ll");
    static B_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "B_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "B_BFu32ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu17ll(Test_B_BFu32ll_BFu17ll, "B_BFu32ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu1c  {
  bool v1;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 B_BFu32ll_BFu1c) C1{ Fc FL:32 Fc:1}



static void Test_B_BFu32ll_BFu1c()
{
  {
    init_simple_test("B_BFu32ll_BFu1c");
    static B_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "B_BFu32ll_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu1c(Test_B_BFu32ll_BFu1c, "B_BFu32ll_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu1i  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 B_BFu32ll_BFu1i) C1{ Fc FL:32 Fi:1}



static void Test_B_BFu32ll_BFu1i()
{
  {
    init_simple_test("B_BFu32ll_BFu1i");
    static B_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "B_BFu32ll_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu1i(Test_B_BFu32ll_BFu1i, "B_BFu32ll_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu1ll  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 B_BFu32ll_BFu1ll) C1{ Fc FL:32 FL:1}



static void Test_B_BFu32ll_BFu1ll()
{
  {
    init_simple_test("B_BFu32ll_BFu1ll");
    static B_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "B_BFu32ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu1ll(Test_B_BFu32ll_BFu1ll, "B_BFu32ll_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu1s  {
  bool v1;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 B_BFu32ll_BFu1s) C1{ Fc FL:32 Fs:1}



static void Test_B_BFu32ll_BFu1s()
{
  {
    init_simple_test("B_BFu32ll_BFu1s");
    static B_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "B_BFu32ll_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu1s(Test_B_BFu32ll_BFu1s, "B_BFu32ll_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu31i  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 B_BFu32ll_BFu31i) C1{ Fc FL:32 Fi:31}



static void Test_B_BFu32ll_BFu31i()
{
  {
    init_simple_test("B_BFu32ll_BFu31i");
    static B_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_BFu32ll_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu31i(Test_B_BFu32ll_BFu31i, "B_BFu32ll_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu31ll  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 B_BFu32ll_BFu31ll) C1{ Fc FL:32 FL:31}



static void Test_B_BFu32ll_BFu31ll()
{
  {
    init_simple_test("B_BFu32ll_BFu31ll");
    static B_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "B_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "B_BFu32ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu31ll(Test_B_BFu32ll_BFu31ll, "B_BFu32ll_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu32i  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 B_BFu32ll_BFu32i) C1{ Fc FL:32 Fi:32}



static void Test_B_BFu32ll_BFu32i()
{
  {
    init_simple_test("B_BFu32ll_BFu32i");
    static B_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu32i(Test_B_BFu32ll_BFu32i, "B_BFu32ll_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu32ll  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 B_BFu32ll_BFu32ll) C1{ Fc FL:32 FL:32}



static void Test_B_BFu32ll_BFu32ll()
{
  {
    init_simple_test("B_BFu32ll_BFu32ll");
    static B_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "B_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu32ll(Test_B_BFu32ll_BFu32ll, "B_BFu32ll_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu33  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 B_BFu32ll_BFu33) C1{ Fc FL:32 FL:33}



static void Test_B_BFu32ll_BFu33()
{
  {
    init_simple_test("B_BFu32ll_BFu33");
    static B_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "B_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "B_BFu32ll_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu33(Test_B_BFu32ll_BFu33, "B_BFu32ll_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu7c  {
  bool v1;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 B_BFu32ll_BFu7c) C1{ Fc FL:32 Fc:7}



static void Test_B_BFu32ll_BFu7c()
{
  {
    init_simple_test("B_BFu32ll_BFu7c");
    static B_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "B_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "B_BFu32ll_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu7c(Test_B_BFu32ll_BFu7c, "B_BFu32ll_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu7i  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 B_BFu32ll_BFu7i) C1{ Fc FL:32 Fi:7}



static void Test_B_BFu32ll_BFu7i()
{
  {
    init_simple_test("B_BFu32ll_BFu7i");
    static B_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "B_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "B_BFu32ll_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu7i(Test_B_BFu32ll_BFu7i, "B_BFu32ll_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu7ll  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 B_BFu32ll_BFu7ll) C1{ Fc FL:32 FL:7}



static void Test_B_BFu32ll_BFu7ll()
{
  {
    init_simple_test("B_BFu32ll_BFu7ll");
    static B_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "B_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "B_BFu32ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu7ll(Test_B_BFu32ll_BFu7ll, "B_BFu32ll_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu7s  {
  bool v1;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 B_BFu32ll_BFu7s) C1{ Fc FL:32 Fs:7}



static void Test_B_BFu32ll_BFu7s()
{
  {
    init_simple_test("B_BFu32ll_BFu7s");
    static B_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "B_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "B_BFu32ll_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu7s(Test_B_BFu32ll_BFu7s, "B_BFu32ll_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu8c  {
  bool v1;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 B_BFu32ll_BFu8c) C1{ Fc FL:32 Fc:8}



static void Test_B_BFu32ll_BFu8c()
{
  {
    init_simple_test("B_BFu32ll_BFu8c");
    static B_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "B_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "B_BFu32ll_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu8c(Test_B_BFu32ll_BFu8c, "B_BFu32ll_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu8i  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 B_BFu32ll_BFu8i) C1{ Fc FL:32 Fi:8}



static void Test_B_BFu32ll_BFu8i()
{
  {
    init_simple_test("B_BFu32ll_BFu8i");
    static B_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "B_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "B_BFu32ll_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu8i(Test_B_BFu32ll_BFu8i, "B_BFu32ll_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu8ll  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 B_BFu32ll_BFu8ll) C1{ Fc FL:32 FL:8}



static void Test_B_BFu32ll_BFu8ll()
{
  {
    init_simple_test("B_BFu32ll_BFu8ll");
    static B_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "B_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "B_BFu32ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu8ll(Test_B_BFu32ll_BFu8ll, "B_BFu32ll_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu8s  {
  bool v1;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 B_BFu32ll_BFu8s) C1{ Fc FL:32 Fs:8}



static void Test_B_BFu32ll_BFu8s()
{
  {
    init_simple_test("B_BFu32ll_BFu8s");
    static B_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "B_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "B_BFu32ll_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu8s(Test_B_BFu32ll_BFu8s, "B_BFu32ll_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu9i  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 B_BFu32ll_BFu9i) C1{ Fc FL:32 Fi:9}



static void Test_B_BFu32ll_BFu9i()
{
  {
    init_simple_test("B_BFu32ll_BFu9i");
    static B_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "B_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "B_BFu32ll_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu9i(Test_B_BFu32ll_BFu9i, "B_BFu32ll_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu9ll  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 B_BFu32ll_BFu9ll) C1{ Fc FL:32 FL:9}



static void Test_B_BFu32ll_BFu9ll()
{
  {
    init_simple_test("B_BFu32ll_BFu9ll");
    static B_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "B_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "B_BFu32ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu9ll(Test_B_BFu32ll_BFu9ll, "B_BFu32ll_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_BFu9s  {
  bool v1;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 B_BFu32ll_BFu9s) C1{ Fc FL:32 Fs:9}



static void Test_B_BFu32ll_BFu9s()
{
  {
    init_simple_test("B_BFu32ll_BFu9s");
    static B_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "B_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "B_BFu32ll_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_BFu9s(Test_B_BFu32ll_BFu9s, "B_BFu32ll_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_C  {
  bool v1;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 B_BFu32ll_C) C1{ Fc FL:32 Fc}



static void Test_B_BFu32ll_C()
{
  {
    init_simple_test("B_BFu32ll_C");
    static B_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_C)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_C");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_C");
    check_field_offset(lv, v3, 5, "B_BFu32ll_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_C(Test_B_BFu32ll_C, "B_BFu32ll_C", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_D  {
  bool v1;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 B_BFu32ll_D) C1{ Fc FL:32 FL}



static void Test_B_BFu32ll_D()
{
  {
    init_simple_test("B_BFu32ll_D");
    static B_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_D)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_D");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_D");
    check_field_offset(lv, v3, 8, "B_BFu32ll_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_D(Test_B_BFu32ll_D, "B_BFu32ll_D", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_F  {
  bool v1;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 B_BFu32ll_F) C1{ Fc FL:32 Fi}



static void Test_B_BFu32ll_F()
{
  {
    init_simple_test("B_BFu32ll_F");
    static B_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_F)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_F");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_F");
    check_field_offset(lv, v3, 8, "B_BFu32ll_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_F(Test_B_BFu32ll_F, "B_BFu32ll_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_I  {
  bool v1;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 B_BFu32ll_I) C1{ Fc FL:32 Fi}



static void Test_B_BFu32ll_I()
{
  {
    init_simple_test("B_BFu32ll_I");
    static B_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_I)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_I");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_I");
    check_field_offset(lv, v3, 8, "B_BFu32ll_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_I(Test_B_BFu32ll_I, "B_BFu32ll_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_Ip  {
  bool v1;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 B_BFu32ll_Ip) C1{ Fc FL:32 Fp}



static void Test_B_BFu32ll_Ip()
{
  {
    init_simple_test("B_BFu32ll_Ip");
    static B_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "B_BFu32ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_Ip(Test_B_BFu32ll_Ip, "B_BFu32ll_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_L  {
  bool v1;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 B_BFu32ll_L) C1{ Fc FL:32 FL}



static void Test_B_BFu32ll_L()
{
  {
    init_simple_test("B_BFu32ll_L");
    static B_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_L)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_L");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_L");
    check_field_offset(lv, v3, 8, "B_BFu32ll_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_L(Test_B_BFu32ll_L, "B_BFu32ll_L", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_S  {
  bool v1;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 B_BFu32ll_S) C1{ Fc FL:32 Fs}



static void Test_B_BFu32ll_S()
{
  {
    init_simple_test("B_BFu32ll_S");
    static B_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_S)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_S");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_S");
    check_field_offset(lv, v3, 6, "B_BFu32ll_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_S(Test_B_BFu32ll_S, "B_BFu32ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_Uc  {
  bool v1;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 B_BFu32ll_Uc) C1{ Fc FL:32 Fc}



static void Test_B_BFu32ll_Uc()
{
  {
    init_simple_test("B_BFu32ll_Uc");
    static B_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_Uc");
    check_field_offset(lv, v3, 5, "B_BFu32ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_Uc(Test_B_BFu32ll_Uc, "B_BFu32ll_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_Ui  {
  bool v1;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 B_BFu32ll_Ui) C1{ Fc FL:32 Fi}



static void Test_B_BFu32ll_Ui()
{
  {
    init_simple_test("B_BFu32ll_Ui");
    static B_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "B_BFu32ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_Ui(Test_B_BFu32ll_Ui, "B_BFu32ll_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_Ul  {
  bool v1;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 B_BFu32ll_Ul) C1{ Fc FL:32 FL}



static void Test_B_BFu32ll_Ul()
{
  {
    init_simple_test("B_BFu32ll_Ul");
    static B_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(B_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "B_BFu32ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_Ul(Test_B_BFu32ll_Ul, "B_BFu32ll_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_Us  {
  bool v1;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 B_BFu32ll_Us) C1{ Fc FL:32 Fs}



static void Test_B_BFu32ll_Us()
{
  {
    init_simple_test("B_BFu32ll_Us");
    static B_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_Us)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "B_BFu32ll_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_Us(Test_B_BFu32ll_Us, "B_BFu32ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu32ll_Vp  {
  bool v1;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 B_BFu32ll_Vp) C1{ Fc FL:32 Fp}



static void Test_B_BFu32ll_Vp()
{
  {
    init_simple_test("B_BFu32ll_Vp");
    static B_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu32ll_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu32ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "B_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "B_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "B_BFu32ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu32ll_Vp(Test_B_BFu32ll_Vp, "B_BFu32ll_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33  {
  bool v1;
  __tsu64 v2:33;
};
//SIG(1 B_BFu33) C1{ Fc FL:33}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_B  {
  bool v1;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 B_BFu33_B) C1{ Fc FL:33 Fc}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu15i  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 B_BFu33_BFu15i) C1{ Fc FL:33 Fi:15}



static void Test_B_BFu33_BFu15i()
{
  {
    init_simple_test("B_BFu33_BFu15i");
    static B_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "B_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "B_BFu33_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu15i(Test_B_BFu33_BFu15i, "B_BFu33_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu15ll  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 B_BFu33_BFu15ll) C1{ Fc FL:33 FL:15}



static void Test_B_BFu33_BFu15ll()
{
  {
    init_simple_test("B_BFu33_BFu15ll");
    static B_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, 1, "B_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 1, 15, hide_ull(1LL<<14), "B_BFu33_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu15ll(Test_B_BFu33_BFu15ll, "B_BFu33_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu15s  {
  bool v1;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 B_BFu33_BFu15s) C1{ Fc FL:33 Fs:15}



static void Test_B_BFu33_BFu15s()
{
  {
    init_simple_test("B_BFu33_BFu15s");
    static B_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "B_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "B_BFu33_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu15s(Test_B_BFu33_BFu15s, "B_BFu33_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu16i  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 B_BFu33_BFu16i) C1{ Fc FL:33 Fi:16}



static void Test_B_BFu33_BFu16i()
{
  {
    init_simple_test("B_BFu33_BFu16i");
    static B_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "B_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "B_BFu33_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu16i(Test_B_BFu33_BFu16i, "B_BFu33_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu16ll  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 B_BFu33_BFu16ll) C1{ Fc FL:33 FL:16}



static void Test_B_BFu33_BFu16ll()
{
  {
    init_simple_test("B_BFu33_BFu16ll");
    static B_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, 1, "B_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 1, 16, hide_ull(1LL<<15), "B_BFu33_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu16ll(Test_B_BFu33_BFu16ll, "B_BFu33_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu16s  {
  bool v1;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 B_BFu33_BFu16s) C1{ Fc FL:33 Fs:16}



static void Test_B_BFu33_BFu16s()
{
  {
    init_simple_test("B_BFu33_BFu16s");
    static B_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "B_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "B_BFu33_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu16s(Test_B_BFu33_BFu16s, "B_BFu33_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu17i  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 B_BFu33_BFu17i) C1{ Fc FL:33 Fi:17}



static void Test_B_BFu33_BFu17i()
{
  {
    init_simple_test("B_BFu33_BFu17i");
    static B_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "B_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "B_BFu33_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu17i(Test_B_BFu33_BFu17i, "B_BFu33_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu17ll  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 B_BFu33_BFu17ll) C1{ Fc FL:33 FL:17}



static void Test_B_BFu33_BFu17ll()
{
  {
    init_simple_test("B_BFu33_BFu17ll");
    static B_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, 1, "B_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 1, 17, hide_ull(1LL<<16), "B_BFu33_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu17ll(Test_B_BFu33_BFu17ll, "B_BFu33_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu1c  {
  bool v1;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 B_BFu33_BFu1c) C1{ Fc FL:33 Fc:1}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu1i  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 B_BFu33_BFu1i) C1{ Fc FL:33 Fi:1}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu1ll  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 B_BFu33_BFu1ll) C1{ Fc FL:33 FL:1}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu1s  {
  bool v1;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 B_BFu33_BFu1s) C1{ Fc FL:33 Fs:1}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu31i  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 B_BFu33_BFu31i) C1{ Fc FL:33 Fi:31}



static void Test_B_BFu33_BFu31i()
{
  {
    init_simple_test("B_BFu33_BFu31i");
    static B_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_BFu33_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu31i(Test_B_BFu33_BFu31i, "B_BFu33_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu31ll  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 B_BFu33_BFu31ll) C1{ Fc FL:33 FL:31}



static void Test_B_BFu33_BFu31ll()
{
  {
    init_simple_test("B_BFu33_BFu31ll");
    static B_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, 1, "B_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 31, hide_ull(1LL<<30), "B_BFu33_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu31ll(Test_B_BFu33_BFu31ll, "B_BFu33_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu32i  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 B_BFu33_BFu32i) C1{ Fc FL:33 Fi:32}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu32ll  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 B_BFu33_BFu32ll) C1{ Fc FL:33 FL:32}



static void Test_B_BFu33_BFu32ll()
{
  {
    init_simple_test("B_BFu33_BFu32ll");
    static B_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, 1, "B_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,1), 32, hide_ull(1LL<<31), "B_BFu33_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu32ll(Test_B_BFu33_BFu32ll, "B_BFu33_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu33  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 B_BFu33_BFu33) C1{ Fc FL:33 FL:33}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_B_BFu33_BFu7c()
{
  {
    init_simple_test("B_BFu33_BFu7c");
    static B_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "B_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "B_BFu33_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu7c(Test_B_BFu33_BFu7c, "B_BFu33_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu7i  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 B_BFu33_BFu7i) C1{ Fc FL:33 Fi:7}



static void Test_B_BFu33_BFu7i()
{
  {
    init_simple_test("B_BFu33_BFu7i");
    static B_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "B_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "B_BFu33_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu7i(Test_B_BFu33_BFu7i, "B_BFu33_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu7ll  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 B_BFu33_BFu7ll) C1{ Fc FL:33 FL:7}



static void Test_B_BFu33_BFu7ll()
{
  {
    init_simple_test("B_BFu33_BFu7ll");
    static B_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "B_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "B_BFu33_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu7ll(Test_B_BFu33_BFu7ll, "B_BFu33_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu7s  {
  bool v1;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 B_BFu33_BFu7s) C1{ Fc FL:33 Fs:7}



static void Test_B_BFu33_BFu7s()
{
  {
    init_simple_test("B_BFu33_BFu7s");
    static B_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, 1, "B_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 1, 7, hide_ull(1LL<<6), "B_BFu33_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu7s(Test_B_BFu33_BFu7s, "B_BFu33_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_B_BFu33_BFu8c()
{
  {
    init_simple_test("B_BFu33_BFu8c");
    static B_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "B_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "B_BFu33_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu8c(Test_B_BFu33_BFu8c, "B_BFu33_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu8i  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 B_BFu33_BFu8i) C1{ Fc FL:33 Fi:8}



static void Test_B_BFu33_BFu8i()
{
  {
    init_simple_test("B_BFu33_BFu8i");
    static B_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "B_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "B_BFu33_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu8i(Test_B_BFu33_BFu8i, "B_BFu33_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu8ll  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 B_BFu33_BFu8ll) C1{ Fc FL:33 FL:8}



static void Test_B_BFu33_BFu8ll()
{
  {
    init_simple_test("B_BFu33_BFu8ll");
    static B_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, 1, "B_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 1, 8, hide_ull(1LL<<7), "B_BFu33_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu8ll(Test_B_BFu33_BFu8ll, "B_BFu33_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu8s  {
  bool v1;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 B_BFu33_BFu8s) C1{ Fc FL:33 Fs:8}



static void Test_B_BFu33_BFu8s()
{
  {
    init_simple_test("B_BFu33_BFu8s");
    static B_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "B_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "B_BFu33_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu8s(Test_B_BFu33_BFu8s, "B_BFu33_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu9i  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 B_BFu33_BFu9i) C1{ Fc FL:33 Fi:9}



static void Test_B_BFu33_BFu9i()
{
  {
    init_simple_test("B_BFu33_BFu9i");
    static B_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "B_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "B_BFu33_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu9i(Test_B_BFu33_BFu9i, "B_BFu33_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu9ll  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 B_BFu33_BFu9ll) C1{ Fc FL:33 FL:9}



static void Test_B_BFu33_BFu9ll()
{
  {
    init_simple_test("B_BFu33_BFu9ll");
    static B_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, 1, "B_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 1, 9, hide_ull(1LL<<8), "B_BFu33_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu9ll(Test_B_BFu33_BFu9ll, "B_BFu33_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_BFu9s  {
  bool v1;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 B_BFu33_BFu9s) C1{ Fc FL:33 Fs:9}



static void Test_B_BFu33_BFu9s()
{
  {
    init_simple_test("B_BFu33_BFu9s");
    static B_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu33_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu33_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "B_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "B_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "B_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "B_BFu33_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu33_BFu9s(Test_B_BFu33_BFu9s, "B_BFu33_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_C  {
  bool v1;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 B_BFu33_C) C1{ Fc FL:33 Fc}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_D  {
  bool v1;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 B_BFu33_D) C1{ Fc FL:33 FL}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_F  {
  bool v1;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 B_BFu33_F) C1{ Fc FL:33 Fi}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_I  {
  bool v1;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 B_BFu33_I) C1{ Fc FL:33 Fi}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_Ip  {
  bool v1;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 B_BFu33_Ip) C1{ Fc FL:33 Fp}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_L  {
  bool v1;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 B_BFu33_L) C1{ Fc FL:33 FL}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_S  {
  bool v1;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 B_BFu33_S) C1{ Fc FL:33 Fs}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_Uc  {
  bool v1;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 B_BFu33_Uc) C1{ Fc FL:33 Fc}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_Ui  {
  bool v1;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 B_BFu33_Ui) C1{ Fc FL:33 Fi}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_Ul  {
  bool v1;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 B_BFu33_Ul) C1{ Fc FL:33 FL}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_Us  {
  bool v1;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 B_BFu33_Us) C1{ Fc FL:33 Fs}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu33_Vp  {
  bool v1;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 B_BFu33_Vp) C1{ Fc FL:33 Fp}



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

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c  {
  bool v1;
  unsigned char v2:7;
};
//SIG(1 B_BFu7c) C1{ Fc Fc:7}



static void Test_B_BFu7c()
{
  {
    init_simple_test("B_BFu7c");
    static B_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu7c(Test_B_BFu7c, "B_BFu7c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_B  {
  bool v1;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 B_BFu7c_B) C1{ Fc Fc:7 Fc}



static void Test_B_BFu7c_B()
{
  {
    init_simple_test("B_BFu7c_B");
    static B_BFu7c_B lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu7c_B)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu7c_B)");
    check_field_offset(lv, v1, 0, "B_BFu7c_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_B");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_B");
    check_field_offset(lv, v3, 2, "B_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_B(Test_B_BFu7c_B, "B_BFu7c_B", 3);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu15i  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 B_BFu7c_BFu15i) C1{ Fc Fc:7 Fi:15}



static void Test_B_BFu7c_BFu15i()
{
  {
    init_simple_test("B_BFu7c_BFu15i");
    static B_BFu7c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "B_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "B_BFu7c_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu15i(Test_B_BFu7c_BFu15i, "B_BFu7c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu15ll  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 B_BFu7c_BFu15ll) C1{ Fc Fc:7 FL:15}



static void Test_B_BFu7c_BFu15ll()
{
  {
    init_simple_test("B_BFu7c_BFu15ll");
    static B_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "B_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "B_BFu7c_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu15ll(Test_B_BFu7c_BFu15ll, "B_BFu7c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu15s  {
  bool v1;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 B_BFu7c_BFu15s) C1{ Fc Fc:7 Fs:15}



static void Test_B_BFu7c_BFu15s()
{
  {
    init_simple_test("B_BFu7c_BFu15s");
    static B_BFu7c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7c_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu7c_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu15s(Test_B_BFu7c_BFu15s, "B_BFu7c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu16i  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 B_BFu7c_BFu16i) C1{ Fc Fc:7 Fi:16}



static void Test_B_BFu7c_BFu16i()
{
  {
    init_simple_test("B_BFu7c_BFu16i");
    static B_BFu7c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "B_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "B_BFu7c_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu16i(Test_B_BFu7c_BFu16i, "B_BFu7c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu16ll  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 B_BFu7c_BFu16ll) C1{ Fc Fc:7 FL:16}



static void Test_B_BFu7c_BFu16ll()
{
  {
    init_simple_test("B_BFu7c_BFu16ll");
    static B_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "B_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "B_BFu7c_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu16ll(Test_B_BFu7c_BFu16ll, "B_BFu7c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu16s  {
  bool v1;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 B_BFu7c_BFu16s) C1{ Fc Fc:7 Fs:16}



static void Test_B_BFu7c_BFu16s()
{
  {
    init_simple_test("B_BFu7c_BFu16s");
    static B_BFu7c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7c_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu7c_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu16s(Test_B_BFu7c_BFu16s, "B_BFu7c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu17i  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 B_BFu7c_BFu17i) C1{ Fc Fc:7 Fi:17}



static void Test_B_BFu7c_BFu17i()
{
  {
    init_simple_test("B_BFu7c_BFu17i");
    static B_BFu7c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "B_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "B_BFu7c_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu17i(Test_B_BFu7c_BFu17i, "B_BFu7c_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu17ll  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 B_BFu7c_BFu17ll) C1{ Fc Fc:7 FL:17}



static void Test_B_BFu7c_BFu17ll()
{
  {
    init_simple_test("B_BFu7c_BFu17ll");
    static B_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "B_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "B_BFu7c_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu17ll(Test_B_BFu7c_BFu17ll, "B_BFu7c_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu1c  {
  bool v1;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 B_BFu7c_BFu1c) C1{ Fc Fc:7 Fc:1}



static void Test_B_BFu7c_BFu1c()
{
  {
    init_simple_test("B_BFu7c_BFu1c");
    static B_BFu7c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu7c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu7c_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7c_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu1c(Test_B_BFu7c_BFu1c, "B_BFu7c_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu1i  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 B_BFu7c_BFu1i) C1{ Fc Fc:7 Fi:1}



static void Test_B_BFu7c_BFu1i()
{
  {
    init_simple_test("B_BFu7c_BFu1i");
    static B_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7c_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu1i(Test_B_BFu7c_BFu1i, "B_BFu7c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu1ll  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 B_BFu7c_BFu1ll) C1{ Fc Fc:7 FL:1}



static void Test_B_BFu7c_BFu1ll()
{
  {
    init_simple_test("B_BFu7c_BFu1ll");
    static B_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7c_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu1ll(Test_B_BFu7c_BFu1ll, "B_BFu7c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu1s  {
  bool v1;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 B_BFu7c_BFu1s) C1{ Fc Fc:7 Fs:1}



static void Test_B_BFu7c_BFu1s()
{
  {
    init_simple_test("B_BFu7c_BFu1s");
    static B_BFu7c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu7c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7c_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7c_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu1s(Test_B_BFu7c_BFu1s, "B_BFu7c_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu31i  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 B_BFu7c_BFu31i) C1{ Fc Fc:7 Fi:31}



static void Test_B_BFu7c_BFu31i()
{
  {
    init_simple_test("B_BFu7c_BFu31i");
    static B_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu7c_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu31i(Test_B_BFu7c_BFu31i, "B_BFu7c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu31ll  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 B_BFu7c_BFu31ll) C1{ Fc Fc:7 FL:31}



static void Test_B_BFu7c_BFu31ll()
{
  {
    init_simple_test("B_BFu7c_BFu31ll");
    static B_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "B_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "B_BFu7c_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu31ll(Test_B_BFu7c_BFu31ll, "B_BFu7c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu32i  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 B_BFu7c_BFu32i) C1{ Fc Fc:7 Fi:32}



static void Test_B_BFu7c_BFu32i()
{
  {
    init_simple_test("B_BFu7c_BFu32i");
    static B_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu7c_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu32i(Test_B_BFu7c_BFu32i, "B_BFu7c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu32ll  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 B_BFu7c_BFu32ll) C1{ Fc Fc:7 FL:32}



static void Test_B_BFu7c_BFu32ll()
{
  {
    init_simple_test("B_BFu7c_BFu32ll");
    static B_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "B_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "B_BFu7c_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu32ll(Test_B_BFu7c_BFu32ll, "B_BFu7c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  B_BFu7c_BFu33  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 B_BFu7c_BFu33) C1{ Fc Fc:7 FL:33}



static void Test_B_BFu7c_BFu33()
{
  {
    init_simple_test("B_BFu7c_BFu33");
    static B_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "B_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "B_BFu7c_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu33(Test_B_BFu7c_BFu33, "B_BFu7c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu7c  {
  bool v1;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 B_BFu7c_BFu7c) C1{ Fc Fc:7 Fc:7}



static void Test_B_BFu7c_BFu7c()
{
  {
    init_simple_test("B_BFu7c_BFu7c");
    static B_BFu7c_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu7c_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu7c(Test_B_BFu7c_BFu7c, "B_BFu7c_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu7i  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 B_BFu7c_BFu7i) C1{ Fc Fc:7 Fi:7}



static void Test_B_BFu7c_BFu7i()
{
  {
    init_simple_test("B_BFu7c_BFu7i");
    static B_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "B_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "B_BFu7c_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu7i(Test_B_BFu7c_BFu7i, "B_BFu7c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu7ll  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 B_BFu7c_BFu7ll) C1{ Fc Fc:7 FL:7}



static void Test_B_BFu7c_BFu7ll()
{
  {
    init_simple_test("B_BFu7c_BFu7ll");
    static B_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "B_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "B_BFu7c_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu7ll(Test_B_BFu7c_BFu7ll, "B_BFu7c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu7s  {
  bool v1;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 B_BFu7c_BFu7s) C1{ Fc Fc:7 Fs:7}



static void Test_B_BFu7c_BFu7s()
{
  {
    init_simple_test("B_BFu7c_BFu7s");
    static B_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7c_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu7s(Test_B_BFu7c_BFu7s, "B_BFu7c_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu8c  {
  bool v1;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 B_BFu7c_BFu8c) C1{ Fc Fc:7 Fc:8}



static void Test_B_BFu7c_BFu8c()
{
  {
    init_simple_test("B_BFu7c_BFu8c");
    static B_BFu7c_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu7c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu7c_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu7c_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu8c(Test_B_BFu7c_BFu8c, "B_BFu7c_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu8i  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 B_BFu7c_BFu8i) C1{ Fc Fc:7 Fi:8}



static void Test_B_BFu7c_BFu8i()
{
  {
    init_simple_test("B_BFu7c_BFu8i");
    static B_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "B_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "B_BFu7c_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu8i(Test_B_BFu7c_BFu8i, "B_BFu7c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu8ll  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 B_BFu7c_BFu8ll) C1{ Fc Fc:7 FL:8}



static void Test_B_BFu7c_BFu8ll()
{
  {
    init_simple_test("B_BFu7c_BFu8ll");
    static B_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "B_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "B_BFu7c_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu8ll(Test_B_BFu7c_BFu8ll, "B_BFu7c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu8s  {
  bool v1;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 B_BFu7c_BFu8s) C1{ Fc Fc:7 Fs:8}



static void Test_B_BFu7c_BFu8s()
{
  {
    init_simple_test("B_BFu7c_BFu8s");
    static B_BFu7c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7c_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu7c_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu8s(Test_B_BFu7c_BFu8s, "B_BFu7c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu9i  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 B_BFu7c_BFu9i) C1{ Fc Fc:7 Fi:9}



static void Test_B_BFu7c_BFu9i()
{
  {
    init_simple_test("B_BFu7c_BFu9i");
    static B_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "B_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "B_BFu7c_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu9i(Test_B_BFu7c_BFu9i, "B_BFu7c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu9ll  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 B_BFu7c_BFu9ll) C1{ Fc Fc:7 FL:9}



static void Test_B_BFu7c_BFu9ll()
{
  {
    init_simple_test("B_BFu7c_BFu9ll");
    static B_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "B_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "B_BFu7c_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu9ll(Test_B_BFu7c_BFu9ll, "B_BFu7c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_BFu9s  {
  bool v1;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 B_BFu7c_BFu9s) C1{ Fc Fc:7 Fs:9}



static void Test_B_BFu7c_BFu9s()
{
  {
    init_simple_test("B_BFu7c_BFu9s");
    static B_BFu7c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7c_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu7c_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu7c_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu7c_BFu9s(Test_B_BFu7c_BFu9s, "B_BFu7c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_C  {
  bool v1;
  unsigned char v2:7;
  char v3;
};
//SIG(1 B_BFu7c_C) C1{ Fc Fc:7 Fc}



static void Test_B_BFu7c_C()
{
  {
    init_simple_test("B_BFu7c_C");
    static B_BFu7c_C lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu7c_C)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu7c_C)");
    check_field_offset(lv, v1, 0, "B_BFu7c_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_C");
    check_field_offset(lv, v3, 2, "B_BFu7c_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_C(Test_B_BFu7c_C, "B_BFu7c_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_D  {
  bool v1;
  unsigned char v2:7;
  double v3;
};
//SIG(1 B_BFu7c_D) C1{ Fc Fc:7 FL}



static void Test_B_BFu7c_D()
{
  {
    init_simple_test("B_BFu7c_D");
    static B_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_D)");
    check_field_offset(lv, v1, 0, "B_BFu7c_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7c_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_D(Test_B_BFu7c_D, "B_BFu7c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_F  {
  bool v1;
  unsigned char v2:7;
  float v3;
};
//SIG(1 B_BFu7c_F) C1{ Fc Fc:7 Fi}



static void Test_B_BFu7c_F()
{
  {
    init_simple_test("B_BFu7c_F");
    static B_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_F)");
    check_field_offset(lv, v1, 0, "B_BFu7c_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_F");
    check_field_offset(lv, v3, 4, "B_BFu7c_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_F(Test_B_BFu7c_F, "B_BFu7c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_I  {
  bool v1;
  unsigned char v2:7;
  int v3;
};
//SIG(1 B_BFu7c_I) C1{ Fc Fc:7 Fi}



static void Test_B_BFu7c_I()
{
  {
    init_simple_test("B_BFu7c_I");
    static B_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_I)");
    check_field_offset(lv, v1, 0, "B_BFu7c_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_I");
    check_field_offset(lv, v3, 4, "B_BFu7c_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_I(Test_B_BFu7c_I, "B_BFu7c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_Ip  {
  bool v1;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 B_BFu7c_Ip) C1{ Fc Fc:7 Fp}



static void Test_B_BFu7c_Ip()
{
  {
    init_simple_test("B_BFu7c_Ip");
    static B_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu7c_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7c_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_Ip(Test_B_BFu7c_Ip, "B_BFu7c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_L  {
  bool v1;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 B_BFu7c_L) C1{ Fc Fc:7 FL}



static void Test_B_BFu7c_L()
{
  {
    init_simple_test("B_BFu7c_L");
    static B_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_L)");
    check_field_offset(lv, v1, 0, "B_BFu7c_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7c_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_L(Test_B_BFu7c_L, "B_BFu7c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_S  {
  bool v1;
  unsigned char v2:7;
  short v3;
};
//SIG(1 B_BFu7c_S) C1{ Fc Fc:7 Fs}



static void Test_B_BFu7c_S()
{
  {
    init_simple_test("B_BFu7c_S");
    static B_BFu7c_S lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7c_S)");
    check_field_offset(lv, v1, 0, "B_BFu7c_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_S");
    check_field_offset(lv, v3, 2, "B_BFu7c_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_S(Test_B_BFu7c_S, "B_BFu7c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_Uc  {
  bool v1;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 B_BFu7c_Uc) C1{ Fc Fc:7 Fc}



static void Test_B_BFu7c_Uc()
{
  {
    init_simple_test("B_BFu7c_Uc");
    static B_BFu7c_Uc lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu7c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu7c_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu7c_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_Uc");
    check_field_offset(lv, v3, 2, "B_BFu7c_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_Uc(Test_B_BFu7c_Uc, "B_BFu7c_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_Ui  {
  bool v1;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 B_BFu7c_Ui) C1{ Fc Fc:7 Fi}



static void Test_B_BFu7c_Ui()
{
  {
    init_simple_test("B_BFu7c_Ui");
    static B_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7c_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu7c_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "B_BFu7c_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_Ui(Test_B_BFu7c_Ui, "B_BFu7c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_Ul  {
  bool v1;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 B_BFu7c_Ul) C1{ Fc Fc:7 FL}



static void Test_B_BFu7c_Ul()
{
  {
    init_simple_test("B_BFu7c_Ul");
    static B_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu7c_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7c_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_Ul(Test_B_BFu7c_Ul, "B_BFu7c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_Us  {
  bool v1;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 B_BFu7c_Us) C1{ Fc Fc:7 Fs}



static void Test_B_BFu7c_Us()
{
  {
    init_simple_test("B_BFu7c_Us");
    static B_BFu7c_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7c_Us)");
    check_field_offset(lv, v1, 0, "B_BFu7c_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_Us");
    check_field_offset(lv, v3, 2, "B_BFu7c_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_Us(Test_B_BFu7c_Us, "B_BFu7c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7c_Vp  {
  bool v1;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 B_BFu7c_Vp) C1{ Fc Fc:7 Fp}



static void Test_B_BFu7c_Vp()
{
  {
    init_simple_test("B_BFu7c_Vp");
    static B_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7c_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu7c_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7c_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7c_Vp(Test_B_BFu7c_Vp, "B_BFu7c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i  {
  bool v1;
  unsigned int v2:7;
};
//SIG(1 B_BFu7i) C1{ Fc Fi:7}



static void Test_B_BFu7i()
{
  {
    init_simple_test("B_BFu7i");
    static B_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu7i(Test_B_BFu7i, "B_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_B  {
  bool v1;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 B_BFu7i_B) C1{ Fc Fi:7 Fc}



static void Test_B_BFu7i_B()
{
  {
    init_simple_test("B_BFu7i_B");
    static B_BFu7i_B lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_B)");
    check_field_offset(lv, v1, 0, "B_BFu7i_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_B");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_B");
    check_field_offset(lv, v3, 2, "B_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_B(Test_B_BFu7i_B, "B_BFu7i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu15i  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 B_BFu7i_BFu15i) C1{ Fc Fi:7 Fi:15}



static void Test_B_BFu7i_BFu15i()
{
  {
    init_simple_test("B_BFu7i_BFu15i");
    static B_BFu7i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "B_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "B_BFu7i_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu15i(Test_B_BFu7i_BFu15i, "B_BFu7i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu15ll  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 B_BFu7i_BFu15ll) C1{ Fc Fi:7 FL:15}



static void Test_B_BFu7i_BFu15ll()
{
  {
    init_simple_test("B_BFu7i_BFu15ll");
    static B_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "B_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "B_BFu7i_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu15ll(Test_B_BFu7i_BFu15ll, "B_BFu7i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu15s  {
  bool v1;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 B_BFu7i_BFu15s) C1{ Fc Fi:7 Fs:15}



static void Test_B_BFu7i_BFu15s()
{
  {
    init_simple_test("B_BFu7i_BFu15s");
    static B_BFu7i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu7i_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu15s(Test_B_BFu7i_BFu15s, "B_BFu7i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu16i  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 B_BFu7i_BFu16i) C1{ Fc Fi:7 Fi:16}



static void Test_B_BFu7i_BFu16i()
{
  {
    init_simple_test("B_BFu7i_BFu16i");
    static B_BFu7i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "B_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "B_BFu7i_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu16i(Test_B_BFu7i_BFu16i, "B_BFu7i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu16ll  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 B_BFu7i_BFu16ll) C1{ Fc Fi:7 FL:16}



static void Test_B_BFu7i_BFu16ll()
{
  {
    init_simple_test("B_BFu7i_BFu16ll");
    static B_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "B_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "B_BFu7i_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu16ll(Test_B_BFu7i_BFu16ll, "B_BFu7i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu16s  {
  bool v1;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 B_BFu7i_BFu16s) C1{ Fc Fi:7 Fs:16}



static void Test_B_BFu7i_BFu16s()
{
  {
    init_simple_test("B_BFu7i_BFu16s");
    static B_BFu7i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu7i_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu16s(Test_B_BFu7i_BFu16s, "B_BFu7i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu17i  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 B_BFu7i_BFu17i) C1{ Fc Fi:7 Fi:17}



static void Test_B_BFu7i_BFu17i()
{
  {
    init_simple_test("B_BFu7i_BFu17i");
    static B_BFu7i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "B_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "B_BFu7i_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu17i(Test_B_BFu7i_BFu17i, "B_BFu7i_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu17ll  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 B_BFu7i_BFu17ll) C1{ Fc Fi:7 FL:17}



static void Test_B_BFu7i_BFu17ll()
{
  {
    init_simple_test("B_BFu7i_BFu17ll");
    static B_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "B_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "B_BFu7i_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu17ll(Test_B_BFu7i_BFu17ll, "B_BFu7i_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu1c  {
  bool v1;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 B_BFu7i_BFu1c) C1{ Fc Fi:7 Fc:1}



static void Test_B_BFu7i_BFu1c()
{
  {
    init_simple_test("B_BFu7i_BFu1c");
    static B_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7i_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu1c(Test_B_BFu7i_BFu1c, "B_BFu7i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu1i  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 B_BFu7i_BFu1i) C1{ Fc Fi:7 Fi:1}



static void Test_B_BFu7i_BFu1i()
{
  {
    init_simple_test("B_BFu7i_BFu1i");
    static B_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7i_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu1i(Test_B_BFu7i_BFu1i, "B_BFu7i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu1ll  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 B_BFu7i_BFu1ll) C1{ Fc Fi:7 FL:1}



static void Test_B_BFu7i_BFu1ll()
{
  {
    init_simple_test("B_BFu7i_BFu1ll");
    static B_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7i_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu1ll(Test_B_BFu7i_BFu1ll, "B_BFu7i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu1s  {
  bool v1;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 B_BFu7i_BFu1s) C1{ Fc Fi:7 Fs:1}



static void Test_B_BFu7i_BFu1s()
{
  {
    init_simple_test("B_BFu7i_BFu1s");
    static B_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7i_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu1s(Test_B_BFu7i_BFu1s, "B_BFu7i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu31i  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 B_BFu7i_BFu31i) C1{ Fc Fi:7 Fi:31}



static void Test_B_BFu7i_BFu31i()
{
  {
    init_simple_test("B_BFu7i_BFu31i");
    static B_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu7i_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu31i(Test_B_BFu7i_BFu31i, "B_BFu7i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu31ll  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 B_BFu7i_BFu31ll) C1{ Fc Fi:7 FL:31}



static void Test_B_BFu7i_BFu31ll()
{
  {
    init_simple_test("B_BFu7i_BFu31ll");
    static B_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "B_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "B_BFu7i_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu31ll(Test_B_BFu7i_BFu31ll, "B_BFu7i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu32i  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 B_BFu7i_BFu32i) C1{ Fc Fi:7 Fi:32}



static void Test_B_BFu7i_BFu32i()
{
  {
    init_simple_test("B_BFu7i_BFu32i");
    static B_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu7i_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu32i(Test_B_BFu7i_BFu32i, "B_BFu7i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu32ll  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 B_BFu7i_BFu32ll) C1{ Fc Fi:7 FL:32}



static void Test_B_BFu7i_BFu32ll()
{
  {
    init_simple_test("B_BFu7i_BFu32ll");
    static B_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "B_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "B_BFu7i_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu32ll(Test_B_BFu7i_BFu32ll, "B_BFu7i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu33  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 B_BFu7i_BFu33) C1{ Fc Fi:7 FL:33}



static void Test_B_BFu7i_BFu33()
{
  {
    init_simple_test("B_BFu7i_BFu33");
    static B_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "B_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "B_BFu7i_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu33(Test_B_BFu7i_BFu33, "B_BFu7i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu7c  {
  bool v1;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 B_BFu7i_BFu7c) C1{ Fc Fi:7 Fc:7}



static void Test_B_BFu7i_BFu7c()
{
  {
    init_simple_test("B_BFu7i_BFu7c");
    static B_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu7c(Test_B_BFu7i_BFu7c, "B_BFu7i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu7i  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 B_BFu7i_BFu7i) C1{ Fc Fi:7 Fi:7}



static void Test_B_BFu7i_BFu7i()
{
  {
    init_simple_test("B_BFu7i_BFu7i");
    static B_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "B_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "B_BFu7i_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu7i(Test_B_BFu7i_BFu7i, "B_BFu7i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu7ll  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 B_BFu7i_BFu7ll) C1{ Fc Fi:7 FL:7}



static void Test_B_BFu7i_BFu7ll()
{
  {
    init_simple_test("B_BFu7i_BFu7ll");
    static B_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "B_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "B_BFu7i_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu7ll(Test_B_BFu7i_BFu7ll, "B_BFu7i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu7s  {
  bool v1;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 B_BFu7i_BFu7s) C1{ Fc Fi:7 Fs:7}



static void Test_B_BFu7i_BFu7s()
{
  {
    init_simple_test("B_BFu7i_BFu7s");
    static B_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu7s(Test_B_BFu7i_BFu7s, "B_BFu7i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu8c  {
  bool v1;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 B_BFu7i_BFu8c) C1{ Fc Fi:7 Fc:8}



static void Test_B_BFu7i_BFu8c()
{
  {
    init_simple_test("B_BFu7i_BFu8c");
    static B_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu7i_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu8c(Test_B_BFu7i_BFu8c, "B_BFu7i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu8i  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 B_BFu7i_BFu8i) C1{ Fc Fi:7 Fi:8}



static void Test_B_BFu7i_BFu8i()
{
  {
    init_simple_test("B_BFu7i_BFu8i");
    static B_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "B_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "B_BFu7i_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu8i(Test_B_BFu7i_BFu8i, "B_BFu7i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu8ll  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 B_BFu7i_BFu8ll) C1{ Fc Fi:7 FL:8}



static void Test_B_BFu7i_BFu8ll()
{
  {
    init_simple_test("B_BFu7i_BFu8ll");
    static B_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "B_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "B_BFu7i_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu8ll(Test_B_BFu7i_BFu8ll, "B_BFu7i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu8s  {
  bool v1;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 B_BFu7i_BFu8s) C1{ Fc Fi:7 Fs:8}



static void Test_B_BFu7i_BFu8s()
{
  {
    init_simple_test("B_BFu7i_BFu8s");
    static B_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu7i_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu8s(Test_B_BFu7i_BFu8s, "B_BFu7i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu9i  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 B_BFu7i_BFu9i) C1{ Fc Fi:7 Fi:9}



static void Test_B_BFu7i_BFu9i()
{
  {
    init_simple_test("B_BFu7i_BFu9i");
    static B_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "B_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "B_BFu7i_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu9i(Test_B_BFu7i_BFu9i, "B_BFu7i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu9ll  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 B_BFu7i_BFu9ll) C1{ Fc Fi:7 FL:9}



static void Test_B_BFu7i_BFu9ll()
{
  {
    init_simple_test("B_BFu7i_BFu9ll");
    static B_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "B_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "B_BFu7i_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu9ll(Test_B_BFu7i_BFu9ll, "B_BFu7i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_BFu9s  {
  bool v1;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 B_BFu7i_BFu9s) C1{ Fc Fi:7 Fs:9}



static void Test_B_BFu7i_BFu9s()
{
  {
    init_simple_test("B_BFu7i_BFu9s");
    static B_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu7i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu7i_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu7i_BFu9s(Test_B_BFu7i_BFu9s, "B_BFu7i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_C  {
  bool v1;
  unsigned int v2:7;
  char v3;
};
//SIG(1 B_BFu7i_C) C1{ Fc Fi:7 Fc}



static void Test_B_BFu7i_C()
{
  {
    init_simple_test("B_BFu7i_C");
    static B_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_C)");
    check_field_offset(lv, v1, 0, "B_BFu7i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_C");
    check_field_offset(lv, v3, 2, "B_BFu7i_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_C(Test_B_BFu7i_C, "B_BFu7i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_D  {
  bool v1;
  unsigned int v2:7;
  double v3;
};
//SIG(1 B_BFu7i_D) C1{ Fc Fi:7 FL}



static void Test_B_BFu7i_D()
{
  {
    init_simple_test("B_BFu7i_D");
    static B_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_D)");
    check_field_offset(lv, v1, 0, "B_BFu7i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7i_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_D(Test_B_BFu7i_D, "B_BFu7i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_F  {
  bool v1;
  unsigned int v2:7;
  float v3;
};
//SIG(1 B_BFu7i_F) C1{ Fc Fi:7 Fi}



static void Test_B_BFu7i_F()
{
  {
    init_simple_test("B_BFu7i_F");
    static B_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_F)");
    check_field_offset(lv, v1, 0, "B_BFu7i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_F");
    check_field_offset(lv, v3, 4, "B_BFu7i_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_F(Test_B_BFu7i_F, "B_BFu7i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_I  {
  bool v1;
  unsigned int v2:7;
  int v3;
};
//SIG(1 B_BFu7i_I) C1{ Fc Fi:7 Fi}



static void Test_B_BFu7i_I()
{
  {
    init_simple_test("B_BFu7i_I");
    static B_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_I)");
    check_field_offset(lv, v1, 0, "B_BFu7i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_I");
    check_field_offset(lv, v3, 4, "B_BFu7i_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_I(Test_B_BFu7i_I, "B_BFu7i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_Ip  {
  bool v1;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 B_BFu7i_Ip) C1{ Fc Fi:7 Fp}



static void Test_B_BFu7i_Ip()
{
  {
    init_simple_test("B_BFu7i_Ip");
    static B_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu7i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7i_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_Ip(Test_B_BFu7i_Ip, "B_BFu7i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_L  {
  bool v1;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 B_BFu7i_L) C1{ Fc Fi:7 FL}



static void Test_B_BFu7i_L()
{
  {
    init_simple_test("B_BFu7i_L");
    static B_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_L)");
    check_field_offset(lv, v1, 0, "B_BFu7i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7i_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_L(Test_B_BFu7i_L, "B_BFu7i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_S  {
  bool v1;
  unsigned int v2:7;
  short v3;
};
//SIG(1 B_BFu7i_S) C1{ Fc Fi:7 Fs}



static void Test_B_BFu7i_S()
{
  {
    init_simple_test("B_BFu7i_S");
    static B_BFu7i_S lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_S)");
    check_field_offset(lv, v1, 0, "B_BFu7i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_S");
    check_field_offset(lv, v3, 2, "B_BFu7i_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_S(Test_B_BFu7i_S, "B_BFu7i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_Uc  {
  bool v1;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 B_BFu7i_Uc) C1{ Fc Fi:7 Fc}



static void Test_B_BFu7i_Uc()
{
  {
    init_simple_test("B_BFu7i_Uc");
    static B_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu7i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_Uc");
    check_field_offset(lv, v3, 2, "B_BFu7i_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_Uc(Test_B_BFu7i_Uc, "B_BFu7i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_Ui  {
  bool v1;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 B_BFu7i_Ui) C1{ Fc Fi:7 Fi}



static void Test_B_BFu7i_Ui()
{
  {
    init_simple_test("B_BFu7i_Ui");
    static B_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu7i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "B_BFu7i_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_Ui(Test_B_BFu7i_Ui, "B_BFu7i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_Ul  {
  bool v1;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 B_BFu7i_Ul) C1{ Fc Fi:7 FL}



static void Test_B_BFu7i_Ul()
{
  {
    init_simple_test("B_BFu7i_Ul");
    static B_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu7i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7i_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_Ul(Test_B_BFu7i_Ul, "B_BFu7i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_Us  {
  bool v1;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 B_BFu7i_Us) C1{ Fc Fi:7 Fs}



static void Test_B_BFu7i_Us()
{
  {
    init_simple_test("B_BFu7i_Us");
    static B_BFu7i_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7i_Us)");
    check_field_offset(lv, v1, 0, "B_BFu7i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_Us");
    check_field_offset(lv, v3, 2, "B_BFu7i_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_Us(Test_B_BFu7i_Us, "B_BFu7i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7i_Vp  {
  bool v1;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 B_BFu7i_Vp) C1{ Fc Fi:7 Fp}



static void Test_B_BFu7i_Vp()
{
  {
    init_simple_test("B_BFu7i_Vp");
    static B_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7i_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu7i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7i_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7i_Vp(Test_B_BFu7i_Vp, "B_BFu7i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll  {
  bool v1;
  __tsu64 v2:7;
};
//SIG(1 B_BFu7ll) C1{ Fc FL:7}



static void Test_B_BFu7ll()
{
  {
    init_simple_test("B_BFu7ll");
    static B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll(Test_B_BFu7ll, "B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_B  {
  bool v1;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 B_BFu7ll_B) C1{ Fc FL:7 Fc}



static void Test_B_BFu7ll_B()
{
  {
    init_simple_test("B_BFu7ll_B");
    static B_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_B)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_B");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_B");
    check_field_offset(lv, v3, 2, "B_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_B(Test_B_BFu7ll_B, "B_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu15i  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 B_BFu7ll_BFu15i) C1{ Fc FL:7 Fi:15}



static void Test_B_BFu7ll_BFu15i()
{
  {
    init_simple_test("B_BFu7ll_BFu15i");
    static B_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "B_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "B_BFu7ll_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu15i(Test_B_BFu7ll_BFu15i, "B_BFu7ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu15ll  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 B_BFu7ll_BFu15ll) C1{ Fc FL:7 FL:15}



static void Test_B_BFu7ll_BFu15ll()
{
  {
    init_simple_test("B_BFu7ll_BFu15ll");
    static B_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "B_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "B_BFu7ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu15ll(Test_B_BFu7ll_BFu15ll, "B_BFu7ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu15s  {
  bool v1;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 B_BFu7ll_BFu15s) C1{ Fc FL:7 Fs:15}



static void Test_B_BFu7ll_BFu15s()
{
  {
    init_simple_test("B_BFu7ll_BFu15s");
    static B_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu7ll_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu15s(Test_B_BFu7ll_BFu15s, "B_BFu7ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu16i  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 B_BFu7ll_BFu16i) C1{ Fc FL:7 Fi:16}



static void Test_B_BFu7ll_BFu16i()
{
  {
    init_simple_test("B_BFu7ll_BFu16i");
    static B_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "B_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "B_BFu7ll_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu16i(Test_B_BFu7ll_BFu16i, "B_BFu7ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu16ll  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 B_BFu7ll_BFu16ll) C1{ Fc FL:7 FL:16}



static void Test_B_BFu7ll_BFu16ll()
{
  {
    init_simple_test("B_BFu7ll_BFu16ll");
    static B_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "B_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "B_BFu7ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu16ll(Test_B_BFu7ll_BFu16ll, "B_BFu7ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu16s  {
  bool v1;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 B_BFu7ll_BFu16s) C1{ Fc FL:7 Fs:16}



static void Test_B_BFu7ll_BFu16s()
{
  {
    init_simple_test("B_BFu7ll_BFu16s");
    static B_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu7ll_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu16s(Test_B_BFu7ll_BFu16s, "B_BFu7ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu17i  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 B_BFu7ll_BFu17i) C1{ Fc FL:7 Fi:17}



static void Test_B_BFu7ll_BFu17i()
{
  {
    init_simple_test("B_BFu7ll_BFu17i");
    static B_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "B_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "B_BFu7ll_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu17i(Test_B_BFu7ll_BFu17i, "B_BFu7ll_BFu17i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu17ll  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 B_BFu7ll_BFu17ll) C1{ Fc FL:7 FL:17}



static void Test_B_BFu7ll_BFu17ll()
{
  {
    init_simple_test("B_BFu7ll_BFu17ll");
    static B_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "B_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "B_BFu7ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu17ll(Test_B_BFu7ll_BFu17ll, "B_BFu7ll_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu1c  {
  bool v1;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 B_BFu7ll_BFu1c) C1{ Fc FL:7 Fc:1}



static void Test_B_BFu7ll_BFu1c()
{
  {
    init_simple_test("B_BFu7ll_BFu1c");
    static B_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7ll_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu1c(Test_B_BFu7ll_BFu1c, "B_BFu7ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu1i  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 B_BFu7ll_BFu1i) C1{ Fc FL:7 Fi:1}



static void Test_B_BFu7ll_BFu1i()
{
  {
    init_simple_test("B_BFu7ll_BFu1i");
    static B_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7ll_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu1i(Test_B_BFu7ll_BFu1i, "B_BFu7ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu1ll  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 B_BFu7ll_BFu1ll) C1{ Fc FL:7 FL:1}



static void Test_B_BFu7ll_BFu1ll()
{
  {
    init_simple_test("B_BFu7ll_BFu1ll");
    static B_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu1ll(Test_B_BFu7ll_BFu1ll, "B_BFu7ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu1s  {
  bool v1;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 B_BFu7ll_BFu1s) C1{ Fc FL:7 Fs:1}



static void Test_B_BFu7ll_BFu1s()
{
  {
    init_simple_test("B_BFu7ll_BFu1s");
    static B_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7ll_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu1s(Test_B_BFu7ll_BFu1s, "B_BFu7ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu31i  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 B_BFu7ll_BFu31i) C1{ Fc FL:7 Fi:31}



static void Test_B_BFu7ll_BFu31i()
{
  {
    init_simple_test("B_BFu7ll_BFu31i");
    static B_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu7ll_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu31i(Test_B_BFu7ll_BFu31i, "B_BFu7ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu31ll  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 B_BFu7ll_BFu31ll) C1{ Fc FL:7 FL:31}



static void Test_B_BFu7ll_BFu31ll()
{
  {
    init_simple_test("B_BFu7ll_BFu31ll");
    static B_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "B_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "B_BFu7ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu31ll(Test_B_BFu7ll_BFu31ll, "B_BFu7ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu32i  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 B_BFu7ll_BFu32i) C1{ Fc FL:7 Fi:32}



static void Test_B_BFu7ll_BFu32i()
{
  {
    init_simple_test("B_BFu7ll_BFu32i");
    static B_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu7ll_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu32i(Test_B_BFu7ll_BFu32i, "B_BFu7ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu32ll  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 B_BFu7ll_BFu32ll) C1{ Fc FL:7 FL:32}



static void Test_B_BFu7ll_BFu32ll()
{
  {
    init_simple_test("B_BFu7ll_BFu32ll");
    static B_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "B_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "B_BFu7ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu32ll(Test_B_BFu7ll_BFu32ll, "B_BFu7ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu33  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 B_BFu7ll_BFu33) C1{ Fc FL:7 FL:33}



static void Test_B_BFu7ll_BFu33()
{
  {
    init_simple_test("B_BFu7ll_BFu33");
    static B_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "B_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "B_BFu7ll_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu33(Test_B_BFu7ll_BFu33, "B_BFu7ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu7c  {
  bool v1;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 B_BFu7ll_BFu7c) C1{ Fc FL:7 Fc:7}



static void Test_B_BFu7ll_BFu7c()
{
  {
    init_simple_test("B_BFu7ll_BFu7c");
    static B_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu7c(Test_B_BFu7ll_BFu7c, "B_BFu7ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu7i  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 B_BFu7ll_BFu7i) C1{ Fc FL:7 Fi:7}



static void Test_B_BFu7ll_BFu7i()
{
  {
    init_simple_test("B_BFu7ll_BFu7i");
    static B_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "B_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu7i(Test_B_BFu7ll_BFu7i, "B_BFu7ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu7ll  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 B_BFu7ll_BFu7ll) C1{ Fc FL:7 FL:7}



static void Test_B_BFu7ll_BFu7ll()
{
  {
    init_simple_test("B_BFu7ll_BFu7ll");
    static B_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "B_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu7ll(Test_B_BFu7ll_BFu7ll, "B_BFu7ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu7s  {
  bool v1;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 B_BFu7ll_BFu7s) C1{ Fc FL:7 Fs:7}



static void Test_B_BFu7ll_BFu7s()
{
  {
    init_simple_test("B_BFu7ll_BFu7s");
    static B_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu7s(Test_B_BFu7ll_BFu7s, "B_BFu7ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu8c  {
  bool v1;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 B_BFu7ll_BFu8c) C1{ Fc FL:7 Fc:8}



static void Test_B_BFu7ll_BFu8c()
{
  {
    init_simple_test("B_BFu7ll_BFu8c");
    static B_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu7ll_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu8c(Test_B_BFu7ll_BFu8c, "B_BFu7ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu8i  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 B_BFu7ll_BFu8i) C1{ Fc FL:7 Fi:8}



static void Test_B_BFu7ll_BFu8i()
{
  {
    init_simple_test("B_BFu7ll_BFu8i");
    static B_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "B_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "B_BFu7ll_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu8i(Test_B_BFu7ll_BFu8i, "B_BFu7ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu8ll  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 B_BFu7ll_BFu8ll) C1{ Fc FL:7 FL:8}



static void Test_B_BFu7ll_BFu8ll()
{
  {
    init_simple_test("B_BFu7ll_BFu8ll");
    static B_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "B_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "B_BFu7ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu8ll(Test_B_BFu7ll_BFu8ll, "B_BFu7ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu8s  {
  bool v1;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 B_BFu7ll_BFu8s) C1{ Fc FL:7 Fs:8}



static void Test_B_BFu7ll_BFu8s()
{
  {
    init_simple_test("B_BFu7ll_BFu8s");
    static B_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu7ll_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu8s(Test_B_BFu7ll_BFu8s, "B_BFu7ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu9i  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 B_BFu7ll_BFu9i) C1{ Fc FL:7 Fi:9}



static void Test_B_BFu7ll_BFu9i()
{
  {
    init_simple_test("B_BFu7ll_BFu9i");
    static B_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "B_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "B_BFu7ll_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu9i(Test_B_BFu7ll_BFu9i, "B_BFu7ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu9ll  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 B_BFu7ll_BFu9ll) C1{ Fc FL:7 FL:9}



static void Test_B_BFu7ll_BFu9ll()
{
  {
    init_simple_test("B_BFu7ll_BFu9ll");
    static B_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "B_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "B_BFu7ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu9ll(Test_B_BFu7ll_BFu9ll, "B_BFu7ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_BFu9s  {
  bool v1;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 B_BFu7ll_BFu9s) C1{ Fc FL:7 Fs:9}



static void Test_B_BFu7ll_BFu9s()
{
  {
    init_simple_test("B_BFu7ll_BFu9s");
    static B_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu7ll_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_BFu9s(Test_B_BFu7ll_BFu9s, "B_BFu7ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_C  {
  bool v1;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 B_BFu7ll_C) C1{ Fc FL:7 Fc}



static void Test_B_BFu7ll_C()
{
  {
    init_simple_test("B_BFu7ll_C");
    static B_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_C)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_C");
    check_field_offset(lv, v3, 2, "B_BFu7ll_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_C(Test_B_BFu7ll_C, "B_BFu7ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_D  {
  bool v1;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 B_BFu7ll_D) C1{ Fc FL:7 FL}



static void Test_B_BFu7ll_D()
{
  {
    init_simple_test("B_BFu7ll_D");
    static B_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_D)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7ll_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_D(Test_B_BFu7ll_D, "B_BFu7ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_F  {
  bool v1;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 B_BFu7ll_F) C1{ Fc FL:7 Fi}



static void Test_B_BFu7ll_F()
{
  {
    init_simple_test("B_BFu7ll_F");
    static B_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_F)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_F");
    check_field_offset(lv, v3, 4, "B_BFu7ll_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_F(Test_B_BFu7ll_F, "B_BFu7ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_I  {
  bool v1;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 B_BFu7ll_I) C1{ Fc FL:7 Fi}



static void Test_B_BFu7ll_I()
{
  {
    init_simple_test("B_BFu7ll_I");
    static B_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_I)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_I");
    check_field_offset(lv, v3, 4, "B_BFu7ll_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_I(Test_B_BFu7ll_I, "B_BFu7ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_Ip  {
  bool v1;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 B_BFu7ll_Ip) C1{ Fc FL:7 Fp}



static void Test_B_BFu7ll_Ip()
{
  {
    init_simple_test("B_BFu7ll_Ip");
    static B_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_Ip(Test_B_BFu7ll_Ip, "B_BFu7ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_L  {
  bool v1;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 B_BFu7ll_L) C1{ Fc FL:7 FL}



static void Test_B_BFu7ll_L()
{
  {
    init_simple_test("B_BFu7ll_L");
    static B_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_L)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7ll_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_L(Test_B_BFu7ll_L, "B_BFu7ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_S  {
  bool v1;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 B_BFu7ll_S) C1{ Fc FL:7 Fs}



static void Test_B_BFu7ll_S()
{
  {
    init_simple_test("B_BFu7ll_S");
    static B_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_S)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_S");
    check_field_offset(lv, v3, 2, "B_BFu7ll_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_S(Test_B_BFu7ll_S, "B_BFu7ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_Uc  {
  bool v1;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 B_BFu7ll_Uc) C1{ Fc FL:7 Fc}



static void Test_B_BFu7ll_Uc()
{
  {
    init_simple_test("B_BFu7ll_Uc");
    static B_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_Uc");
    check_field_offset(lv, v3, 2, "B_BFu7ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_Uc(Test_B_BFu7ll_Uc, "B_BFu7ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_Ui  {
  bool v1;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 B_BFu7ll_Ui) C1{ Fc FL:7 Fi}



static void Test_B_BFu7ll_Ui()
{
  {
    init_simple_test("B_BFu7ll_Ui");
    static B_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "B_BFu7ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_Ui(Test_B_BFu7ll_Ui, "B_BFu7ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_Ul  {
  bool v1;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 B_BFu7ll_Ul) C1{ Fc FL:7 FL}



static void Test_B_BFu7ll_Ul()
{
  {
    init_simple_test("B_BFu7ll_Ul");
    static B_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_Ul(Test_B_BFu7ll_Ul, "B_BFu7ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_Us  {
  bool v1;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 B_BFu7ll_Us) C1{ Fc FL:7 Fs}



static void Test_B_BFu7ll_Us()
{
  {
    init_simple_test("B_BFu7ll_Us");
    static B_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_Us)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_Us");
    check_field_offset(lv, v3, 2, "B_BFu7ll_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_Us(Test_B_BFu7ll_Us, "B_BFu7ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7ll_Vp  {
  bool v1;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 B_BFu7ll_Vp) C1{ Fc FL:7 Fp}



static void Test_B_BFu7ll_Vp()
{
  {
    init_simple_test("B_BFu7ll_Vp");
    static B_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7ll_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu7ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7ll_Vp(Test_B_BFu7ll_Vp, "B_BFu7ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s  {
  bool v1;
  unsigned short v2:7;
};
//SIG(1 B_BFu7s) C1{ Fc Fs:7}



static void Test_B_BFu7s()
{
  {
    init_simple_test("B_BFu7s");
    static B_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu7s(Test_B_BFu7s, "B_BFu7s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_B  {
  bool v1;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 B_BFu7s_B) C1{ Fc Fs:7 Fc}



static void Test_B_BFu7s_B()
{
  {
    init_simple_test("B_BFu7s_B");
    static B_BFu7s_B lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_B)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_B)");
    check_field_offset(lv, v1, 0, "B_BFu7s_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_B");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_B");
    check_field_offset(lv, v3, 2, "B_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_B(Test_B_BFu7s_B, "B_BFu7s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu15i  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 B_BFu7s_BFu15i) C1{ Fc Fs:7 Fi:15}



static void Test_B_BFu7s_BFu15i()
{
  {
    init_simple_test("B_BFu7s_BFu15i");
    static B_BFu7s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "B_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "B_BFu7s_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu15i(Test_B_BFu7s_BFu15i, "B_BFu7s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu15ll  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 B_BFu7s_BFu15ll) C1{ Fc Fs:7 FL:15}



static void Test_B_BFu7s_BFu15ll()
{
  {
    init_simple_test("B_BFu7s_BFu15ll");
    static B_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "B_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "B_BFu7s_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu15ll(Test_B_BFu7s_BFu15ll, "B_BFu7s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu15s  {
  bool v1;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 B_BFu7s_BFu15s) C1{ Fc Fs:7 Fs:15}



static void Test_B_BFu7s_BFu15s()
{
  {
    init_simple_test("B_BFu7s_BFu15s");
    static B_BFu7s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu7s_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu15s(Test_B_BFu7s_BFu15s, "B_BFu7s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu16i  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 B_BFu7s_BFu16i) C1{ Fc Fs:7 Fi:16}



static void Test_B_BFu7s_BFu16i()
{
  {
    init_simple_test("B_BFu7s_BFu16i");
    static B_BFu7s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "B_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "B_BFu7s_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu16i(Test_B_BFu7s_BFu16i, "B_BFu7s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu16ll  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 B_BFu7s_BFu16ll) C1{ Fc Fs:7 FL:16}



static void Test_B_BFu7s_BFu16ll()
{
  {
    init_simple_test("B_BFu7s_BFu16ll");
    static B_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "B_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "B_BFu7s_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu16ll(Test_B_BFu7s_BFu16ll, "B_BFu7s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu16s  {
  bool v1;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 B_BFu7s_BFu16s) C1{ Fc Fs:7 Fs:16}



static void Test_B_BFu7s_BFu16s()
{
  {
    init_simple_test("B_BFu7s_BFu16s");
    static B_BFu7s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu7s_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu16s(Test_B_BFu7s_BFu16s, "B_BFu7s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu17i  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 B_BFu7s_BFu17i) C1{ Fc Fs:7 Fi:17}



static void Test_B_BFu7s_BFu17i()
{
  {
    init_simple_test("B_BFu7s_BFu17i");
    static B_BFu7s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "B_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "B_BFu7s_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu17i(Test_B_BFu7s_BFu17i, "B_BFu7s_BFu17i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu17ll  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 B_BFu7s_BFu17ll) C1{ Fc Fs:7 FL:17}



static void Test_B_BFu7s_BFu17ll()
{
  {
    init_simple_test("B_BFu7s_BFu17ll");
    static B_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "B_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "B_BFu7s_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu17ll(Test_B_BFu7s_BFu17ll, "B_BFu7s_BFu17ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu1c  {
  bool v1;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 B_BFu7s_BFu1c) C1{ Fc Fs:7 Fc:1}



static void Test_B_BFu7s_BFu1c()
{
  {
    init_simple_test("B_BFu7s_BFu1c");
    static B_BFu7s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu7s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7s_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu1c(Test_B_BFu7s_BFu1c, "B_BFu7s_BFu1c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu1i  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 B_BFu7s_BFu1i) C1{ Fc Fs:7 Fi:1}



static void Test_B_BFu7s_BFu1i()
{
  {
    init_simple_test("B_BFu7s_BFu1i");
    static B_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7s_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu1i(Test_B_BFu7s_BFu1i, "B_BFu7s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu1ll  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 B_BFu7s_BFu1ll) C1{ Fc Fs:7 FL:1}



static void Test_B_BFu7s_BFu1ll()
{
  {
    init_simple_test("B_BFu7s_BFu1ll");
    static B_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7s_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu1ll(Test_B_BFu7s_BFu1ll, "B_BFu7s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu1s  {
  bool v1;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 B_BFu7s_BFu1s) C1{ Fc Fs:7 Fs:1}



static void Test_B_BFu7s_BFu1s()
{
  {
    init_simple_test("B_BFu7s_BFu1s");
    static B_BFu7s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu7s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "B_BFu7s_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu1s(Test_B_BFu7s_BFu1s, "B_BFu7s_BFu1s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu31i  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 B_BFu7s_BFu31i) C1{ Fc Fs:7 Fi:31}



static void Test_B_BFu7s_BFu31i()
{
  {
    init_simple_test("B_BFu7s_BFu31i");
    static B_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu7s_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu31i(Test_B_BFu7s_BFu31i, "B_BFu7s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu31ll  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 B_BFu7s_BFu31ll) C1{ Fc Fs:7 FL:31}



static void Test_B_BFu7s_BFu31ll()
{
  {
    init_simple_test("B_BFu7s_BFu31ll");
    static B_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "B_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "B_BFu7s_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu31ll(Test_B_BFu7s_BFu31ll, "B_BFu7s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu32i  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 B_BFu7s_BFu32i) C1{ Fc Fs:7 Fi:32}



static void Test_B_BFu7s_BFu32i()
{
  {
    init_simple_test("B_BFu7s_BFu32i");
    static B_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu7s_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu32i(Test_B_BFu7s_BFu32i, "B_BFu7s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu32ll  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 B_BFu7s_BFu32ll) C1{ Fc Fs:7 FL:32}



static void Test_B_BFu7s_BFu32ll()
{
  {
    init_simple_test("B_BFu7s_BFu32ll");
    static B_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "B_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "B_BFu7s_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu32ll(Test_B_BFu7s_BFu32ll, "B_BFu7s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu33  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 B_BFu7s_BFu33) C1{ Fc Fs:7 FL:33}



static void Test_B_BFu7s_BFu33()
{
  {
    init_simple_test("B_BFu7s_BFu33");
    static B_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "B_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "B_BFu7s_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu33(Test_B_BFu7s_BFu33, "B_BFu7s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu7c  {
  bool v1;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 B_BFu7s_BFu7c) C1{ Fc Fs:7 Fc:7}



static void Test_B_BFu7s_BFu7c()
{
  {
    init_simple_test("B_BFu7s_BFu7c");
    static B_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu7c(Test_B_BFu7s_BFu7c, "B_BFu7s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu7i  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 B_BFu7s_BFu7i) C1{ Fc Fs:7 Fi:7}



static void Test_B_BFu7s_BFu7i()
{
  {
    init_simple_test("B_BFu7s_BFu7i");
    static B_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "B_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "B_BFu7s_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu7i(Test_B_BFu7s_BFu7i, "B_BFu7s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu7ll  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 B_BFu7s_BFu7ll) C1{ Fc Fs:7 FL:7}



static void Test_B_BFu7s_BFu7ll()
{
  {
    init_simple_test("B_BFu7s_BFu7ll");
    static B_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "B_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "B_BFu7s_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu7ll(Test_B_BFu7s_BFu7ll, "B_BFu7s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu7s  {
  bool v1;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 B_BFu7s_BFu7s) C1{ Fc Fs:7 Fs:7}



static void Test_B_BFu7s_BFu7s()
{
  {
    init_simple_test("B_BFu7s_BFu7s");
    static B_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu7s(Test_B_BFu7s_BFu7s, "B_BFu7s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu8c  {
  bool v1;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 B_BFu7s_BFu8c) C1{ Fc Fs:7 Fc:8}



static void Test_B_BFu7s_BFu8c()
{
  {
    init_simple_test("B_BFu7s_BFu8c");
    static B_BFu7s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu7s_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu8c(Test_B_BFu7s_BFu8c, "B_BFu7s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu8i  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 B_BFu7s_BFu8i) C1{ Fc Fs:7 Fi:8}



static void Test_B_BFu7s_BFu8i()
{
  {
    init_simple_test("B_BFu7s_BFu8i");
    static B_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "B_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "B_BFu7s_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu8i(Test_B_BFu7s_BFu8i, "B_BFu7s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu8ll  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 B_BFu7s_BFu8ll) C1{ Fc Fs:7 FL:8}



static void Test_B_BFu7s_BFu8ll()
{
  {
    init_simple_test("B_BFu7s_BFu8ll");
    static B_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "B_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "B_BFu7s_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu8ll(Test_B_BFu7s_BFu8ll, "B_BFu7s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu8s  {
  bool v1;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 B_BFu7s_BFu8s) C1{ Fc Fs:7 Fs:8}



static void Test_B_BFu7s_BFu8s()
{
  {
    init_simple_test("B_BFu7s_BFu8s");
    static B_BFu7s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu7s_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu8s(Test_B_BFu7s_BFu8s, "B_BFu7s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu9i  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 B_BFu7s_BFu9i) C1{ Fc Fs:7 Fi:9}



static void Test_B_BFu7s_BFu9i()
{
  {
    init_simple_test("B_BFu7s_BFu9i");
    static B_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "B_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "B_BFu7s_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu9i(Test_B_BFu7s_BFu9i, "B_BFu7s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu9ll  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 B_BFu7s_BFu9ll) C1{ Fc Fs:7 FL:9}



static void Test_B_BFu7s_BFu9ll()
{
  {
    init_simple_test("B_BFu7s_BFu9ll");
    static B_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "B_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "B_BFu7s_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu9ll(Test_B_BFu7s_BFu9ll, "B_BFu7s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_BFu9s  {
  bool v1;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 B_BFu7s_BFu9s) C1{ Fc Fs:7 Fs:9}



static void Test_B_BFu7s_BFu9s()
{
  {
    init_simple_test("B_BFu7s_BFu9s");
    static B_BFu7s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu7s_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu7s_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu7s_BFu9s(Test_B_BFu7s_BFu9s, "B_BFu7s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_C  {
  bool v1;
  unsigned short v2:7;
  char v3;
};
//SIG(1 B_BFu7s_C) C1{ Fc Fs:7 Fc}



static void Test_B_BFu7s_C()
{
  {
    init_simple_test("B_BFu7s_C");
    static B_BFu7s_C lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_C)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_C)");
    check_field_offset(lv, v1, 0, "B_BFu7s_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_C");
    check_field_offset(lv, v3, 2, "B_BFu7s_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_C(Test_B_BFu7s_C, "B_BFu7s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_D  {
  bool v1;
  unsigned short v2:7;
  double v3;
};
//SIG(1 B_BFu7s_D) C1{ Fc Fs:7 FL}



static void Test_B_BFu7s_D()
{
  {
    init_simple_test("B_BFu7s_D");
    static B_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_D)");
    check_field_offset(lv, v1, 0, "B_BFu7s_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7s_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_D(Test_B_BFu7s_D, "B_BFu7s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_F  {
  bool v1;
  unsigned short v2:7;
  float v3;
};
//SIG(1 B_BFu7s_F) C1{ Fc Fs:7 Fi}



static void Test_B_BFu7s_F()
{
  {
    init_simple_test("B_BFu7s_F");
    static B_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_F)");
    check_field_offset(lv, v1, 0, "B_BFu7s_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_F");
    check_field_offset(lv, v3, 4, "B_BFu7s_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_F(Test_B_BFu7s_F, "B_BFu7s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_I  {
  bool v1;
  unsigned short v2:7;
  int v3;
};
//SIG(1 B_BFu7s_I) C1{ Fc Fs:7 Fi}



static void Test_B_BFu7s_I()
{
  {
    init_simple_test("B_BFu7s_I");
    static B_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_I)");
    check_field_offset(lv, v1, 0, "B_BFu7s_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_I");
    check_field_offset(lv, v3, 4, "B_BFu7s_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_I(Test_B_BFu7s_I, "B_BFu7s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_Ip  {
  bool v1;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 B_BFu7s_Ip) C1{ Fc Fs:7 Fp}



static void Test_B_BFu7s_Ip()
{
  {
    init_simple_test("B_BFu7s_Ip");
    static B_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu7s_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7s_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_Ip(Test_B_BFu7s_Ip, "B_BFu7s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_L  {
  bool v1;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 B_BFu7s_L) C1{ Fc Fs:7 FL}



static void Test_B_BFu7s_L()
{
  {
    init_simple_test("B_BFu7s_L");
    static B_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_L)");
    check_field_offset(lv, v1, 0, "B_BFu7s_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7s_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_L(Test_B_BFu7s_L, "B_BFu7s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_S  {
  bool v1;
  unsigned short v2:7;
  short v3;
};
//SIG(1 B_BFu7s_S) C1{ Fc Fs:7 Fs}



static void Test_B_BFu7s_S()
{
  {
    init_simple_test("B_BFu7s_S");
    static B_BFu7s_S lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_S)");
    check_field_offset(lv, v1, 0, "B_BFu7s_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_S");
    check_field_offset(lv, v3, 2, "B_BFu7s_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_S(Test_B_BFu7s_S, "B_BFu7s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_Uc  {
  bool v1;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 B_BFu7s_Uc) C1{ Fc Fs:7 Fc}



static void Test_B_BFu7s_Uc()
{
  {
    init_simple_test("B_BFu7s_Uc");
    static B_BFu7s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu7s_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_Uc");
    check_field_offset(lv, v3, 2, "B_BFu7s_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_Uc(Test_B_BFu7s_Uc, "B_BFu7s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_Ui  {
  bool v1;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 B_BFu7s_Ui) C1{ Fc Fs:7 Fi}



static void Test_B_BFu7s_Ui()
{
  {
    init_simple_test("B_BFu7s_Ui");
    static B_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu7s_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu7s_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "B_BFu7s_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_Ui(Test_B_BFu7s_Ui, "B_BFu7s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_Ul  {
  bool v1;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 B_BFu7s_Ul) C1{ Fc Fs:7 FL}



static void Test_B_BFu7s_Ul()
{
  {
    init_simple_test("B_BFu7s_Ul");
    static B_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu7s_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7s_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_Ul(Test_B_BFu7s_Ul, "B_BFu7s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_Us  {
  bool v1;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 B_BFu7s_Us) C1{ Fc Fs:7 Fs}



static void Test_B_BFu7s_Us()
{
  {
    init_simple_test("B_BFu7s_Us");
    static B_BFu7s_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu7s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu7s_Us)");
    check_field_offset(lv, v1, 0, "B_BFu7s_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_Us");
    check_field_offset(lv, v3, 2, "B_BFu7s_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_Us(Test_B_BFu7s_Us, "B_BFu7s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu7s_Vp  {
  bool v1;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 B_BFu7s_Vp) C1{ Fc Fs:7 Fp}



static void Test_B_BFu7s_Vp()
{
  {
    init_simple_test("B_BFu7s_Vp");
    static B_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu7s_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu7s_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "B_BFu7s_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "B_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu7s_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu7s_Vp(Test_B_BFu7s_Vp, "B_BFu7s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c  {
  bool v1;
  unsigned char v2:8;
};
//SIG(1 B_BFu8c) C1{ Fc Fc:8}



static void Test_B_BFu8c()
{
  {
    init_simple_test("B_BFu8c");
    static B_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu8c(Test_B_BFu8c, "B_BFu8c", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_B  {
  bool v1;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 B_BFu8c_B) C1{ Fc Fc:8 Fc}



static void Test_B_BFu8c_B()
{
  {
    init_simple_test("B_BFu8c_B");
    static B_BFu8c_B lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu8c_B)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu8c_B)");
    check_field_offset(lv, v1, 0, "B_BFu8c_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_B");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_B");
    check_field_offset(lv, v3, 2, "B_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_B(Test_B_BFu8c_B, "B_BFu8c_B", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu15i  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 B_BFu8c_BFu15i) C1{ Fc Fc:8 Fi:15}



static void Test_B_BFu8c_BFu15i()
{
  {
    init_simple_test("B_BFu8c_BFu15i");
    static B_BFu8c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8c_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu15i(Test_B_BFu8c_BFu15i, "B_BFu8c_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu15ll  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 B_BFu8c_BFu15ll) C1{ Fc Fc:8 FL:15}



static void Test_B_BFu8c_BFu15ll()
{
  {
    init_simple_test("B_BFu8c_BFu15ll");
    static B_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8c_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu15ll(Test_B_BFu8c_BFu15ll, "B_BFu8c_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu15s  {
  bool v1;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 B_BFu8c_BFu15s) C1{ Fc Fc:8 Fs:15}



static void Test_B_BFu8c_BFu15s()
{
  {
    init_simple_test("B_BFu8c_BFu15s");
    static B_BFu8c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8c_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8c_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu15s(Test_B_BFu8c_BFu15s, "B_BFu8c_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu16i  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 B_BFu8c_BFu16i) C1{ Fc Fc:8 Fi:16}



static void Test_B_BFu8c_BFu16i()
{
  {
    init_simple_test("B_BFu8c_BFu16i");
    static B_BFu8c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8c_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu16i(Test_B_BFu8c_BFu16i, "B_BFu8c_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu16ll  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 B_BFu8c_BFu16ll) C1{ Fc Fc:8 FL:16}



static void Test_B_BFu8c_BFu16ll()
{
  {
    init_simple_test("B_BFu8c_BFu16ll");
    static B_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8c_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu16ll(Test_B_BFu8c_BFu16ll, "B_BFu8c_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu16s  {
  bool v1;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 B_BFu8c_BFu16s) C1{ Fc Fc:8 Fs:16}



static void Test_B_BFu8c_BFu16s()
{
  {
    init_simple_test("B_BFu8c_BFu16s");
    static B_BFu8c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8c_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8c_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu16s(Test_B_BFu8c_BFu16s, "B_BFu8c_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu17i  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 B_BFu8c_BFu17i) C1{ Fc Fc:8 Fi:17}



static void Test_B_BFu8c_BFu17i()
{
  {
    init_simple_test("B_BFu8c_BFu17i");
    static B_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu8c_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu17i(Test_B_BFu8c_BFu17i, "B_BFu8c_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu17ll  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 B_BFu8c_BFu17ll) C1{ Fc Fc:8 FL:17}



static void Test_B_BFu8c_BFu17ll()
{
  {
    init_simple_test("B_BFu8c_BFu17ll");
    static B_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "B_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "B_BFu8c_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu17ll(Test_B_BFu8c_BFu17ll, "B_BFu8c_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu1c  {
  bool v1;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 B_BFu8c_BFu1c) C1{ Fc Fc:8 Fc:1}



static void Test_B_BFu8c_BFu1c()
{
  {
    init_simple_test("B_BFu8c_BFu1c");
    static B_BFu8c_BFu1c lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu8c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu8c_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8c_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu1c(Test_B_BFu8c_BFu1c, "B_BFu8c_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu1i  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 B_BFu8c_BFu1i) C1{ Fc Fc:8 Fi:1}



static void Test_B_BFu8c_BFu1i()
{
  {
    init_simple_test("B_BFu8c_BFu1i");
    static B_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8c_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu1i(Test_B_BFu8c_BFu1i, "B_BFu8c_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu1ll  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 B_BFu8c_BFu1ll) C1{ Fc Fc:8 FL:1}



static void Test_B_BFu8c_BFu1ll()
{
  {
    init_simple_test("B_BFu8c_BFu1ll");
    static B_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8c_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu1ll(Test_B_BFu8c_BFu1ll, "B_BFu8c_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu1s  {
  bool v1;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 B_BFu8c_BFu1s) C1{ Fc Fc:8 Fs:1}



static void Test_B_BFu8c_BFu1s()
{
  {
    init_simple_test("B_BFu8c_BFu1s");
    static B_BFu8c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8c_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8c_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu1s(Test_B_BFu8c_BFu1s, "B_BFu8c_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu31i  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 B_BFu8c_BFu31i) C1{ Fc Fc:8 Fi:31}



static void Test_B_BFu8c_BFu31i()
{
  {
    init_simple_test("B_BFu8c_BFu31i");
    static B_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu8c_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu31i(Test_B_BFu8c_BFu31i, "B_BFu8c_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu31ll  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 B_BFu8c_BFu31ll) C1{ Fc Fc:8 FL:31}



static void Test_B_BFu8c_BFu31ll()
{
  {
    init_simple_test("B_BFu8c_BFu31ll");
    static B_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "B_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "B_BFu8c_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu31ll(Test_B_BFu8c_BFu31ll, "B_BFu8c_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu32i  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 B_BFu8c_BFu32i) C1{ Fc Fc:8 Fi:32}



static void Test_B_BFu8c_BFu32i()
{
  {
    init_simple_test("B_BFu8c_BFu32i");
    static B_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu8c_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu32i(Test_B_BFu8c_BFu32i, "B_BFu8c_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu32ll  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 B_BFu8c_BFu32ll) C1{ Fc Fc:8 FL:32}



static void Test_B_BFu8c_BFu32ll()
{
  {
    init_simple_test("B_BFu8c_BFu32ll");
    static B_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "B_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "B_BFu8c_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu32ll(Test_B_BFu8c_BFu32ll, "B_BFu8c_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu33  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 B_BFu8c_BFu33) C1{ Fc Fc:8 FL:33}



static void Test_B_BFu8c_BFu33()
{
  {
    init_simple_test("B_BFu8c_BFu33");
    static B_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "B_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "B_BFu8c_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu33(Test_B_BFu8c_BFu33, "B_BFu8c_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu7c  {
  bool v1;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 B_BFu8c_BFu7c) C1{ Fc Fc:8 Fc:7}



static void Test_B_BFu8c_BFu7c()
{
  {
    init_simple_test("B_BFu8c_BFu7c");
    static B_BFu8c_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu8c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu8c_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8c_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu7c(Test_B_BFu8c_BFu7c, "B_BFu8c_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu7i  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 B_BFu8c_BFu7i) C1{ Fc Fc:8 Fi:7}



static void Test_B_BFu8c_BFu7i()
{
  {
    init_simple_test("B_BFu8c_BFu7i");
    static B_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8c_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu7i(Test_B_BFu8c_BFu7i, "B_BFu8c_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu7ll  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 B_BFu8c_BFu7ll) C1{ Fc Fc:8 FL:7}



static void Test_B_BFu8c_BFu7ll()
{
  {
    init_simple_test("B_BFu8c_BFu7ll");
    static B_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8c_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu7ll(Test_B_BFu8c_BFu7ll, "B_BFu8c_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu7s  {
  bool v1;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 B_BFu8c_BFu7s) C1{ Fc Fc:8 Fs:7}



static void Test_B_BFu8c_BFu7s()
{
  {
    init_simple_test("B_BFu8c_BFu7s");
    static B_BFu8c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8c_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8c_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu7s(Test_B_BFu8c_BFu7s, "B_BFu8c_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu8c  {
  bool v1;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 B_BFu8c_BFu8c) C1{ Fc Fc:8 Fc:8}



static void Test_B_BFu8c_BFu8c()
{
  {
    init_simple_test("B_BFu8c_BFu8c");
    static B_BFu8c_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu8c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu8c_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu8c(Test_B_BFu8c_BFu8c, "B_BFu8c_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu8i  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 B_BFu8c_BFu8i) C1{ Fc Fc:8 Fi:8}



static void Test_B_BFu8c_BFu8i()
{
  {
    init_simple_test("B_BFu8c_BFu8i");
    static B_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu8i(Test_B_BFu8c_BFu8i, "B_BFu8c_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu8ll  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 B_BFu8c_BFu8ll) C1{ Fc Fc:8 FL:8}



static void Test_B_BFu8c_BFu8ll()
{
  {
    init_simple_test("B_BFu8c_BFu8ll");
    static B_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu8ll(Test_B_BFu8c_BFu8ll, "B_BFu8c_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu8s  {
  bool v1;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 B_BFu8c_BFu8s) C1{ Fc Fc:8 Fs:8}



static void Test_B_BFu8c_BFu8s()
{
  {
    init_simple_test("B_BFu8c_BFu8s");
    static B_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8c_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu8s(Test_B_BFu8c_BFu8s, "B_BFu8c_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu9i  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 B_BFu8c_BFu9i) C1{ Fc Fc:8 Fi:9}



static void Test_B_BFu8c_BFu9i()
{
  {
    init_simple_test("B_BFu8c_BFu9i");
    static B_BFu8c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8c_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu9i(Test_B_BFu8c_BFu9i, "B_BFu8c_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu9ll  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 B_BFu8c_BFu9ll) C1{ Fc Fc:8 FL:9}



static void Test_B_BFu8c_BFu9ll()
{
  {
    init_simple_test("B_BFu8c_BFu9ll");
    static B_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8c_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu9ll(Test_B_BFu8c_BFu9ll, "B_BFu8c_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_BFu9s  {
  bool v1;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 B_BFu8c_BFu9s) C1{ Fc Fc:8 Fs:9}



static void Test_B_BFu8c_BFu9s()
{
  {
    init_simple_test("B_BFu8c_BFu9s");
    static B_BFu8c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8c_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu8c_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8c_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu8c_BFu9s(Test_B_BFu8c_BFu9s, "B_BFu8c_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_C  {
  bool v1;
  unsigned char v2:8;
  char v3;
};
//SIG(1 B_BFu8c_C) C1{ Fc Fc:8 Fc}



static void Test_B_BFu8c_C()
{
  {
    init_simple_test("B_BFu8c_C");
    static B_BFu8c_C lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu8c_C)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu8c_C)");
    check_field_offset(lv, v1, 0, "B_BFu8c_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_C");
    check_field_offset(lv, v3, 2, "B_BFu8c_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_C(Test_B_BFu8c_C, "B_BFu8c_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_D  {
  bool v1;
  unsigned char v2:8;
  double v3;
};
//SIG(1 B_BFu8c_D) C1{ Fc Fc:8 FL}



static void Test_B_BFu8c_D()
{
  {
    init_simple_test("B_BFu8c_D");
    static B_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_D)");
    check_field_offset(lv, v1, 0, "B_BFu8c_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8c_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_D(Test_B_BFu8c_D, "B_BFu8c_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_F  {
  bool v1;
  unsigned char v2:8;
  float v3;
};
//SIG(1 B_BFu8c_F) C1{ Fc Fc:8 Fi}



static void Test_B_BFu8c_F()
{
  {
    init_simple_test("B_BFu8c_F");
    static B_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_F)");
    check_field_offset(lv, v1, 0, "B_BFu8c_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_F");
    check_field_offset(lv, v3, 4, "B_BFu8c_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_F(Test_B_BFu8c_F, "B_BFu8c_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_I  {
  bool v1;
  unsigned char v2:8;
  int v3;
};
//SIG(1 B_BFu8c_I) C1{ Fc Fc:8 Fi}



static void Test_B_BFu8c_I()
{
  {
    init_simple_test("B_BFu8c_I");
    static B_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_I)");
    check_field_offset(lv, v1, 0, "B_BFu8c_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_I");
    check_field_offset(lv, v3, 4, "B_BFu8c_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_I(Test_B_BFu8c_I, "B_BFu8c_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_Ip  {
  bool v1;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 B_BFu8c_Ip) C1{ Fc Fc:8 Fp}



static void Test_B_BFu8c_Ip()
{
  {
    init_simple_test("B_BFu8c_Ip");
    static B_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu8c_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8c_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_Ip(Test_B_BFu8c_Ip, "B_BFu8c_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_L  {
  bool v1;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 B_BFu8c_L) C1{ Fc Fc:8 FL}



static void Test_B_BFu8c_L()
{
  {
    init_simple_test("B_BFu8c_L");
    static B_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_L)");
    check_field_offset(lv, v1, 0, "B_BFu8c_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8c_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_L(Test_B_BFu8c_L, "B_BFu8c_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_S  {
  bool v1;
  unsigned char v2:8;
  short v3;
};
//SIG(1 B_BFu8c_S) C1{ Fc Fc:8 Fs}



static void Test_B_BFu8c_S()
{
  {
    init_simple_test("B_BFu8c_S");
    static B_BFu8c_S lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8c_S)");
    check_field_offset(lv, v1, 0, "B_BFu8c_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_S");
    check_field_offset(lv, v3, 2, "B_BFu8c_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_S(Test_B_BFu8c_S, "B_BFu8c_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_Uc  {
  bool v1;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 B_BFu8c_Uc) C1{ Fc Fc:8 Fc}



static void Test_B_BFu8c_Uc()
{
  {
    init_simple_test("B_BFu8c_Uc");
    static B_BFu8c_Uc lv;
    check2(sizeof(lv), 3, "sizeof(B_BFu8c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(B_BFu8c_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu8c_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_Uc");
    check_field_offset(lv, v3, 2, "B_BFu8c_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_Uc(Test_B_BFu8c_Uc, "B_BFu8c_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_Ui  {
  bool v1;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 B_BFu8c_Ui) C1{ Fc Fc:8 Fi}



static void Test_B_BFu8c_Ui()
{
  {
    init_simple_test("B_BFu8c_Ui");
    static B_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8c_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu8c_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "B_BFu8c_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_Ui(Test_B_BFu8c_Ui, "B_BFu8c_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_Ul  {
  bool v1;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 B_BFu8c_Ul) C1{ Fc Fc:8 FL}



static void Test_B_BFu8c_Ul()
{
  {
    init_simple_test("B_BFu8c_Ul");
    static B_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu8c_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8c_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_Ul(Test_B_BFu8c_Ul, "B_BFu8c_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_Us  {
  bool v1;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 B_BFu8c_Us) C1{ Fc Fc:8 Fs}



static void Test_B_BFu8c_Us()
{
  {
    init_simple_test("B_BFu8c_Us");
    static B_BFu8c_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8c_Us)");
    check_field_offset(lv, v1, 0, "B_BFu8c_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_Us");
    check_field_offset(lv, v3, 2, "B_BFu8c_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_Us(Test_B_BFu8c_Us, "B_BFu8c_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8c_Vp  {
  bool v1;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 B_BFu8c_Vp) C1{ Fc Fc:8 Fp}



static void Test_B_BFu8c_Vp()
{
  {
    init_simple_test("B_BFu8c_Vp");
    static B_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8c_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu8c_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8c_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8c_Vp(Test_B_BFu8c_Vp, "B_BFu8c_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i  {
  bool v1;
  unsigned int v2:8;
};
//SIG(1 B_BFu8i) C1{ Fc Fi:8}



static void Test_B_BFu8i()
{
  {
    init_simple_test("B_BFu8i");
    static B_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu8i(Test_B_BFu8i, "B_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_B  {
  bool v1;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 B_BFu8i_B) C1{ Fc Fi:8 Fc}



static void Test_B_BFu8i_B()
{
  {
    init_simple_test("B_BFu8i_B");
    static B_BFu8i_B lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_B)");
    check_field_offset(lv, v1, 0, "B_BFu8i_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_B");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_B");
    check_field_offset(lv, v3, 2, "B_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_B(Test_B_BFu8i_B, "B_BFu8i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu15i  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 B_BFu8i_BFu15i) C1{ Fc Fi:8 Fi:15}



static void Test_B_BFu8i_BFu15i()
{
  {
    init_simple_test("B_BFu8i_BFu15i");
    static B_BFu8i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8i_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu15i(Test_B_BFu8i_BFu15i, "B_BFu8i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu15ll  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 B_BFu8i_BFu15ll) C1{ Fc Fi:8 FL:15}



static void Test_B_BFu8i_BFu15ll()
{
  {
    init_simple_test("B_BFu8i_BFu15ll");
    static B_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8i_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu15ll(Test_B_BFu8i_BFu15ll, "B_BFu8i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu15s  {
  bool v1;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 B_BFu8i_BFu15s) C1{ Fc Fi:8 Fs:15}



static void Test_B_BFu8i_BFu15s()
{
  {
    init_simple_test("B_BFu8i_BFu15s");
    static B_BFu8i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8i_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu15s(Test_B_BFu8i_BFu15s, "B_BFu8i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu16i  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 B_BFu8i_BFu16i) C1{ Fc Fi:8 Fi:16}



static void Test_B_BFu8i_BFu16i()
{
  {
    init_simple_test("B_BFu8i_BFu16i");
    static B_BFu8i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8i_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu16i(Test_B_BFu8i_BFu16i, "B_BFu8i_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu16ll  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 B_BFu8i_BFu16ll) C1{ Fc Fi:8 FL:16}



static void Test_B_BFu8i_BFu16ll()
{
  {
    init_simple_test("B_BFu8i_BFu16ll");
    static B_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8i_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu16ll(Test_B_BFu8i_BFu16ll, "B_BFu8i_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu16s  {
  bool v1;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 B_BFu8i_BFu16s) C1{ Fc Fi:8 Fs:16}



static void Test_B_BFu8i_BFu16s()
{
  {
    init_simple_test("B_BFu8i_BFu16s");
    static B_BFu8i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8i_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu16s(Test_B_BFu8i_BFu16s, "B_BFu8i_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu17i  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 B_BFu8i_BFu17i) C1{ Fc Fi:8 Fi:17}



static void Test_B_BFu8i_BFu17i()
{
  {
    init_simple_test("B_BFu8i_BFu17i");
    static B_BFu8i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu8i_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu17i(Test_B_BFu8i_BFu17i, "B_BFu8i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu17ll  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 B_BFu8i_BFu17ll) C1{ Fc Fi:8 FL:17}



static void Test_B_BFu8i_BFu17ll()
{
  {
    init_simple_test("B_BFu8i_BFu17ll");
    static B_BFu8i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "B_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "B_BFu8i_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu17ll(Test_B_BFu8i_BFu17ll, "B_BFu8i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu1c  {
  bool v1;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 B_BFu8i_BFu1c) C1{ Fc Fi:8 Fc:1}



static void Test_B_BFu8i_BFu1c()
{
  {
    init_simple_test("B_BFu8i_BFu1c");
    static B_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8i_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu1c(Test_B_BFu8i_BFu1c, "B_BFu8i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu1i  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 B_BFu8i_BFu1i) C1{ Fc Fi:8 Fi:1}



static void Test_B_BFu8i_BFu1i()
{
  {
    init_simple_test("B_BFu8i_BFu1i");
    static B_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8i_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu1i(Test_B_BFu8i_BFu1i, "B_BFu8i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu1ll  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 B_BFu8i_BFu1ll) C1{ Fc Fi:8 FL:1}



static void Test_B_BFu8i_BFu1ll()
{
  {
    init_simple_test("B_BFu8i_BFu1ll");
    static B_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8i_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu1ll(Test_B_BFu8i_BFu1ll, "B_BFu8i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu1s  {
  bool v1;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 B_BFu8i_BFu1s) C1{ Fc Fi:8 Fs:1}



static void Test_B_BFu8i_BFu1s()
{
  {
    init_simple_test("B_BFu8i_BFu1s");
    static B_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8i_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu1s(Test_B_BFu8i_BFu1s, "B_BFu8i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu31i  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 B_BFu8i_BFu31i) C1{ Fc Fi:8 Fi:31}



static void Test_B_BFu8i_BFu31i()
{
  {
    init_simple_test("B_BFu8i_BFu31i");
    static B_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu8i_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu31i(Test_B_BFu8i_BFu31i, "B_BFu8i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu31ll  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 B_BFu8i_BFu31ll) C1{ Fc Fi:8 FL:31}



static void Test_B_BFu8i_BFu31ll()
{
  {
    init_simple_test("B_BFu8i_BFu31ll");
    static B_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "B_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "B_BFu8i_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu31ll(Test_B_BFu8i_BFu31ll, "B_BFu8i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu32i  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 B_BFu8i_BFu32i) C1{ Fc Fi:8 Fi:32}



static void Test_B_BFu8i_BFu32i()
{
  {
    init_simple_test("B_BFu8i_BFu32i");
    static B_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu8i_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu32i(Test_B_BFu8i_BFu32i, "B_BFu8i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu32ll  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 B_BFu8i_BFu32ll) C1{ Fc Fi:8 FL:32}



static void Test_B_BFu8i_BFu32ll()
{
  {
    init_simple_test("B_BFu8i_BFu32ll");
    static B_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "B_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "B_BFu8i_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu32ll(Test_B_BFu8i_BFu32ll, "B_BFu8i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu33  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 B_BFu8i_BFu33) C1{ Fc Fi:8 FL:33}



static void Test_B_BFu8i_BFu33()
{
  {
    init_simple_test("B_BFu8i_BFu33");
    static B_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "B_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "B_BFu8i_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu33(Test_B_BFu8i_BFu33, "B_BFu8i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu7c  {
  bool v1;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 B_BFu8i_BFu7c) C1{ Fc Fi:8 Fc:7}



static void Test_B_BFu8i_BFu7c()
{
  {
    init_simple_test("B_BFu8i_BFu7c");
    static B_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8i_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu7c(Test_B_BFu8i_BFu7c, "B_BFu8i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu7i  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 B_BFu8i_BFu7i) C1{ Fc Fi:8 Fi:7}



static void Test_B_BFu8i_BFu7i()
{
  {
    init_simple_test("B_BFu8i_BFu7i");
    static B_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8i_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu7i(Test_B_BFu8i_BFu7i, "B_BFu8i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu7ll  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 B_BFu8i_BFu7ll) C1{ Fc Fi:8 FL:7}



static void Test_B_BFu8i_BFu7ll()
{
  {
    init_simple_test("B_BFu8i_BFu7ll");
    static B_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8i_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu7ll(Test_B_BFu8i_BFu7ll, "B_BFu8i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu7s  {
  bool v1;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 B_BFu8i_BFu7s) C1{ Fc Fi:8 Fs:7}



static void Test_B_BFu8i_BFu7s()
{
  {
    init_simple_test("B_BFu8i_BFu7s");
    static B_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8i_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu7s(Test_B_BFu8i_BFu7s, "B_BFu8i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu8c  {
  bool v1;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 B_BFu8i_BFu8c) C1{ Fc Fi:8 Fc:8}



static void Test_B_BFu8i_BFu8c()
{
  {
    init_simple_test("B_BFu8i_BFu8c");
    static B_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu8c(Test_B_BFu8i_BFu8c, "B_BFu8i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu8i  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 B_BFu8i_BFu8i) C1{ Fc Fi:8 Fi:8}



static void Test_B_BFu8i_BFu8i()
{
  {
    init_simple_test("B_BFu8i_BFu8i");
    static B_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu8i(Test_B_BFu8i_BFu8i, "B_BFu8i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu8ll  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 B_BFu8i_BFu8ll) C1{ Fc Fi:8 FL:8}



static void Test_B_BFu8i_BFu8ll()
{
  {
    init_simple_test("B_BFu8i_BFu8ll");
    static B_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu8ll(Test_B_BFu8i_BFu8ll, "B_BFu8i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu8s  {
  bool v1;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 B_BFu8i_BFu8s) C1{ Fc Fi:8 Fs:8}



static void Test_B_BFu8i_BFu8s()
{
  {
    init_simple_test("B_BFu8i_BFu8s");
    static B_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu8s(Test_B_BFu8i_BFu8s, "B_BFu8i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu9i  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 B_BFu8i_BFu9i) C1{ Fc Fi:8 Fi:9}



static void Test_B_BFu8i_BFu9i()
{
  {
    init_simple_test("B_BFu8i_BFu9i");
    static B_BFu8i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8i_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu9i(Test_B_BFu8i_BFu9i, "B_BFu8i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu9ll  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 B_BFu8i_BFu9ll) C1{ Fc Fi:8 FL:9}



static void Test_B_BFu8i_BFu9ll()
{
  {
    init_simple_test("B_BFu8i_BFu9ll");
    static B_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8i_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu9ll(Test_B_BFu8i_BFu9ll, "B_BFu8i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_BFu9s  {
  bool v1;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 B_BFu8i_BFu9s) C1{ Fc Fi:8 Fs:9}



static void Test_B_BFu8i_BFu9s()
{
  {
    init_simple_test("B_BFu8i_BFu9s");
    static B_BFu8i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu8i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8i_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu8i_BFu9s(Test_B_BFu8i_BFu9s, "B_BFu8i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_C  {
  bool v1;
  unsigned int v2:8;
  char v3;
};
//SIG(1 B_BFu8i_C) C1{ Fc Fi:8 Fc}



static void Test_B_BFu8i_C()
{
  {
    init_simple_test("B_BFu8i_C");
    static B_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_C)");
    check_field_offset(lv, v1, 0, "B_BFu8i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_C");
    check_field_offset(lv, v3, 2, "B_BFu8i_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_C(Test_B_BFu8i_C, "B_BFu8i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_D  {
  bool v1;
  unsigned int v2:8;
  double v3;
};
//SIG(1 B_BFu8i_D) C1{ Fc Fi:8 FL}



static void Test_B_BFu8i_D()
{
  {
    init_simple_test("B_BFu8i_D");
    static B_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_D)");
    check_field_offset(lv, v1, 0, "B_BFu8i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8i_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_D(Test_B_BFu8i_D, "B_BFu8i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_F  {
  bool v1;
  unsigned int v2:8;
  float v3;
};
//SIG(1 B_BFu8i_F) C1{ Fc Fi:8 Fi}



static void Test_B_BFu8i_F()
{
  {
    init_simple_test("B_BFu8i_F");
    static B_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_F)");
    check_field_offset(lv, v1, 0, "B_BFu8i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_F");
    check_field_offset(lv, v3, 4, "B_BFu8i_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_F(Test_B_BFu8i_F, "B_BFu8i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_I  {
  bool v1;
  unsigned int v2:8;
  int v3;
};
//SIG(1 B_BFu8i_I) C1{ Fc Fi:8 Fi}



static void Test_B_BFu8i_I()
{
  {
    init_simple_test("B_BFu8i_I");
    static B_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_I)");
    check_field_offset(lv, v1, 0, "B_BFu8i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_I");
    check_field_offset(lv, v3, 4, "B_BFu8i_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_I(Test_B_BFu8i_I, "B_BFu8i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_Ip  {
  bool v1;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 B_BFu8i_Ip) C1{ Fc Fi:8 Fp}



static void Test_B_BFu8i_Ip()
{
  {
    init_simple_test("B_BFu8i_Ip");
    static B_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu8i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8i_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_Ip(Test_B_BFu8i_Ip, "B_BFu8i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_L  {
  bool v1;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 B_BFu8i_L) C1{ Fc Fi:8 FL}



static void Test_B_BFu8i_L()
{
  {
    init_simple_test("B_BFu8i_L");
    static B_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_L)");
    check_field_offset(lv, v1, 0, "B_BFu8i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8i_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_L(Test_B_BFu8i_L, "B_BFu8i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_S  {
  bool v1;
  unsigned int v2:8;
  short v3;
};
//SIG(1 B_BFu8i_S) C1{ Fc Fi:8 Fs}



static void Test_B_BFu8i_S()
{
  {
    init_simple_test("B_BFu8i_S");
    static B_BFu8i_S lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_S)");
    check_field_offset(lv, v1, 0, "B_BFu8i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_S");
    check_field_offset(lv, v3, 2, "B_BFu8i_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_S(Test_B_BFu8i_S, "B_BFu8i_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_Uc  {
  bool v1;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 B_BFu8i_Uc) C1{ Fc Fi:8 Fc}



static void Test_B_BFu8i_Uc()
{
  {
    init_simple_test("B_BFu8i_Uc");
    static B_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu8i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_Uc");
    check_field_offset(lv, v3, 2, "B_BFu8i_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_Uc(Test_B_BFu8i_Uc, "B_BFu8i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_Ui  {
  bool v1;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 B_BFu8i_Ui) C1{ Fc Fi:8 Fi}



static void Test_B_BFu8i_Ui()
{
  {
    init_simple_test("B_BFu8i_Ui");
    static B_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu8i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "B_BFu8i_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_Ui(Test_B_BFu8i_Ui, "B_BFu8i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_Ul  {
  bool v1;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 B_BFu8i_Ul) C1{ Fc Fi:8 FL}



static void Test_B_BFu8i_Ul()
{
  {
    init_simple_test("B_BFu8i_Ul");
    static B_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu8i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8i_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_Ul(Test_B_BFu8i_Ul, "B_BFu8i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_Us  {
  bool v1;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 B_BFu8i_Us) C1{ Fc Fi:8 Fs}



static void Test_B_BFu8i_Us()
{
  {
    init_simple_test("B_BFu8i_Us");
    static B_BFu8i_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8i_Us)");
    check_field_offset(lv, v1, 0, "B_BFu8i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_Us");
    check_field_offset(lv, v3, 2, "B_BFu8i_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_Us(Test_B_BFu8i_Us, "B_BFu8i_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8i_Vp  {
  bool v1;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 B_BFu8i_Vp) C1{ Fc Fi:8 Fp}



static void Test_B_BFu8i_Vp()
{
  {
    init_simple_test("B_BFu8i_Vp");
    static B_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8i_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu8i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8i_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8i_Vp(Test_B_BFu8i_Vp, "B_BFu8i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll  {
  bool v1;
  __tsu64 v2:8;
};
//SIG(1 B_BFu8ll) C1{ Fc FL:8}



static void Test_B_BFu8ll()
{
  {
    init_simple_test("B_BFu8ll");
    static B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll(Test_B_BFu8ll, "B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_B  {
  bool v1;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 B_BFu8ll_B) C1{ Fc FL:8 Fc}



static void Test_B_BFu8ll_B()
{
  {
    init_simple_test("B_BFu8ll_B");
    static B_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_B)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_B");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_B");
    check_field_offset(lv, v3, 2, "B_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_B(Test_B_BFu8ll_B, "B_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu15i  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 B_BFu8ll_BFu15i) C1{ Fc FL:8 Fi:15}



static void Test_B_BFu8ll_BFu15i()
{
  {
    init_simple_test("B_BFu8ll_BFu15i");
    static B_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8ll_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu15i(Test_B_BFu8ll_BFu15i, "B_BFu8ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu15ll  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 B_BFu8ll_BFu15ll) C1{ Fc FL:8 FL:15}



static void Test_B_BFu8ll_BFu15ll()
{
  {
    init_simple_test("B_BFu8ll_BFu15ll");
    static B_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu15ll(Test_B_BFu8ll_BFu15ll, "B_BFu8ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu15s  {
  bool v1;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 B_BFu8ll_BFu15s) C1{ Fc FL:8 Fs:15}



static void Test_B_BFu8ll_BFu15s()
{
  {
    init_simple_test("B_BFu8ll_BFu15s");
    static B_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8ll_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu15s(Test_B_BFu8ll_BFu15s, "B_BFu8ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu16i  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 B_BFu8ll_BFu16i) C1{ Fc FL:8 Fi:16}



static void Test_B_BFu8ll_BFu16i()
{
  {
    init_simple_test("B_BFu8ll_BFu16i");
    static B_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8ll_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu16i(Test_B_BFu8ll_BFu16i, "B_BFu8ll_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu16ll  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 B_BFu8ll_BFu16ll) C1{ Fc FL:8 FL:16}



static void Test_B_BFu8ll_BFu16ll()
{
  {
    init_simple_test("B_BFu8ll_BFu16ll");
    static B_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu16ll(Test_B_BFu8ll_BFu16ll, "B_BFu8ll_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu16s  {
  bool v1;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 B_BFu8ll_BFu16s) C1{ Fc FL:8 Fs:16}



static void Test_B_BFu8ll_BFu16s()
{
  {
    init_simple_test("B_BFu8ll_BFu16s");
    static B_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8ll_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu16s(Test_B_BFu8ll_BFu16s, "B_BFu8ll_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu17i  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 B_BFu8ll_BFu17i) C1{ Fc FL:8 Fi:17}



static void Test_B_BFu8ll_BFu17i()
{
  {
    init_simple_test("B_BFu8ll_BFu17i");
    static B_BFu8ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu8ll_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu17i(Test_B_BFu8ll_BFu17i, "B_BFu8ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu17ll  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 B_BFu8ll_BFu17ll) C1{ Fc FL:8 FL:17}



static void Test_B_BFu8ll_BFu17ll()
{
  {
    init_simple_test("B_BFu8ll_BFu17ll");
    static B_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "B_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "B_BFu8ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu17ll(Test_B_BFu8ll_BFu17ll, "B_BFu8ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu1c  {
  bool v1;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 B_BFu8ll_BFu1c) C1{ Fc FL:8 Fc:1}



static void Test_B_BFu8ll_BFu1c()
{
  {
    init_simple_test("B_BFu8ll_BFu1c");
    static B_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8ll_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu1c(Test_B_BFu8ll_BFu1c, "B_BFu8ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu1i  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 B_BFu8ll_BFu1i) C1{ Fc FL:8 Fi:1}



static void Test_B_BFu8ll_BFu1i()
{
  {
    init_simple_test("B_BFu8ll_BFu1i");
    static B_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8ll_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu1i(Test_B_BFu8ll_BFu1i, "B_BFu8ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu1ll  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 B_BFu8ll_BFu1ll) C1{ Fc FL:8 FL:1}



static void Test_B_BFu8ll_BFu1ll()
{
  {
    init_simple_test("B_BFu8ll_BFu1ll");
    static B_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu1ll(Test_B_BFu8ll_BFu1ll, "B_BFu8ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu1s  {
  bool v1;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 B_BFu8ll_BFu1s) C1{ Fc FL:8 Fs:1}



static void Test_B_BFu8ll_BFu1s()
{
  {
    init_simple_test("B_BFu8ll_BFu1s");
    static B_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8ll_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu1s(Test_B_BFu8ll_BFu1s, "B_BFu8ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu31i  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 B_BFu8ll_BFu31i) C1{ Fc FL:8 Fi:31}



static void Test_B_BFu8ll_BFu31i()
{
  {
    init_simple_test("B_BFu8ll_BFu31i");
    static B_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu8ll_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu31i(Test_B_BFu8ll_BFu31i, "B_BFu8ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu31ll  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 B_BFu8ll_BFu31ll) C1{ Fc FL:8 FL:31}



static void Test_B_BFu8ll_BFu31ll()
{
  {
    init_simple_test("B_BFu8ll_BFu31ll");
    static B_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "B_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "B_BFu8ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu31ll(Test_B_BFu8ll_BFu31ll, "B_BFu8ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu32i  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 B_BFu8ll_BFu32i) C1{ Fc FL:8 Fi:32}



static void Test_B_BFu8ll_BFu32i()
{
  {
    init_simple_test("B_BFu8ll_BFu32i");
    static B_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu8ll_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu32i(Test_B_BFu8ll_BFu32i, "B_BFu8ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu32ll  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 B_BFu8ll_BFu32ll) C1{ Fc FL:8 FL:32}



static void Test_B_BFu8ll_BFu32ll()
{
  {
    init_simple_test("B_BFu8ll_BFu32ll");
    static B_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "B_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "B_BFu8ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu32ll(Test_B_BFu8ll_BFu32ll, "B_BFu8ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu33  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 B_BFu8ll_BFu33) C1{ Fc FL:8 FL:33}



static void Test_B_BFu8ll_BFu33()
{
  {
    init_simple_test("B_BFu8ll_BFu33");
    static B_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "B_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "B_BFu8ll_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu33(Test_B_BFu8ll_BFu33, "B_BFu8ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu7c  {
  bool v1;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 B_BFu8ll_BFu7c) C1{ Fc FL:8 Fc:7}



static void Test_B_BFu8ll_BFu7c()
{
  {
    init_simple_test("B_BFu8ll_BFu7c");
    static B_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8ll_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu7c(Test_B_BFu8ll_BFu7c, "B_BFu8ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu7i  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 B_BFu8ll_BFu7i) C1{ Fc FL:8 Fi:7}



static void Test_B_BFu8ll_BFu7i()
{
  {
    init_simple_test("B_BFu8ll_BFu7i");
    static B_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8ll_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu7i(Test_B_BFu8ll_BFu7i, "B_BFu8ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu7ll  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 B_BFu8ll_BFu7ll) C1{ Fc FL:8 FL:7}



static void Test_B_BFu8ll_BFu7ll()
{
  {
    init_simple_test("B_BFu8ll_BFu7ll");
    static B_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu7ll(Test_B_BFu8ll_BFu7ll, "B_BFu8ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu7s  {
  bool v1;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 B_BFu8ll_BFu7s) C1{ Fc FL:8 Fs:7}



static void Test_B_BFu8ll_BFu7s()
{
  {
    init_simple_test("B_BFu8ll_BFu7s");
    static B_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8ll_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu7s(Test_B_BFu8ll_BFu7s, "B_BFu8ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu8c  {
  bool v1;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 B_BFu8ll_BFu8c) C1{ Fc FL:8 Fc:8}



static void Test_B_BFu8ll_BFu8c()
{
  {
    init_simple_test("B_BFu8ll_BFu8c");
    static B_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu8c(Test_B_BFu8ll_BFu8c, "B_BFu8ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu8i  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 B_BFu8ll_BFu8i) C1{ Fc FL:8 Fi:8}



static void Test_B_BFu8ll_BFu8i()
{
  {
    init_simple_test("B_BFu8ll_BFu8i");
    static B_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu8i(Test_B_BFu8ll_BFu8i, "B_BFu8ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu8ll  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 B_BFu8ll_BFu8ll) C1{ Fc FL:8 FL:8}



static void Test_B_BFu8ll_BFu8ll()
{
  {
    init_simple_test("B_BFu8ll_BFu8ll");
    static B_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu8ll(Test_B_BFu8ll_BFu8ll, "B_BFu8ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu8s  {
  bool v1;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 B_BFu8ll_BFu8s) C1{ Fc FL:8 Fs:8}



static void Test_B_BFu8ll_BFu8s()
{
  {
    init_simple_test("B_BFu8ll_BFu8s");
    static B_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu8s(Test_B_BFu8ll_BFu8s, "B_BFu8ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu9i  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 B_BFu8ll_BFu9i) C1{ Fc FL:8 Fi:9}



static void Test_B_BFu8ll_BFu9i()
{
  {
    init_simple_test("B_BFu8ll_BFu9i");
    static B_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8ll_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu9i(Test_B_BFu8ll_BFu9i, "B_BFu8ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu9ll  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 B_BFu8ll_BFu9ll) C1{ Fc FL:8 FL:9}



static void Test_B_BFu8ll_BFu9ll()
{
  {
    init_simple_test("B_BFu8ll_BFu9ll");
    static B_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu9ll(Test_B_BFu8ll_BFu9ll, "B_BFu8ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_BFu9s  {
  bool v1;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 B_BFu8ll_BFu9s) C1{ Fc FL:8 Fs:9}



static void Test_B_BFu8ll_BFu9s()
{
  {
    init_simple_test("B_BFu8ll_BFu9s");
    static B_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8ll_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_BFu9s(Test_B_BFu8ll_BFu9s, "B_BFu8ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_C  {
  bool v1;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 B_BFu8ll_C) C1{ Fc FL:8 Fc}



static void Test_B_BFu8ll_C()
{
  {
    init_simple_test("B_BFu8ll_C");
    static B_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_C)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_C");
    check_field_offset(lv, v3, 2, "B_BFu8ll_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_C(Test_B_BFu8ll_C, "B_BFu8ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_D  {
  bool v1;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 B_BFu8ll_D) C1{ Fc FL:8 FL}



static void Test_B_BFu8ll_D()
{
  {
    init_simple_test("B_BFu8ll_D");
    static B_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_D)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8ll_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_D(Test_B_BFu8ll_D, "B_BFu8ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_F  {
  bool v1;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 B_BFu8ll_F) C1{ Fc FL:8 Fi}



static void Test_B_BFu8ll_F()
{
  {
    init_simple_test("B_BFu8ll_F");
    static B_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_F)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_F");
    check_field_offset(lv, v3, 4, "B_BFu8ll_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_F(Test_B_BFu8ll_F, "B_BFu8ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_I  {
  bool v1;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 B_BFu8ll_I) C1{ Fc FL:8 Fi}



static void Test_B_BFu8ll_I()
{
  {
    init_simple_test("B_BFu8ll_I");
    static B_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_I)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_I");
    check_field_offset(lv, v3, 4, "B_BFu8ll_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_I(Test_B_BFu8ll_I, "B_BFu8ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_Ip  {
  bool v1;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 B_BFu8ll_Ip) C1{ Fc FL:8 Fp}



static void Test_B_BFu8ll_Ip()
{
  {
    init_simple_test("B_BFu8ll_Ip");
    static B_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_Ip(Test_B_BFu8ll_Ip, "B_BFu8ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_L  {
  bool v1;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 B_BFu8ll_L) C1{ Fc FL:8 FL}



static void Test_B_BFu8ll_L()
{
  {
    init_simple_test("B_BFu8ll_L");
    static B_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_L)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8ll_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_L(Test_B_BFu8ll_L, "B_BFu8ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_S  {
  bool v1;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 B_BFu8ll_S) C1{ Fc FL:8 Fs}



static void Test_B_BFu8ll_S()
{
  {
    init_simple_test("B_BFu8ll_S");
    static B_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_S)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_S");
    check_field_offset(lv, v3, 2, "B_BFu8ll_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_S(Test_B_BFu8ll_S, "B_BFu8ll_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_Uc  {
  bool v1;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 B_BFu8ll_Uc) C1{ Fc FL:8 Fc}



static void Test_B_BFu8ll_Uc()
{
  {
    init_simple_test("B_BFu8ll_Uc");
    static B_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_Uc");
    check_field_offset(lv, v3, 2, "B_BFu8ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_Uc(Test_B_BFu8ll_Uc, "B_BFu8ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_Ui  {
  bool v1;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 B_BFu8ll_Ui) C1{ Fc FL:8 Fi}



static void Test_B_BFu8ll_Ui()
{
  {
    init_simple_test("B_BFu8ll_Ui");
    static B_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "B_BFu8ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_Ui(Test_B_BFu8ll_Ui, "B_BFu8ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_Ul  {
  bool v1;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 B_BFu8ll_Ul) C1{ Fc FL:8 FL}



static void Test_B_BFu8ll_Ul()
{
  {
    init_simple_test("B_BFu8ll_Ul");
    static B_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_Ul(Test_B_BFu8ll_Ul, "B_BFu8ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_Us  {
  bool v1;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 B_BFu8ll_Us) C1{ Fc FL:8 Fs}



static void Test_B_BFu8ll_Us()
{
  {
    init_simple_test("B_BFu8ll_Us");
    static B_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_Us)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_Us");
    check_field_offset(lv, v3, 2, "B_BFu8ll_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_Us(Test_B_BFu8ll_Us, "B_BFu8ll_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8ll_Vp  {
  bool v1;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 B_BFu8ll_Vp) C1{ Fc FL:8 Fp}



static void Test_B_BFu8ll_Vp()
{
  {
    init_simple_test("B_BFu8ll_Vp");
    static B_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8ll_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu8ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8ll_Vp(Test_B_BFu8ll_Vp, "B_BFu8ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s  {
  bool v1;
  unsigned short v2:8;
};
//SIG(1 B_BFu8s) C1{ Fc Fs:8}



static void Test_B_BFu8s()
{
  {
    init_simple_test("B_BFu8s");
    static B_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(B_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu8s(Test_B_BFu8s, "B_BFu8s", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_B  {
  bool v1;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 B_BFu8s_B) C1{ Fc Fs:8 Fc}



static void Test_B_BFu8s_B()
{
  {
    init_simple_test("B_BFu8s_B");
    static B_BFu8s_B lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_B)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_B)");
    check_field_offset(lv, v1, 0, "B_BFu8s_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_B");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_B");
    check_field_offset(lv, v3, 2, "B_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_B(Test_B_BFu8s_B, "B_BFu8s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu15i  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 B_BFu8s_BFu15i) C1{ Fc Fs:8 Fi:15}



static void Test_B_BFu8s_BFu15i()
{
  {
    init_simple_test("B_BFu8s_BFu15i");
    static B_BFu8s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8s_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu15i(Test_B_BFu8s_BFu15i, "B_BFu8s_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu15ll  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 B_BFu8s_BFu15ll) C1{ Fc Fs:8 FL:15}



static void Test_B_BFu8s_BFu15ll()
{
  {
    init_simple_test("B_BFu8s_BFu15ll");
    static B_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8s_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu15ll(Test_B_BFu8s_BFu15ll, "B_BFu8s_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu15s  {
  bool v1;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 B_BFu8s_BFu15s) C1{ Fc Fs:8 Fs:15}



static void Test_B_BFu8s_BFu15s()
{
  {
    init_simple_test("B_BFu8s_BFu15s");
    static B_BFu8s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_BFu8s_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu15s(Test_B_BFu8s_BFu15s, "B_BFu8s_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu16i  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 B_BFu8s_BFu16i) C1{ Fc Fs:8 Fi:16}



static void Test_B_BFu8s_BFu16i()
{
  {
    init_simple_test("B_BFu8s_BFu16i");
    static B_BFu8s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8s_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu16i(Test_B_BFu8s_BFu16i, "B_BFu8s_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu16ll  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 B_BFu8s_BFu16ll) C1{ Fc Fs:8 FL:16}



static void Test_B_BFu8s_BFu16ll()
{
  {
    init_simple_test("B_BFu8s_BFu16ll");
    static B_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8s_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu16ll(Test_B_BFu8s_BFu16ll, "B_BFu8s_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu16s  {
  bool v1;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 B_BFu8s_BFu16s) C1{ Fc Fs:8 Fs:16}



static void Test_B_BFu8s_BFu16s()
{
  {
    init_simple_test("B_BFu8s_BFu16s");
    static B_BFu8s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_BFu8s_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu16s(Test_B_BFu8s_BFu16s, "B_BFu8s_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu17i  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 B_BFu8s_BFu17i) C1{ Fc Fs:8 Fi:17}



static void Test_B_BFu8s_BFu17i()
{
  {
    init_simple_test("B_BFu8s_BFu17i");
    static B_BFu8s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu8s_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu17i(Test_B_BFu8s_BFu17i, "B_BFu8s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu17ll  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 B_BFu8s_BFu17ll) C1{ Fc Fs:8 FL:17}



static void Test_B_BFu8s_BFu17ll()
{
  {
    init_simple_test("B_BFu8s_BFu17ll");
    static B_BFu8s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "B_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "B_BFu8s_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu17ll(Test_B_BFu8s_BFu17ll, "B_BFu8s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu1c  {
  bool v1;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 B_BFu8s_BFu1c) C1{ Fc Fs:8 Fc:1}



static void Test_B_BFu8s_BFu1c()
{
  {
    init_simple_test("B_BFu8s_BFu1c");
    static B_BFu8s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8s_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu1c(Test_B_BFu8s_BFu1c, "B_BFu8s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu1i  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 B_BFu8s_BFu1i) C1{ Fc Fs:8 Fi:1}



static void Test_B_BFu8s_BFu1i()
{
  {
    init_simple_test("B_BFu8s_BFu1i");
    static B_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8s_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu1i(Test_B_BFu8s_BFu1i, "B_BFu8s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu1ll  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 B_BFu8s_BFu1ll) C1{ Fc Fs:8 FL:1}



static void Test_B_BFu8s_BFu1ll()
{
  {
    init_simple_test("B_BFu8s_BFu1ll");
    static B_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8s_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu1ll(Test_B_BFu8s_BFu1ll, "B_BFu8s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu1s  {
  bool v1;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 B_BFu8s_BFu1s) C1{ Fc Fs:8 Fs:1}



static void Test_B_BFu8s_BFu1s()
{
  {
    init_simple_test("B_BFu8s_BFu1s");
    static B_BFu8s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_BFu8s_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu1s(Test_B_BFu8s_BFu1s, "B_BFu8s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu31i  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 B_BFu8s_BFu31i) C1{ Fc Fs:8 Fi:31}



static void Test_B_BFu8s_BFu31i()
{
  {
    init_simple_test("B_BFu8s_BFu31i");
    static B_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu8s_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu31i(Test_B_BFu8s_BFu31i, "B_BFu8s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu31ll  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 B_BFu8s_BFu31ll) C1{ Fc Fs:8 FL:31}



static void Test_B_BFu8s_BFu31ll()
{
  {
    init_simple_test("B_BFu8s_BFu31ll");
    static B_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "B_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "B_BFu8s_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu31ll(Test_B_BFu8s_BFu31ll, "B_BFu8s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu32i  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 B_BFu8s_BFu32i) C1{ Fc Fs:8 Fi:32}



static void Test_B_BFu8s_BFu32i()
{
  {
    init_simple_test("B_BFu8s_BFu32i");
    static B_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu8s_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu32i(Test_B_BFu8s_BFu32i, "B_BFu8s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu32ll  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 B_BFu8s_BFu32ll) C1{ Fc Fs:8 FL:32}



static void Test_B_BFu8s_BFu32ll()
{
  {
    init_simple_test("B_BFu8s_BFu32ll");
    static B_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "B_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "B_BFu8s_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu32ll(Test_B_BFu8s_BFu32ll, "B_BFu8s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu33  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 B_BFu8s_BFu33) C1{ Fc Fs:8 FL:33}



static void Test_B_BFu8s_BFu33()
{
  {
    init_simple_test("B_BFu8s_BFu33");
    static B_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "B_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "B_BFu8s_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu33(Test_B_BFu8s_BFu33, "B_BFu8s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu7c  {
  bool v1;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 B_BFu8s_BFu7c) C1{ Fc Fs:8 Fc:7}



static void Test_B_BFu8s_BFu7c()
{
  {
    init_simple_test("B_BFu8s_BFu7c");
    static B_BFu8s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8s_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu7c(Test_B_BFu8s_BFu7c, "B_BFu8s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu7i  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 B_BFu8s_BFu7i) C1{ Fc Fs:8 Fi:7}



static void Test_B_BFu8s_BFu7i()
{
  {
    init_simple_test("B_BFu8s_BFu7i");
    static B_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8s_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu7i(Test_B_BFu8s_BFu7i, "B_BFu8s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu7ll  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 B_BFu8s_BFu7ll) C1{ Fc Fs:8 FL:7}



static void Test_B_BFu8s_BFu7ll()
{
  {
    init_simple_test("B_BFu8s_BFu7ll");
    static B_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8s_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu7ll(Test_B_BFu8s_BFu7ll, "B_BFu8s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu7s  {
  bool v1;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 B_BFu8s_BFu7s) C1{ Fc Fs:8 Fs:7}



static void Test_B_BFu8s_BFu7s()
{
  {
    init_simple_test("B_BFu8s_BFu7s");
    static B_BFu8s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_BFu8s_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu7s(Test_B_BFu8s_BFu7s, "B_BFu8s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu8c  {
  bool v1;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 B_BFu8s_BFu8c) C1{ Fc Fs:8 Fc:8}



static void Test_B_BFu8s_BFu8c()
{
  {
    init_simple_test("B_BFu8s_BFu8c");
    static B_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu8c(Test_B_BFu8s_BFu8c, "B_BFu8s_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu8i  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 B_BFu8s_BFu8i) C1{ Fc Fs:8 Fi:8}



static void Test_B_BFu8s_BFu8i()
{
  {
    init_simple_test("B_BFu8s_BFu8i");
    static B_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu8i(Test_B_BFu8s_BFu8i, "B_BFu8s_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu8ll  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 B_BFu8s_BFu8ll) C1{ Fc Fs:8 FL:8}



static void Test_B_BFu8s_BFu8ll()
{
  {
    init_simple_test("B_BFu8s_BFu8ll");
    static B_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu8ll(Test_B_BFu8s_BFu8ll, "B_BFu8s_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu8s  {
  bool v1;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 B_BFu8s_BFu8s) C1{ Fc Fs:8 Fs:8}



static void Test_B_BFu8s_BFu8s()
{
  {
    init_simple_test("B_BFu8s_BFu8s");
    static B_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu8s(Test_B_BFu8s_BFu8s, "B_BFu8s_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu9i  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 B_BFu8s_BFu9i) C1{ Fc Fs:8 Fi:9}



static void Test_B_BFu8s_BFu9i()
{
  {
    init_simple_test("B_BFu8s_BFu9i");
    static B_BFu8s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8s_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu9i(Test_B_BFu8s_BFu9i, "B_BFu8s_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu9ll  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 B_BFu8s_BFu9ll) C1{ Fc Fs:8 FL:9}



static void Test_B_BFu8s_BFu9ll()
{
  {
    init_simple_test("B_BFu8s_BFu9ll");
    static B_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8s_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu9ll(Test_B_BFu8s_BFu9ll, "B_BFu8s_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_BFu9s  {
  bool v1;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 B_BFu8s_BFu9s) C1{ Fc Fs:8 Fs:9}



static void Test_B_BFu8s_BFu9s()
{
  {
    init_simple_test("B_BFu8s_BFu9s");
    static B_BFu8s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu8s_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_BFu8s_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu8s_BFu9s(Test_B_BFu8s_BFu9s, "B_BFu8s_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_C  {
  bool v1;
  unsigned short v2:8;
  char v3;
};
//SIG(1 B_BFu8s_C) C1{ Fc Fs:8 Fc}



static void Test_B_BFu8s_C()
{
  {
    init_simple_test("B_BFu8s_C");
    static B_BFu8s_C lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_C)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_C)");
    check_field_offset(lv, v1, 0, "B_BFu8s_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_C");
    check_field_offset(lv, v3, 2, "B_BFu8s_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_C(Test_B_BFu8s_C, "B_BFu8s_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_D  {
  bool v1;
  unsigned short v2:8;
  double v3;
};
//SIG(1 B_BFu8s_D) C1{ Fc Fs:8 FL}



static void Test_B_BFu8s_D()
{
  {
    init_simple_test("B_BFu8s_D");
    static B_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_D)");
    check_field_offset(lv, v1, 0, "B_BFu8s_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8s_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_D(Test_B_BFu8s_D, "B_BFu8s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_F  {
  bool v1;
  unsigned short v2:8;
  float v3;
};
//SIG(1 B_BFu8s_F) C1{ Fc Fs:8 Fi}



static void Test_B_BFu8s_F()
{
  {
    init_simple_test("B_BFu8s_F");
    static B_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_F)");
    check_field_offset(lv, v1, 0, "B_BFu8s_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_F");
    check_field_offset(lv, v3, 4, "B_BFu8s_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_F(Test_B_BFu8s_F, "B_BFu8s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_I  {
  bool v1;
  unsigned short v2:8;
  int v3;
};
//SIG(1 B_BFu8s_I) C1{ Fc Fs:8 Fi}



static void Test_B_BFu8s_I()
{
  {
    init_simple_test("B_BFu8s_I");
    static B_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_I)");
    check_field_offset(lv, v1, 0, "B_BFu8s_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_I");
    check_field_offset(lv, v3, 4, "B_BFu8s_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_I(Test_B_BFu8s_I, "B_BFu8s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_Ip  {
  bool v1;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 B_BFu8s_Ip) C1{ Fc Fs:8 Fp}



static void Test_B_BFu8s_Ip()
{
  {
    init_simple_test("B_BFu8s_Ip");
    static B_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu8s_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8s_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_Ip(Test_B_BFu8s_Ip, "B_BFu8s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_L  {
  bool v1;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 B_BFu8s_L) C1{ Fc Fs:8 FL}



static void Test_B_BFu8s_L()
{
  {
    init_simple_test("B_BFu8s_L");
    static B_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_L)");
    check_field_offset(lv, v1, 0, "B_BFu8s_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8s_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_L(Test_B_BFu8s_L, "B_BFu8s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_S  {
  bool v1;
  unsigned short v2:8;
  short v3;
};
//SIG(1 B_BFu8s_S) C1{ Fc Fs:8 Fs}



static void Test_B_BFu8s_S()
{
  {
    init_simple_test("B_BFu8s_S");
    static B_BFu8s_S lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_S)");
    check_field_offset(lv, v1, 0, "B_BFu8s_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_S");
    check_field_offset(lv, v3, 2, "B_BFu8s_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_S(Test_B_BFu8s_S, "B_BFu8s_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_Uc  {
  bool v1;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 B_BFu8s_Uc) C1{ Fc Fs:8 Fc}



static void Test_B_BFu8s_Uc()
{
  {
    init_simple_test("B_BFu8s_Uc");
    static B_BFu8s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu8s_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_Uc");
    check_field_offset(lv, v3, 2, "B_BFu8s_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_Uc(Test_B_BFu8s_Uc, "B_BFu8s_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_Ui  {
  bool v1;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 B_BFu8s_Ui) C1{ Fc Fs:8 Fi}



static void Test_B_BFu8s_Ui()
{
  {
    init_simple_test("B_BFu8s_Ui");
    static B_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu8s_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu8s_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "B_BFu8s_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_Ui(Test_B_BFu8s_Ui, "B_BFu8s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_Ul  {
  bool v1;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 B_BFu8s_Ul) C1{ Fc Fs:8 FL}



static void Test_B_BFu8s_Ul()
{
  {
    init_simple_test("B_BFu8s_Ul");
    static B_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu8s_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8s_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_Ul(Test_B_BFu8s_Ul, "B_BFu8s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_Us  {
  bool v1;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 B_BFu8s_Us) C1{ Fc Fs:8 Fs}



static void Test_B_BFu8s_Us()
{
  {
    init_simple_test("B_BFu8s_Us");
    static B_BFu8s_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu8s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu8s_Us)");
    check_field_offset(lv, v1, 0, "B_BFu8s_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_Us");
    check_field_offset(lv, v3, 2, "B_BFu8s_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_Us(Test_B_BFu8s_Us, "B_BFu8s_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu8s_Vp  {
  bool v1;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 B_BFu8s_Vp) C1{ Fc Fs:8 Fp}



static void Test_B_BFu8s_Vp()
{
  {
    init_simple_test("B_BFu8s_Vp");
    static B_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu8s_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu8s_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "B_BFu8s_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "B_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu8s_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu8s_Vp(Test_B_BFu8s_Vp, "B_BFu8s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i  {
  bool v1;
  unsigned int v2:9;
};
//SIG(1 B_BFu9i) C1{ Fc Fi:9}



static void Test_B_BFu9i()
{
  {
    init_simple_test("B_BFu9i");
    static B_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu9i(Test_B_BFu9i, "B_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_B  {
  bool v1;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 B_BFu9i_B) C1{ Fc Fi:9 Fc}



static void Test_B_BFu9i_B()
{
  {
    init_simple_test("B_BFu9i_B");
    static B_BFu9i_B lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_B)");
    check_field_offset(lv, v1, 0, "B_BFu9i_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_B");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_B");
    check_field_offset(lv, v3, 3, "B_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_B(Test_B_BFu9i_B, "B_BFu9i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu15i  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 B_BFu9i_BFu15i) C1{ Fc Fi:9 Fi:15}



static void Test_B_BFu9i_BFu15i()
{
  {
    init_simple_test("B_BFu9i_BFu15i");
    static B_BFu9i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "B_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "B_BFu9i_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu15i(Test_B_BFu9i_BFu15i, "B_BFu9i_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu15ll  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 B_BFu9i_BFu15ll) C1{ Fc Fi:9 FL:15}



static void Test_B_BFu9i_BFu15ll()
{
  {
    init_simple_test("B_BFu9i_BFu15ll");
    static B_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "B_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "B_BFu9i_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu15ll(Test_B_BFu9i_BFu15ll, "B_BFu9i_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu15s  {
  bool v1;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 B_BFu9i_BFu15s) C1{ Fc Fi:9 Fs:15}



static void Test_B_BFu9i_BFu15s()
{
  {
    init_simple_test("B_BFu9i_BFu15s");
    static B_BFu9i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "B_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "B_BFu9i_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu15s(Test_B_BFu9i_BFu15s, "B_BFu9i_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu16i  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 B_BFu9i_BFu16i) C1{ Fc Fi:9 Fi:16}



static void Test_B_BFu9i_BFu16i()
{
  {
    init_simple_test("B_BFu9i_BFu16i");
    static B_BFu9i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu9i_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu16i(Test_B_BFu9i_BFu16i, "B_BFu9i_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu16ll  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 B_BFu9i_BFu16ll) C1{ Fc Fi:9 FL:16}



static void Test_B_BFu9i_BFu16ll()
{
  {
    init_simple_test("B_BFu9i_BFu16ll");
    static B_BFu9i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "B_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "B_BFu9i_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu16ll(Test_B_BFu9i_BFu16ll, "B_BFu9i_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu16s  {
  bool v1;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 B_BFu9i_BFu16s) C1{ Fc Fi:9 Fs:16}



static void Test_B_BFu9i_BFu16s()
{
  {
    init_simple_test("B_BFu9i_BFu16s");
    static B_BFu9i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu9i_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu16s(Test_B_BFu9i_BFu16s, "B_BFu9i_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu17i  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 B_BFu9i_BFu17i) C1{ Fc Fi:9 Fi:17}



static void Test_B_BFu9i_BFu17i()
{
  {
    init_simple_test("B_BFu9i_BFu17i");
    static B_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu9i_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu17i(Test_B_BFu9i_BFu17i, "B_BFu9i_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu17ll  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 B_BFu9i_BFu17ll) C1{ Fc Fi:9 FL:17}



static void Test_B_BFu9i_BFu17ll()
{
  {
    init_simple_test("B_BFu9i_BFu17ll");
    static B_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "B_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "B_BFu9i_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu17ll(Test_B_BFu9i_BFu17ll, "B_BFu9i_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu1c  {
  bool v1;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 B_BFu9i_BFu1c) C1{ Fc Fi:9 Fc:1}



static void Test_B_BFu9i_BFu1c()
{
  {
    init_simple_test("B_BFu9i_BFu1c");
    static B_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "B_BFu9i_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu1c(Test_B_BFu9i_BFu1c, "B_BFu9i_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu1i  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 B_BFu9i_BFu1i) C1{ Fc Fi:9 Fi:1}



static void Test_B_BFu9i_BFu1i()
{
  {
    init_simple_test("B_BFu9i_BFu1i");
    static B_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "B_BFu9i_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu1i(Test_B_BFu9i_BFu1i, "B_BFu9i_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu1ll  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 B_BFu9i_BFu1ll) C1{ Fc Fi:9 FL:1}



static void Test_B_BFu9i_BFu1ll()
{
  {
    init_simple_test("B_BFu9i_BFu1ll");
    static B_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "B_BFu9i_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu1ll(Test_B_BFu9i_BFu1ll, "B_BFu9i_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu1s  {
  bool v1;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 B_BFu9i_BFu1s) C1{ Fc Fi:9 Fs:1}



static void Test_B_BFu9i_BFu1s()
{
  {
    init_simple_test("B_BFu9i_BFu1s");
    static B_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "B_BFu9i_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu1s(Test_B_BFu9i_BFu1s, "B_BFu9i_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu31i  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 B_BFu9i_BFu31i) C1{ Fc Fi:9 Fi:31}



static void Test_B_BFu9i_BFu31i()
{
  {
    init_simple_test("B_BFu9i_BFu31i");
    static B_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu9i_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu31i(Test_B_BFu9i_BFu31i, "B_BFu9i_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu31ll  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 B_BFu9i_BFu31ll) C1{ Fc Fi:9 FL:31}



static void Test_B_BFu9i_BFu31ll()
{
  {
    init_simple_test("B_BFu9i_BFu31ll");
    static B_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "B_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "B_BFu9i_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu31ll(Test_B_BFu9i_BFu31ll, "B_BFu9i_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu32i  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 B_BFu9i_BFu32i) C1{ Fc Fi:9 Fi:32}



static void Test_B_BFu9i_BFu32i()
{
  {
    init_simple_test("B_BFu9i_BFu32i");
    static B_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu9i_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu32i(Test_B_BFu9i_BFu32i, "B_BFu9i_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu32ll  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 B_BFu9i_BFu32ll) C1{ Fc Fi:9 FL:32}



static void Test_B_BFu9i_BFu32ll()
{
  {
    init_simple_test("B_BFu9i_BFu32ll");
    static B_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "B_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "B_BFu9i_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu32ll(Test_B_BFu9i_BFu32ll, "B_BFu9i_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu33  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 B_BFu9i_BFu33) C1{ Fc Fi:9 FL:33}



static void Test_B_BFu9i_BFu33()
{
  {
    init_simple_test("B_BFu9i_BFu33");
    static B_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "B_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "B_BFu9i_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu33(Test_B_BFu9i_BFu33, "B_BFu9i_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu7c  {
  bool v1;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 B_BFu9i_BFu7c) C1{ Fc Fi:9 Fc:7}



static void Test_B_BFu9i_BFu7c()
{
  {
    init_simple_test("B_BFu9i_BFu7c");
    static B_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "B_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "B_BFu9i_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu7c(Test_B_BFu9i_BFu7c, "B_BFu9i_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu7i  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 B_BFu9i_BFu7i) C1{ Fc Fi:9 Fi:7}



static void Test_B_BFu9i_BFu7i()
{
  {
    init_simple_test("B_BFu9i_BFu7i");
    static B_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "B_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "B_BFu9i_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu7i(Test_B_BFu9i_BFu7i, "B_BFu9i_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu7ll  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 B_BFu9i_BFu7ll) C1{ Fc Fi:9 FL:7}



static void Test_B_BFu9i_BFu7ll()
{
  {
    init_simple_test("B_BFu9i_BFu7ll");
    static B_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "B_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "B_BFu9i_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu7ll(Test_B_BFu9i_BFu7ll, "B_BFu9i_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu7s  {
  bool v1;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 B_BFu9i_BFu7s) C1{ Fc Fi:9 Fs:7}



static void Test_B_BFu9i_BFu7s()
{
  {
    init_simple_test("B_BFu9i_BFu7s");
    static B_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "B_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "B_BFu9i_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu7s(Test_B_BFu9i_BFu7s, "B_BFu9i_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu8c  {
  bool v1;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 B_BFu9i_BFu8c) C1{ Fc Fi:9 Fc:8}



static void Test_B_BFu9i_BFu8c()
{
  {
    init_simple_test("B_BFu9i_BFu8c");
    static B_BFu9i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu9i_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu8c(Test_B_BFu9i_BFu8c, "B_BFu9i_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu8i  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 B_BFu9i_BFu8i) C1{ Fc Fi:9 Fi:8}



static void Test_B_BFu9i_BFu8i()
{
  {
    init_simple_test("B_BFu9i_BFu8i");
    static B_BFu9i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "B_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "B_BFu9i_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu8i(Test_B_BFu9i_BFu8i, "B_BFu9i_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu8ll  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 B_BFu9i_BFu8ll) C1{ Fc Fi:9 FL:8}



static void Test_B_BFu9i_BFu8ll()
{
  {
    init_simple_test("B_BFu9i_BFu8ll");
    static B_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "B_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "B_BFu9i_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu8ll(Test_B_BFu9i_BFu8ll, "B_BFu9i_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu8s  {
  bool v1;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 B_BFu9i_BFu8s) C1{ Fc Fi:9 Fs:8}



static void Test_B_BFu9i_BFu8s()
{
  {
    init_simple_test("B_BFu9i_BFu8s");
    static B_BFu9i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "B_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "B_BFu9i_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu8s(Test_B_BFu9i_BFu8s, "B_BFu9i_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu9i  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 B_BFu9i_BFu9i) C1{ Fc Fi:9 Fi:9}



static void Test_B_BFu9i_BFu9i()
{
  {
    init_simple_test("B_BFu9i_BFu9i");
    static B_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "B_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "B_BFu9i_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu9i(Test_B_BFu9i_BFu9i, "B_BFu9i_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu9ll  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 B_BFu9i_BFu9ll) C1{ Fc Fi:9 FL:9}



static void Test_B_BFu9i_BFu9ll()
{
  {
    init_simple_test("B_BFu9i_BFu9ll");
    static B_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "B_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "B_BFu9i_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu9ll(Test_B_BFu9i_BFu9ll, "B_BFu9i_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_BFu9s  {
  bool v1;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 B_BFu9i_BFu9s) C1{ Fc Fi:9 Fs:9}



static void Test_B_BFu9i_BFu9s()
{
  {
    init_simple_test("B_BFu9i_BFu9s");
    static B_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu9i_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "B_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "B_BFu9i_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu9i_BFu9s(Test_B_BFu9i_BFu9s, "B_BFu9i_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_C  {
  bool v1;
  unsigned int v2:9;
  char v3;
};
//SIG(1 B_BFu9i_C) C1{ Fc Fi:9 Fc}



static void Test_B_BFu9i_C()
{
  {
    init_simple_test("B_BFu9i_C");
    static B_BFu9i_C lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_C)");
    check_field_offset(lv, v1, 0, "B_BFu9i_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_C");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_C");
    check_field_offset(lv, v3, 3, "B_BFu9i_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_C(Test_B_BFu9i_C, "B_BFu9i_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_D  {
  bool v1;
  unsigned int v2:9;
  double v3;
};
//SIG(1 B_BFu9i_D) C1{ Fc Fi:9 FL}



static void Test_B_BFu9i_D()
{
  {
    init_simple_test("B_BFu9i_D");
    static B_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_D)");
    check_field_offset(lv, v1, 0, "B_BFu9i_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_D");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9i_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_D(Test_B_BFu9i_D, "B_BFu9i_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_F  {
  bool v1;
  unsigned int v2:9;
  float v3;
};
//SIG(1 B_BFu9i_F) C1{ Fc Fi:9 Fi}



static void Test_B_BFu9i_F()
{
  {
    init_simple_test("B_BFu9i_F");
    static B_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_F)");
    check_field_offset(lv, v1, 0, "B_BFu9i_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_F");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_F");
    check_field_offset(lv, v3, 4, "B_BFu9i_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_F(Test_B_BFu9i_F, "B_BFu9i_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_I  {
  bool v1;
  unsigned int v2:9;
  int v3;
};
//SIG(1 B_BFu9i_I) C1{ Fc Fi:9 Fi}



static void Test_B_BFu9i_I()
{
  {
    init_simple_test("B_BFu9i_I");
    static B_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_I)");
    check_field_offset(lv, v1, 0, "B_BFu9i_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_I");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_I");
    check_field_offset(lv, v3, 4, "B_BFu9i_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_I(Test_B_BFu9i_I, "B_BFu9i_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_Ip  {
  bool v1;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 B_BFu9i_Ip) C1{ Fc Fi:9 Fp}



static void Test_B_BFu9i_Ip()
{
  {
    init_simple_test("B_BFu9i_Ip");
    static B_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu9i_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_Ip");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9i_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_Ip(Test_B_BFu9i_Ip, "B_BFu9i_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_L  {
  bool v1;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 B_BFu9i_L) C1{ Fc Fi:9 FL}



static void Test_B_BFu9i_L()
{
  {
    init_simple_test("B_BFu9i_L");
    static B_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_L)");
    check_field_offset(lv, v1, 0, "B_BFu9i_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_L");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9i_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_L(Test_B_BFu9i_L, "B_BFu9i_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_S  {
  bool v1;
  unsigned int v2:9;
  short v3;
};
//SIG(1 B_BFu9i_S) C1{ Fc Fi:9 Fs}



static void Test_B_BFu9i_S()
{
  {
    init_simple_test("B_BFu9i_S");
    static B_BFu9i_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_S)");
    check_field_offset(lv, v1, 0, "B_BFu9i_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_S");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_S");
    check_field_offset(lv, v3, 4, "B_BFu9i_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_S(Test_B_BFu9i_S, "B_BFu9i_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_Uc  {
  bool v1;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 B_BFu9i_Uc) C1{ Fc Fi:9 Fc}



static void Test_B_BFu9i_Uc()
{
  {
    init_simple_test("B_BFu9i_Uc");
    static B_BFu9i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu9i_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_Uc");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_Uc");
    check_field_offset(lv, v3, 3, "B_BFu9i_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_Uc(Test_B_BFu9i_Uc, "B_BFu9i_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_Ui  {
  bool v1;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 B_BFu9i_Ui) C1{ Fc Fi:9 Fi}



static void Test_B_BFu9i_Ui()
{
  {
    init_simple_test("B_BFu9i_Ui");
    static B_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu9i_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_Ui");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "B_BFu9i_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_Ui(Test_B_BFu9i_Ui, "B_BFu9i_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_Ul  {
  bool v1;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 B_BFu9i_Ul) C1{ Fc Fi:9 FL}



static void Test_B_BFu9i_Ul()
{
  {
    init_simple_test("B_BFu9i_Ul");
    static B_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu9i_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_Ul");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9i_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_Ul(Test_B_BFu9i_Ul, "B_BFu9i_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_Us  {
  bool v1;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 B_BFu9i_Us) C1{ Fc Fi:9 Fs}



static void Test_B_BFu9i_Us()
{
  {
    init_simple_test("B_BFu9i_Us");
    static B_BFu9i_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9i_Us)");
    check_field_offset(lv, v1, 0, "B_BFu9i_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_Us");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_Us");
    check_field_offset(lv, v3, 4, "B_BFu9i_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_Us(Test_B_BFu9i_Us, "B_BFu9i_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9i_Vp  {
  bool v1;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 B_BFu9i_Vp) C1{ Fc Fi:9 Fp}



static void Test_B_BFu9i_Vp()
{
  {
    init_simple_test("B_BFu9i_Vp");
    static B_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9i_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu9i_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9i_Vp");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9i_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9i_Vp(Test_B_BFu9i_Vp, "B_BFu9i_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll  {
  bool v1;
  __tsu64 v2:9;
};
//SIG(1 B_BFu9ll) C1{ Fc FL:9}



static void Test_B_BFu9ll()
{
  {
    init_simple_test("B_BFu9ll");
    static B_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll(Test_B_BFu9ll, "B_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_B  {
  bool v1;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 B_BFu9ll_B) C1{ Fc FL:9 Fc}



static void Test_B_BFu9ll_B()
{
  {
    init_simple_test("B_BFu9ll_B");
    static B_BFu9ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_B)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_B.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_B");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_B");
    check_field_offset(lv, v3, 3, "B_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_B(Test_B_BFu9ll_B, "B_BFu9ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu15i  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 B_BFu9ll_BFu15i) C1{ Fc FL:9 Fi:15}



static void Test_B_BFu9ll_BFu15i()
{
  {
    init_simple_test("B_BFu9ll_BFu15i");
    static B_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "B_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "B_BFu9ll_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu15i(Test_B_BFu9ll_BFu15i, "B_BFu9ll_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu15ll  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 B_BFu9ll_BFu15ll) C1{ Fc FL:9 FL:15}



static void Test_B_BFu9ll_BFu15ll()
{
  {
    init_simple_test("B_BFu9ll_BFu15ll");
    static B_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "B_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "B_BFu9ll_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu15ll(Test_B_BFu9ll_BFu15ll, "B_BFu9ll_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu15s  {
  bool v1;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 B_BFu9ll_BFu15s) C1{ Fc FL:9 Fs:15}



static void Test_B_BFu9ll_BFu15s()
{
  {
    init_simple_test("B_BFu9ll_BFu15s");
    static B_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, 1, "B_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 1, 15, hide_ull(1LL<<14), "B_BFu9ll_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu15s(Test_B_BFu9ll_BFu15s, "B_BFu9ll_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu16i  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 B_BFu9ll_BFu16i) C1{ Fc FL:9 Fi:16}



static void Test_B_BFu9ll_BFu16i()
{
  {
    init_simple_test("B_BFu9ll_BFu16i");
    static B_BFu9ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu9ll_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu16i(Test_B_BFu9ll_BFu16i, "B_BFu9ll_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu16ll  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 B_BFu9ll_BFu16ll) C1{ Fc FL:9 FL:16}



static void Test_B_BFu9ll_BFu16ll()
{
  {
    init_simple_test("B_BFu9ll_BFu16ll");
    static B_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, 1, "B_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 1, 16, hide_ull(1LL<<15), "B_BFu9ll_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu16ll(Test_B_BFu9ll_BFu16ll, "B_BFu9ll_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu16s  {
  bool v1;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 B_BFu9ll_BFu16s) C1{ Fc FL:9 Fs:16}



static void Test_B_BFu9ll_BFu16s()
{
  {
    init_simple_test("B_BFu9ll_BFu16s");
    static B_BFu9ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu9ll_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu16s(Test_B_BFu9ll_BFu16s, "B_BFu9ll_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu17i  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 B_BFu9ll_BFu17i) C1{ Fc FL:9 Fi:17}



static void Test_B_BFu9ll_BFu17i()
{
  {
    init_simple_test("B_BFu9ll_BFu17i");
    static B_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu9ll_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu17i(Test_B_BFu9ll_BFu17i, "B_BFu9ll_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu17ll  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 B_BFu9ll_BFu17ll) C1{ Fc FL:9 FL:17}



static void Test_B_BFu9ll_BFu17ll()
{
  {
    init_simple_test("B_BFu9ll_BFu17ll");
    static B_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, 1, "B_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 1, 17, hide_ull(1LL<<16), "B_BFu9ll_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu17ll(Test_B_BFu9ll_BFu17ll, "B_BFu9ll_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu1c  {
  bool v1;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 B_BFu9ll_BFu1c) C1{ Fc FL:9 Fc:1}



static void Test_B_BFu9ll_BFu1c()
{
  {
    init_simple_test("B_BFu9ll_BFu1c");
    static B_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "B_BFu9ll_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu1c(Test_B_BFu9ll_BFu1c, "B_BFu9ll_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu1i  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 B_BFu9ll_BFu1i) C1{ Fc FL:9 Fi:1}



static void Test_B_BFu9ll_BFu1i()
{
  {
    init_simple_test("B_BFu9ll_BFu1i");
    static B_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "B_BFu9ll_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu1i(Test_B_BFu9ll_BFu1i, "B_BFu9ll_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu1ll  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 B_BFu9ll_BFu1ll) C1{ Fc FL:9 FL:1}



static void Test_B_BFu9ll_BFu1ll()
{
  {
    init_simple_test("B_BFu9ll_BFu1ll");
    static B_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "B_BFu9ll_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu1ll(Test_B_BFu9ll_BFu1ll, "B_BFu9ll_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu1s  {
  bool v1;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 B_BFu9ll_BFu1s) C1{ Fc FL:9 Fs:1}



static void Test_B_BFu9ll_BFu1s()
{
  {
    init_simple_test("B_BFu9ll_BFu1s");
    static B_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 1, 1, 1, "B_BFu9ll_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu1s(Test_B_BFu9ll_BFu1s, "B_BFu9ll_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu31i  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 B_BFu9ll_BFu31i) C1{ Fc FL:9 Fi:31}



static void Test_B_BFu9ll_BFu31i()
{
  {
    init_simple_test("B_BFu9ll_BFu31i");
    static B_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu9ll_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu31i(Test_B_BFu9ll_BFu31i, "B_BFu9ll_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu31ll  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 B_BFu9ll_BFu31ll) C1{ Fc FL:9 FL:31}



static void Test_B_BFu9ll_BFu31ll()
{
  {
    init_simple_test("B_BFu9ll_BFu31ll");
    static B_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, 1, "B_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 1, 31, hide_ull(1LL<<30), "B_BFu9ll_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu31ll(Test_B_BFu9ll_BFu31ll, "B_BFu9ll_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu32i  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 B_BFu9ll_BFu32i) C1{ Fc FL:9 Fi:32}



static void Test_B_BFu9ll_BFu32i()
{
  {
    init_simple_test("B_BFu9ll_BFu32i");
    static B_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu9ll_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu32i(Test_B_BFu9ll_BFu32i, "B_BFu9ll_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu32ll  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 B_BFu9ll_BFu32ll) C1{ Fc FL:9 FL:32}



static void Test_B_BFu9ll_BFu32ll()
{
  {
    init_simple_test("B_BFu9ll_BFu32ll");
    static B_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, 1, "B_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 1, 32, hide_ull(1LL<<31), "B_BFu9ll_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu32ll(Test_B_BFu9ll_BFu32ll, "B_BFu9ll_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu33  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 B_BFu9ll_BFu33) C1{ Fc FL:9 FL:33}



static void Test_B_BFu9ll_BFu33()
{
  {
    init_simple_test("B_BFu9ll_BFu33");
    static B_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, 1, "B_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 1, 33, hide_ull(1LL<<32), "B_BFu9ll_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu33(Test_B_BFu9ll_BFu33, "B_BFu9ll_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu7c  {
  bool v1;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 B_BFu9ll_BFu7c) C1{ Fc FL:9 Fc:7}



static void Test_B_BFu9ll_BFu7c()
{
  {
    init_simple_test("B_BFu9ll_BFu7c");
    static B_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "B_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "B_BFu9ll_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu7c(Test_B_BFu9ll_BFu7c, "B_BFu9ll_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu7i  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 B_BFu9ll_BFu7i) C1{ Fc FL:9 Fi:7}



static void Test_B_BFu9ll_BFu7i()
{
  {
    init_simple_test("B_BFu9ll_BFu7i");
    static B_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "B_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "B_BFu9ll_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu7i(Test_B_BFu9ll_BFu7i, "B_BFu9ll_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu7ll  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 B_BFu9ll_BFu7ll) C1{ Fc FL:9 FL:7}



static void Test_B_BFu9ll_BFu7ll()
{
  {
    init_simple_test("B_BFu9ll_BFu7ll");
    static B_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "B_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "B_BFu9ll_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu7ll(Test_B_BFu9ll_BFu7ll, "B_BFu9ll_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu7s  {
  bool v1;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 B_BFu9ll_BFu7s) C1{ Fc FL:9 Fs:7}



static void Test_B_BFu9ll_BFu7s()
{
  {
    init_simple_test("B_BFu9ll_BFu7s");
    static B_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, 1, "B_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 1, 7, hide_ull(1LL<<6), "B_BFu9ll_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu7s(Test_B_BFu9ll_BFu7s, "B_BFu9ll_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu8c  {
  bool v1;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 B_BFu9ll_BFu8c) C1{ Fc FL:9 Fc:8}



static void Test_B_BFu9ll_BFu8c()
{
  {
    init_simple_test("B_BFu9ll_BFu8c");
    static B_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "B_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "B_BFu9ll_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu8c(Test_B_BFu9ll_BFu8c, "B_BFu9ll_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu8i  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 B_BFu9ll_BFu8i) C1{ Fc FL:9 Fi:8}



static void Test_B_BFu9ll_BFu8i()
{
  {
    init_simple_test("B_BFu9ll_BFu8i");
    static B_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "B_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "B_BFu9ll_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu8i(Test_B_BFu9ll_BFu8i, "B_BFu9ll_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu8ll  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 B_BFu9ll_BFu8ll) C1{ Fc FL:9 FL:8}



static void Test_B_BFu9ll_BFu8ll()
{
  {
    init_simple_test("B_BFu9ll_BFu8ll");
    static B_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "B_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "B_BFu9ll_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu8ll(Test_B_BFu9ll_BFu8ll, "B_BFu9ll_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu8s  {
  bool v1;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 B_BFu9ll_BFu8s) C1{ Fc FL:9 Fs:8}



static void Test_B_BFu9ll_BFu8s()
{
  {
    init_simple_test("B_BFu9ll_BFu8s");
    static B_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, 1, "B_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 1, 8, hide_ull(1LL<<7), "B_BFu9ll_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu8s(Test_B_BFu9ll_BFu8s, "B_BFu9ll_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu9i  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 B_BFu9ll_BFu9i) C1{ Fc FL:9 Fi:9}



static void Test_B_BFu9ll_BFu9i()
{
  {
    init_simple_test("B_BFu9ll_BFu9i");
    static B_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "B_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu9i(Test_B_BFu9ll_BFu9i, "B_BFu9ll_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu9ll  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 B_BFu9ll_BFu9ll) C1{ Fc FL:9 FL:9}



static void Test_B_BFu9ll_BFu9ll()
{
  {
    init_simple_test("B_BFu9ll_BFu9ll");
    static B_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "B_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu9ll(Test_B_BFu9ll_BFu9ll, "B_BFu9ll_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_BFu9s  {
  bool v1;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 B_BFu9ll_BFu9s) C1{ Fc FL:9 Fs:9}



static void Test_B_BFu9ll_BFu9s()
{
  {
    init_simple_test("B_BFu9ll_BFu9s");
    static B_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, 1, "B_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 1, 9, hide_ull(1LL<<8), "B_BFu9ll_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_BFu9s(Test_B_BFu9ll_BFu9s, "B_BFu9ll_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_C  {
  bool v1;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 B_BFu9ll_C) C1{ Fc FL:9 Fc}



static void Test_B_BFu9ll_C()
{
  {
    init_simple_test("B_BFu9ll_C");
    static B_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_C)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_C.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_C");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_C");
    check_field_offset(lv, v3, 3, "B_BFu9ll_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_C(Test_B_BFu9ll_C, "B_BFu9ll_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_D  {
  bool v1;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 B_BFu9ll_D) C1{ Fc FL:9 FL}



static void Test_B_BFu9ll_D()
{
  {
    init_simple_test("B_BFu9ll_D");
    static B_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_D)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_D.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_D");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9ll_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_D(Test_B_BFu9ll_D, "B_BFu9ll_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_F  {
  bool v1;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 B_BFu9ll_F) C1{ Fc FL:9 Fi}



static void Test_B_BFu9ll_F()
{
  {
    init_simple_test("B_BFu9ll_F");
    static B_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_F)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_F.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_F");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_F");
    check_field_offset(lv, v3, 4, "B_BFu9ll_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_F(Test_B_BFu9ll_F, "B_BFu9ll_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_I  {
  bool v1;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 B_BFu9ll_I) C1{ Fc FL:9 Fi}



static void Test_B_BFu9ll_I()
{
  {
    init_simple_test("B_BFu9ll_I");
    static B_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_I)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_I.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_I");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_I");
    check_field_offset(lv, v3, 4, "B_BFu9ll_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_I(Test_B_BFu9ll_I, "B_BFu9ll_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_Ip  {
  bool v1;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 B_BFu9ll_Ip) C1{ Fc FL:9 Fp}



static void Test_B_BFu9ll_Ip()
{
  {
    init_simple_test("B_BFu9ll_Ip");
    static B_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_Ip.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9ll_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_Ip(Test_B_BFu9ll_Ip, "B_BFu9ll_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_L  {
  bool v1;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 B_BFu9ll_L) C1{ Fc FL:9 FL}



static void Test_B_BFu9ll_L()
{
  {
    init_simple_test("B_BFu9ll_L");
    static B_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_L)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_L.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_L");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9ll_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_L(Test_B_BFu9ll_L, "B_BFu9ll_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_S  {
  bool v1;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 B_BFu9ll_S) C1{ Fc FL:9 Fs}



static void Test_B_BFu9ll_S()
{
  {
    init_simple_test("B_BFu9ll_S");
    static B_BFu9ll_S lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_S)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_S.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_S");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_S");
    check_field_offset(lv, v3, 4, "B_BFu9ll_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_S(Test_B_BFu9ll_S, "B_BFu9ll_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_Uc  {
  bool v1;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 B_BFu9ll_Uc) C1{ Fc FL:9 Fc}



static void Test_B_BFu9ll_Uc()
{
  {
    init_simple_test("B_BFu9ll_Uc");
    static B_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_Uc.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_Uc");
    check_field_offset(lv, v3, 3, "B_BFu9ll_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_Uc(Test_B_BFu9ll_Uc, "B_BFu9ll_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_Ui  {
  bool v1;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 B_BFu9ll_Ui) C1{ Fc FL:9 Fi}



static void Test_B_BFu9ll_Ui()
{
  {
    init_simple_test("B_BFu9ll_Ui");
    static B_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_Ui.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "B_BFu9ll_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_Ui(Test_B_BFu9ll_Ui, "B_BFu9ll_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_Ul  {
  bool v1;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 B_BFu9ll_Ul) C1{ Fc FL:9 FL}



static void Test_B_BFu9ll_Ul()
{
  {
    init_simple_test("B_BFu9ll_Ul");
    static B_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_Ul.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9ll_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_Ul(Test_B_BFu9ll_Ul, "B_BFu9ll_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_Us  {
  bool v1;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 B_BFu9ll_Us) C1{ Fc FL:9 Fs}



static void Test_B_BFu9ll_Us()
{
  {
    init_simple_test("B_BFu9ll_Us");
    static B_BFu9ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_Us)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_Us.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_Us");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_Us");
    check_field_offset(lv, v3, 4, "B_BFu9ll_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_Us(Test_B_BFu9ll_Us, "B_BFu9ll_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9ll_Vp  {
  bool v1;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 B_BFu9ll_Vp) C1{ Fc FL:9 Fp}



static void Test_B_BFu9ll_Vp()
{
  {
    init_simple_test("B_BFu9ll_Vp");
    static B_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9ll_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu9ll_Vp.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "B_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "B_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9ll_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9ll_Vp(Test_B_BFu9ll_Vp, "B_BFu9ll_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s  {
  bool v1;
  unsigned short v2:9;
};
//SIG(1 B_BFu9s) C1{ Fc Fs:9}



static void Test_B_BFu9s()
{
  {
    init_simple_test("B_BFu9s");
    static B_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu9s(Test_B_BFu9s, "B_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_B  {
  bool v1;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 B_BFu9s_B) C1{ Fc Fs:9 Fc}



static void Test_B_BFu9s_B()
{
  {
    init_simple_test("B_BFu9s_B");
    static B_BFu9s_B lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_B)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_B)");
    check_field_offset(lv, v1, 0, "B_BFu9s_B.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_B");
    check_field_offset(lv, v3, 4, "B_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_B(Test_B_BFu9s_B, "B_BFu9s_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu15i  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 B_BFu9s_BFu15i) C1{ Fc Fs:9 Fi:15}



static void Test_B_BFu9s_BFu15i()
{
  {
    init_simple_test("B_BFu9s_BFu15i");
    static B_BFu9s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_BFu15i)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu9s_BFu15i");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu15i(Test_B_BFu9s_BFu15i, "B_BFu9s_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu15ll  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 B_BFu9s_BFu15ll) C1{ Fc Fs:9 FL:15}



static void Test_B_BFu9s_BFu15ll()
{
  {
    init_simple_test("B_BFu9s_BFu15ll");
    static B_BFu9s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "B_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "B_BFu9s_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu15ll(Test_B_BFu9s_BFu15ll, "B_BFu9s_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu15s  {
  bool v1;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 B_BFu9s_BFu15s) C1{ Fc Fs:9 Fs:15}



static void Test_B_BFu9s_BFu15s()
{
  {
    init_simple_test("B_BFu9s_BFu15s");
    static B_BFu9s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_BFu15s)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_BFu9s_BFu15s");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu15s(Test_B_BFu9s_BFu15s, "B_BFu9s_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu16i  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 B_BFu9s_BFu16i) C1{ Fc Fs:9 Fi:16}



static void Test_B_BFu9s_BFu16i()
{
  {
    init_simple_test("B_BFu9s_BFu16i");
    static B_BFu9s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_BFu16i)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu9s_BFu16i");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu16i(Test_B_BFu9s_BFu16i, "B_BFu9s_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu16ll  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 B_BFu9s_BFu16ll) C1{ Fc Fs:9 FL:16}



static void Test_B_BFu9s_BFu16ll()
{
  {
    init_simple_test("B_BFu9s_BFu16ll");
    static B_BFu9s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "B_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "B_BFu9s_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu16ll(Test_B_BFu9s_BFu16ll, "B_BFu9s_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu16s  {
  bool v1;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 B_BFu9s_BFu16s) C1{ Fc Fs:9 Fs:16}



static void Test_B_BFu9s_BFu16s()
{
  {
    init_simple_test("B_BFu9s_BFu16s");
    static B_BFu9s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_BFu16s)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_BFu9s_BFu16s");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu16s(Test_B_BFu9s_BFu16s, "B_BFu9s_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu17i  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 B_BFu9s_BFu17i) C1{ Fc Fs:9 Fi:17}



static void Test_B_BFu9s_BFu17i()
{
  {
    init_simple_test("B_BFu9s_BFu17i");
    static B_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_BFu17i)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu17i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_BFu9s_BFu17i");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu17i(Test_B_BFu9s_BFu17i, "B_BFu9s_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu17ll  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 B_BFu9s_BFu17ll) C1{ Fc Fs:9 FL:17}



static void Test_B_BFu9s_BFu17ll()
{
  {
    init_simple_test("B_BFu9s_BFu17ll");
    static B_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "B_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "B_BFu9s_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu17ll(Test_B_BFu9s_BFu17ll, "B_BFu9s_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu1c  {
  bool v1;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 B_BFu9s_BFu1c) C1{ Fc Fs:9 Fc:1}



static void Test_B_BFu9s_BFu1c()
{
  {
    init_simple_test("B_BFu9s_BFu1c");
    static B_BFu9s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_BFu1c)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu9s_BFu1c");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu1c(Test_B_BFu9s_BFu1c, "B_BFu9s_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu1i  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 B_BFu9s_BFu1i) C1{ Fc Fs:9 Fi:1}



static void Test_B_BFu9s_BFu1i()
{
  {
    init_simple_test("B_BFu9s_BFu1i");
    static B_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_BFu1i)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu9s_BFu1i");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu1i(Test_B_BFu9s_BFu1i, "B_BFu9s_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu1ll  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 B_BFu9s_BFu1ll) C1{ Fc Fs:9 FL:1}



static void Test_B_BFu9s_BFu1ll()
{
  {
    init_simple_test("B_BFu9s_BFu1ll");
    static B_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu9s_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu1ll(Test_B_BFu9s_BFu1ll, "B_BFu9s_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu1s  {
  bool v1;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 B_BFu9s_BFu1s) C1{ Fc Fs:9 Fs:1}



static void Test_B_BFu9s_BFu1s()
{
  {
    init_simple_test("B_BFu9s_BFu1s");
    static B_BFu9s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_BFu1s)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "B_BFu9s_BFu1s");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu1s(Test_B_BFu9s_BFu1s, "B_BFu9s_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu31i  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 B_BFu9s_BFu31i) C1{ Fc Fs:9 Fi:31}



static void Test_B_BFu9s_BFu31i()
{
  {
    init_simple_test("B_BFu9s_BFu31i");
    static B_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_BFu31i)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu31i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_BFu9s_BFu31i");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu31i(Test_B_BFu9s_BFu31i, "B_BFu9s_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu31ll  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 B_BFu9s_BFu31ll) C1{ Fc Fs:9 FL:31}



static void Test_B_BFu9s_BFu31ll()
{
  {
    init_simple_test("B_BFu9s_BFu31ll");
    static B_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "B_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "B_BFu9s_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu31ll(Test_B_BFu9s_BFu31ll, "B_BFu9s_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu32i  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 B_BFu9s_BFu32i) C1{ Fc Fs:9 Fi:32}



static void Test_B_BFu9s_BFu32i()
{
  {
    init_simple_test("B_BFu9s_BFu32i");
    static B_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_BFu32i)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu32i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_BFu9s_BFu32i");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu32i(Test_B_BFu9s_BFu32i, "B_BFu9s_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu32ll  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 B_BFu9s_BFu32ll) C1{ Fc Fs:9 FL:32}



static void Test_B_BFu9s_BFu32ll()
{
  {
    init_simple_test("B_BFu9s_BFu32ll");
    static B_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "B_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "B_BFu9s_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu32ll(Test_B_BFu9s_BFu32ll, "B_BFu9s_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu33  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 B_BFu9s_BFu33) C1{ Fc Fs:9 FL:33}



static void Test_B_BFu9s_BFu33()
{
  {
    init_simple_test("B_BFu9s_BFu33");
    static B_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu33)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "B_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "B_BFu9s_BFu33");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu33(Test_B_BFu9s_BFu33, "B_BFu9s_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu7c  {
  bool v1;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 B_BFu9s_BFu7c) C1{ Fc Fs:9 Fc:7}



static void Test_B_BFu9s_BFu7c()
{
  {
    init_simple_test("B_BFu9s_BFu7c");
    static B_BFu9s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_BFu7c)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu9s_BFu7c");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu7c(Test_B_BFu9s_BFu7c, "B_BFu9s_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu7i  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 B_BFu9s_BFu7i) C1{ Fc Fs:9 Fi:7}



static void Test_B_BFu9s_BFu7i()
{
  {
    init_simple_test("B_BFu9s_BFu7i");
    static B_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_BFu7i)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu9s_BFu7i");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu7i(Test_B_BFu9s_BFu7i, "B_BFu9s_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu7ll  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 B_BFu9s_BFu7ll) C1{ Fc Fs:9 FL:7}



static void Test_B_BFu9s_BFu7ll()
{
  {
    init_simple_test("B_BFu9s_BFu7ll");
    static B_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu9s_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu7ll(Test_B_BFu9s_BFu7ll, "B_BFu9s_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu7s  {
  bool v1;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 B_BFu9s_BFu7s) C1{ Fc Fs:9 Fs:7}



static void Test_B_BFu9s_BFu7s()
{
  {
    init_simple_test("B_BFu9s_BFu7s");
    static B_BFu9s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_BFu9s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_BFu7s)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "B_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "B_BFu9s_BFu7s");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu7s(Test_B_BFu9s_BFu7s, "B_BFu9s_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu8c  {
  bool v1;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 B_BFu9s_BFu8c) C1{ Fc Fs:9 Fc:8}



static void Test_B_BFu9s_BFu8c()
{
  {
    init_simple_test("B_BFu9s_BFu8c");
    static B_BFu9s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_BFu8c)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu9s_BFu8c");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu8c(Test_B_BFu9s_BFu8c, "B_BFu9s_BFu8c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu8i  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 B_BFu9s_BFu8i) C1{ Fc Fs:9 Fi:8}



static void Test_B_BFu9s_BFu8i()
{
  {
    init_simple_test("B_BFu9s_BFu8i");
    static B_BFu9s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_BFu8i)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu9s_BFu8i");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu8i(Test_B_BFu9s_BFu8i, "B_BFu9s_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu8ll  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 B_BFu9s_BFu8ll) C1{ Fc Fs:9 FL:8}



static void Test_B_BFu9s_BFu8ll()
{
  {
    init_simple_test("B_BFu9s_BFu8ll");
    static B_BFu9s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "B_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "B_BFu9s_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu8ll(Test_B_BFu9s_BFu8ll, "B_BFu9s_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu8s  {
  bool v1;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 B_BFu9s_BFu8s) C1{ Fc Fs:9 Fs:8}



static void Test_B_BFu9s_BFu8s()
{
  {
    init_simple_test("B_BFu9s_BFu8s");
    static B_BFu9s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_BFu8s)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_BFu9s_BFu8s");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu8s(Test_B_BFu9s_BFu8s, "B_BFu9s_BFu8s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu9i  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 B_BFu9s_BFu9i) C1{ Fc Fs:9 Fi:9}



static void Test_B_BFu9s_BFu9i()
{
  {
    init_simple_test("B_BFu9s_BFu9i");
    static B_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_BFu9i)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu9i");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu9i(Test_B_BFu9s_BFu9i, "B_BFu9s_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu9ll  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 B_BFu9s_BFu9ll) C1{ Fc Fs:9 FL:9}



static void Test_B_BFu9s_BFu9ll()
{
  {
    init_simple_test("B_BFu9s_BFu9ll");
    static B_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "B_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "B_BFu9s_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu9ll(Test_B_BFu9s_BFu9ll, "B_BFu9s_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_BFu9s  {
  bool v1;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 B_BFu9s_BFu9s) C1{ Fc Fs:9 Fs:9}



static void Test_B_BFu9s_BFu9s()
{
  {
    init_simple_test("B_BFu9s_BFu9s");
    static B_BFu9s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_BFu9s)");
    check_field_offset(lv, v1, 0, "B_BFu9s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_BFu9s_BFu9s");
  }
}
static Arrange_To_Call_Me vB_BFu9s_BFu9s(Test_B_BFu9s_BFu9s, "B_BFu9s_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_C  {
  bool v1;
  unsigned short v2:9;
  char v3;
};
//SIG(1 B_BFu9s_C) C1{ Fc Fs:9 Fc}



static void Test_B_BFu9s_C()
{
  {
    init_simple_test("B_BFu9s_C");
    static B_BFu9s_C lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_C)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_C)");
    check_field_offset(lv, v1, 0, "B_BFu9s_C.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_C");
    check_field_offset(lv, v3, 4, "B_BFu9s_C.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_C(Test_B_BFu9s_C, "B_BFu9s_C", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_D  {
  bool v1;
  unsigned short v2:9;
  double v3;
};
//SIG(1 B_BFu9s_D) C1{ Fc Fs:9 FL}



static void Test_B_BFu9s_D()
{
  {
    init_simple_test("B_BFu9s_D");
    static B_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_D)");
    check_field_offset(lv, v1, 0, "B_BFu9s_D.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9s_D.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_D(Test_B_BFu9s_D, "B_BFu9s_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_F  {
  bool v1;
  unsigned short v2:9;
  float v3;
};
//SIG(1 B_BFu9s_F) C1{ Fc Fs:9 Fi}



static void Test_B_BFu9s_F()
{
  {
    init_simple_test("B_BFu9s_F");
    static B_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_F)");
    check_field_offset(lv, v1, 0, "B_BFu9s_F.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_F");
    check_field_offset(lv, v3, 4, "B_BFu9s_F.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_F(Test_B_BFu9s_F, "B_BFu9s_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_I  {
  bool v1;
  unsigned short v2:9;
  int v3;
};
//SIG(1 B_BFu9s_I) C1{ Fc Fs:9 Fi}



static void Test_B_BFu9s_I()
{
  {
    init_simple_test("B_BFu9s_I");
    static B_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_I)");
    check_field_offset(lv, v1, 0, "B_BFu9s_I.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_I");
    check_field_offset(lv, v3, 4, "B_BFu9s_I.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_I(Test_B_BFu9s_I, "B_BFu9s_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_Ip  {
  bool v1;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 B_BFu9s_Ip) C1{ Fc Fs:9 Fp}



static void Test_B_BFu9s_Ip()
{
  {
    init_simple_test("B_BFu9s_Ip");
    static B_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_Ip)");
    check_field_offset(lv, v1, 0, "B_BFu9s_Ip.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9s_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_Ip(Test_B_BFu9s_Ip, "B_BFu9s_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_L  {
  bool v1;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 B_BFu9s_L) C1{ Fc Fs:9 FL}



static void Test_B_BFu9s_L()
{
  {
    init_simple_test("B_BFu9s_L");
    static B_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_L)");
    check_field_offset(lv, v1, 0, "B_BFu9s_L.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9s_L.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_L(Test_B_BFu9s_L, "B_BFu9s_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_S  {
  bool v1;
  unsigned short v2:9;
  short v3;
};
//SIG(1 B_BFu9s_S) C1{ Fc Fs:9 Fs}



static void Test_B_BFu9s_S()
{
  {
    init_simple_test("B_BFu9s_S");
    static B_BFu9s_S lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_S)");
    check_field_offset(lv, v1, 0, "B_BFu9s_S.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_S");
    check_field_offset(lv, v3, 4, "B_BFu9s_S.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_S(Test_B_BFu9s_S, "B_BFu9s_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_Uc  {
  bool v1;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 B_BFu9s_Uc) C1{ Fc Fs:9 Fc}



static void Test_B_BFu9s_Uc()
{
  {
    init_simple_test("B_BFu9s_Uc");
    static B_BFu9s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_Uc)");
    check_field_offset(lv, v1, 0, "B_BFu9s_Uc.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_Uc");
    check_field_offset(lv, v3, 4, "B_BFu9s_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_Uc(Test_B_BFu9s_Uc, "B_BFu9s_Uc", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_Ui  {
  bool v1;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 B_BFu9s_Ui) C1{ Fc Fs:9 Fi}



static void Test_B_BFu9s_Ui()
{
  {
    init_simple_test("B_BFu9s_Ui");
    static B_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_BFu9s_Ui)");
    check_field_offset(lv, v1, 0, "B_BFu9s_Ui.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "B_BFu9s_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_Ui(Test_B_BFu9s_Ui, "B_BFu9s_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_Ul  {
  bool v1;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 B_BFu9s_Ul) C1{ Fc Fs:9 FL}



static void Test_B_BFu9s_Ul()
{
  {
    init_simple_test("B_BFu9s_Ul");
    static B_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_Ul)");
    check_field_offset(lv, v1, 0, "B_BFu9s_Ul.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9s_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_Ul(Test_B_BFu9s_Ul, "B_BFu9s_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_Us  {
  bool v1;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 B_BFu9s_Us) C1{ Fc Fs:9 Fs}



static void Test_B_BFu9s_Us()
{
  {
    init_simple_test("B_BFu9s_Us");
    static B_BFu9s_Us lv;
    check2(sizeof(lv), 6, "sizeof(B_BFu9s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_BFu9s_Us)");
    check_field_offset(lv, v1, 0, "B_BFu9s_Us.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_Us");
    check_field_offset(lv, v3, 4, "B_BFu9s_Us.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_Us(Test_B_BFu9s_Us, "B_BFu9s_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_BFu9s_Vp  {
  bool v1;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 B_BFu9s_Vp) C1{ Fc Fs:9 Fp}



static void Test_B_BFu9s_Vp()
{
  {
    init_simple_test("B_BFu9s_Vp");
    static B_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_BFu9s_Vp)");
    check_field_offset(lv, v1, 0, "B_BFu9s_Vp.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "B_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "B_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_BFu9s_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_BFu9s_Vp(Test_B_BFu9s_Vp, "B_BFu9s_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C  {
  bool v1;
  char v2;
};
//SIG(1 B_C) C1{ Fc[2]}



static void Test_B_C()
{
  {
    init_simple_test("B_C");
    B_C lv;
    check2(sizeof(lv), 2, "sizeof(B_C)");
    check2(__alignof__(lv), 1, "__alignof__(B_C)");
    check_field_offset(lv, v1, 0, "B_C.v1");
    check_field_offset(lv, v2, 1, "B_C.v2");
  }
}
static Arrange_To_Call_Me vB_C(Test_B_C, "B_C", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_B  {
  bool v1;
  char v2;
  bool v3;
};
//SIG(1 B_C_B) C1{ Fc[3]}



static void Test_B_C_B()
{
  {
    init_simple_test("B_C_B");
    B_C_B lv;
    check2(sizeof(lv), 3, "sizeof(B_C_B)");
    check2(__alignof__(lv), 1, "__alignof__(B_C_B)");
    check_field_offset(lv, v1, 0, "B_C_B.v1");
    check_field_offset(lv, v2, 1, "B_C_B.v2");
    check_field_offset(lv, v3, 2, "B_C_B.v3");
  }
}
static Arrange_To_Call_Me vB_C_B(Test_B_C_B, "B_C_B", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu15i  {
  bool v1;
  char v2;
  unsigned int v3:15;
};
//SIG(1 B_C_BFu15i) C1{ Fc[2] Fi:15}



static void Test_B_C_BFu15i()
{
  {
    init_simple_test("B_C_BFu15i");
    static B_C_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_BFu15i)");
    check_field_offset(lv, v1, 0, "B_C_BFu15i.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_C_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_C_BFu15i");
  }
}
static Arrange_To_Call_Me vB_C_BFu15i(Test_B_C_BFu15i, "B_C_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu15ll  {
  bool v1;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 B_C_BFu15ll) C1{ Fc[2] FL:15}



static void Test_B_C_BFu15ll()
{
  {
    init_simple_test("B_C_BFu15ll");
    static B_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_C_BFu15ll.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_C_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_C_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_C_BFu15ll(Test_B_C_BFu15ll, "B_C_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu15s  {
  bool v1;
  char v2;
  unsigned short v3:15;
};
//SIG(1 B_C_BFu15s) C1{ Fc[2] Fs:15}



static void Test_B_C_BFu15s()
{
  {
    init_simple_test("B_C_BFu15s");
    static B_C_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_C_BFu15s)");
    check_field_offset(lv, v1, 0, "B_C_BFu15s.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_C_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_C_BFu15s");
  }
}
static Arrange_To_Call_Me vB_C_BFu15s(Test_B_C_BFu15s, "B_C_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu16i  {
  bool v1;
  char v2;
  unsigned int v3:16;
};
//SIG(1 B_C_BFu16i) C1{ Fc[2] Fi:16}



static void Test_B_C_BFu16i()
{
  {
    init_simple_test("B_C_BFu16i");
    static B_C_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_BFu16i)");
    check_field_offset(lv, v1, 0, "B_C_BFu16i.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_C_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_C_BFu16i");
  }
}
static Arrange_To_Call_Me vB_C_BFu16i(Test_B_C_BFu16i, "B_C_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu16ll  {
  bool v1;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 B_C_BFu16ll) C1{ Fc[2] FL:16}



static void Test_B_C_BFu16ll()
{
  {
    init_simple_test("B_C_BFu16ll");
    static B_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_C_BFu16ll.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_C_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_C_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_C_BFu16ll(Test_B_C_BFu16ll, "B_C_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu16s  {
  bool v1;
  char v2;
  unsigned short v3:16;
};
//SIG(1 B_C_BFu16s) C1{ Fc[2] Fs:16}



static void Test_B_C_BFu16s()
{
  {
    init_simple_test("B_C_BFu16s");
    static B_C_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_C_BFu16s)");
    check_field_offset(lv, v1, 0, "B_C_BFu16s.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_C_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_C_BFu16s");
  }
}
static Arrange_To_Call_Me vB_C_BFu16s(Test_B_C_BFu16s, "B_C_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu17i  {
  bool v1;
  char v2;
  unsigned int v3:17;
};
//SIG(1 B_C_BFu17i) C1{ Fc[2] Fi:17}



static void Test_B_C_BFu17i()
{
  {
    init_simple_test("B_C_BFu17i");
    static B_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_BFu17i)");
    check_field_offset(lv, v1, 0, "B_C_BFu17i.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_C_BFu17i");
  }
}
static Arrange_To_Call_Me vB_C_BFu17i(Test_B_C_BFu17i, "B_C_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu17ll  {
  bool v1;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 B_C_BFu17ll) C1{ Fc[2] FL:17}



static void Test_B_C_BFu17ll()
{
  {
    init_simple_test("B_C_BFu17ll");
    static B_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_C_BFu17ll.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "B_C_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "B_C_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_C_BFu17ll(Test_B_C_BFu17ll, "B_C_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu1c  {
  bool v1;
  char v2;
  unsigned char v3:1;
};
//SIG(1 B_C_BFu1c) C1{ Fc[2] Fc:1}



static void Test_B_C_BFu1c()
{
  {
    init_simple_test("B_C_BFu1c");
    static B_C_BFu1c lv;
    check2(sizeof(lv), 3, "sizeof(B_C_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(B_C_BFu1c)");
    check_field_offset(lv, v1, 0, "B_C_BFu1c.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_C_BFu1c");
  }
}
static Arrange_To_Call_Me vB_C_BFu1c(Test_B_C_BFu1c, "B_C_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu1i  {
  bool v1;
  char v2;
  unsigned int v3:1;
};
//SIG(1 B_C_BFu1i) C1{ Fc[2] Fi:1}



static void Test_B_C_BFu1i()
{
  {
    init_simple_test("B_C_BFu1i");
    static B_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_BFu1i)");
    check_field_offset(lv, v1, 0, "B_C_BFu1i.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_C_BFu1i");
  }
}
static Arrange_To_Call_Me vB_C_BFu1i(Test_B_C_BFu1i, "B_C_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu1ll  {
  bool v1;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 B_C_BFu1ll) C1{ Fc[2] FL:1}



static void Test_B_C_BFu1ll()
{
  {
    init_simple_test("B_C_BFu1ll");
    static B_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_C_BFu1ll.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_C_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_C_BFu1ll(Test_B_C_BFu1ll, "B_C_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu1s  {
  bool v1;
  char v2;
  unsigned short v3:1;
};
//SIG(1 B_C_BFu1s) C1{ Fc[2] Fs:1}



static void Test_B_C_BFu1s()
{
  {
    init_simple_test("B_C_BFu1s");
    static B_C_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_C_BFu1s)");
    check_field_offset(lv, v1, 0, "B_C_BFu1s.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_C_BFu1s");
  }
}
static Arrange_To_Call_Me vB_C_BFu1s(Test_B_C_BFu1s, "B_C_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu31i  {
  bool v1;
  char v2;
  unsigned int v3:31;
};
//SIG(1 B_C_BFu31i) C1{ Fc[2] Fi:31}



static void Test_B_C_BFu31i()
{
  {
    init_simple_test("B_C_BFu31i");
    static B_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_BFu31i)");
    check_field_offset(lv, v1, 0, "B_C_BFu31i.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_C_BFu31i");
  }
}
static Arrange_To_Call_Me vB_C_BFu31i(Test_B_C_BFu31i, "B_C_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu31ll  {
  bool v1;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 B_C_BFu31ll) C1{ Fc[2] FL:31}



static void Test_B_C_BFu31ll()
{
  {
    init_simple_test("B_C_BFu31ll");
    static B_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_C_BFu31ll.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "B_C_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "B_C_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_C_BFu31ll(Test_B_C_BFu31ll, "B_C_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu32i  {
  bool v1;
  char v2;
  unsigned int v3:32;
};
//SIG(1 B_C_BFu32i) C1{ Fc[2] Fi:32}



static void Test_B_C_BFu32i()
{
  {
    init_simple_test("B_C_BFu32i");
    static B_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_BFu32i)");
    check_field_offset(lv, v1, 0, "B_C_BFu32i.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_C_BFu32i");
  }
}
static Arrange_To_Call_Me vB_C_BFu32i(Test_B_C_BFu32i, "B_C_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu32ll  {
  bool v1;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 B_C_BFu32ll) C1{ Fc[2] FL:32}



static void Test_B_C_BFu32ll()
{
  {
    init_simple_test("B_C_BFu32ll");
    static B_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_C_BFu32ll.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "B_C_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "B_C_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_C_BFu32ll(Test_B_C_BFu32ll, "B_C_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu33  {
  bool v1;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 B_C_BFu33) C1{ Fc[2] FL:33}



static void Test_B_C_BFu33()
{
  {
    init_simple_test("B_C_BFu33");
    static B_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu33)");
    check_field_offset(lv, v1, 0, "B_C_BFu33.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "B_C_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "B_C_BFu33");
  }
}
static Arrange_To_Call_Me vB_C_BFu33(Test_B_C_BFu33, "B_C_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu7c  {
  bool v1;
  char v2;
  unsigned char v3:7;
};
//SIG(1 B_C_BFu7c) C1{ Fc[2] Fc:7}



static void Test_B_C_BFu7c()
{
  {
    init_simple_test("B_C_BFu7c");
    static B_C_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(B_C_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(B_C_BFu7c)");
    check_field_offset(lv, v1, 0, "B_C_BFu7c.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_C_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_C_BFu7c");
  }
}
static Arrange_To_Call_Me vB_C_BFu7c(Test_B_C_BFu7c, "B_C_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu7i  {
  bool v1;
  char v2;
  unsigned int v3:7;
};
//SIG(1 B_C_BFu7i) C1{ Fc[2] Fi:7}



static void Test_B_C_BFu7i()
{
  {
    init_simple_test("B_C_BFu7i");
    static B_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_BFu7i)");
    check_field_offset(lv, v1, 0, "B_C_BFu7i.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_C_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_C_BFu7i");
  }
}
static Arrange_To_Call_Me vB_C_BFu7i(Test_B_C_BFu7i, "B_C_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu7ll  {
  bool v1;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 B_C_BFu7ll) C1{ Fc[2] FL:7}



static void Test_B_C_BFu7ll()
{
  {
    init_simple_test("B_C_BFu7ll");
    static B_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_C_BFu7ll.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_C_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_C_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_C_BFu7ll(Test_B_C_BFu7ll, "B_C_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu7s  {
  bool v1;
  char v2;
  unsigned short v3:7;
};
//SIG(1 B_C_BFu7s) C1{ Fc[2] Fs:7}



static void Test_B_C_BFu7s()
{
  {
    init_simple_test("B_C_BFu7s");
    static B_C_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_C_BFu7s)");
    check_field_offset(lv, v1, 0, "B_C_BFu7s.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_C_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_C_BFu7s");
  }
}
static Arrange_To_Call_Me vB_C_BFu7s(Test_B_C_BFu7s, "B_C_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu8c  {
  bool v1;
  char v2;
  unsigned char v3:8;
};
//SIG(1 B_C_BFu8c) C1{ Fc[2] Fc:8}



static void Test_B_C_BFu8c()
{
  {
    init_simple_test("B_C_BFu8c");
    static B_C_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(B_C_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(B_C_BFu8c)");
    check_field_offset(lv, v1, 0, "B_C_BFu8c.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_C_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_C_BFu8c");
  }
}
static Arrange_To_Call_Me vB_C_BFu8c(Test_B_C_BFu8c, "B_C_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu8i  {
  bool v1;
  char v2;
  unsigned int v3:8;
};
//SIG(1 B_C_BFu8i) C1{ Fc[2] Fi:8}



static void Test_B_C_BFu8i()
{
  {
    init_simple_test("B_C_BFu8i");
    static B_C_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_BFu8i)");
    check_field_offset(lv, v1, 0, "B_C_BFu8i.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_C_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_C_BFu8i");
  }
}
static Arrange_To_Call_Me vB_C_BFu8i(Test_B_C_BFu8i, "B_C_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu8ll  {
  bool v1;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 B_C_BFu8ll) C1{ Fc[2] FL:8}



static void Test_B_C_BFu8ll()
{
  {
    init_simple_test("B_C_BFu8ll");
    static B_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_C_BFu8ll.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_C_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_C_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_C_BFu8ll(Test_B_C_BFu8ll, "B_C_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu8s  {
  bool v1;
  char v2;
  unsigned short v3:8;
};
//SIG(1 B_C_BFu8s) C1{ Fc[2] Fs:8}



static void Test_B_C_BFu8s()
{
  {
    init_simple_test("B_C_BFu8s");
    static B_C_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_C_BFu8s)");
    check_field_offset(lv, v1, 0, "B_C_BFu8s.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_C_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_C_BFu8s");
  }
}
static Arrange_To_Call_Me vB_C_BFu8s(Test_B_C_BFu8s, "B_C_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu9i  {
  bool v1;
  char v2;
  unsigned int v3:9;
};
//SIG(1 B_C_BFu9i) C1{ Fc[2] Fi:9}



static void Test_B_C_BFu9i()
{
  {
    init_simple_test("B_C_BFu9i");
    static B_C_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_BFu9i)");
    check_field_offset(lv, v1, 0, "B_C_BFu9i.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_C_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_C_BFu9i");
  }
}
static Arrange_To_Call_Me vB_C_BFu9i(Test_B_C_BFu9i, "B_C_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu9ll  {
  bool v1;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 B_C_BFu9ll) C1{ Fc[2] FL:9}



static void Test_B_C_BFu9ll()
{
  {
    init_simple_test("B_C_BFu9ll");
    static B_C_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_C_BFu9ll.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_C_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_C_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_C_BFu9ll(Test_B_C_BFu9ll, "B_C_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_BFu9s  {
  bool v1;
  char v2;
  unsigned short v3:9;
};
//SIG(1 B_C_BFu9s) C1{ Fc[2] Fs:9}



static void Test_B_C_BFu9s()
{
  {
    init_simple_test("B_C_BFu9s");
    static B_C_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_C_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_C_BFu9s)");
    check_field_offset(lv, v1, 0, "B_C_BFu9s.v1");
    check_field_offset(lv, v2, 1, "B_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_C_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_C_BFu9s");
  }
}
static Arrange_To_Call_Me vB_C_BFu9s(Test_B_C_BFu9s, "B_C_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_C  {
  bool v1;
  char v2;
  char v3;
};
//SIG(1 B_C_C) C1{ Fc[3]}



static void Test_B_C_C()
{
  {
    init_simple_test("B_C_C");
    B_C_C lv;
    check2(sizeof(lv), 3, "sizeof(B_C_C)");
    check2(__alignof__(lv), 1, "__alignof__(B_C_C)");
    check_field_offset(lv, v1, 0, "B_C_C.v1");
    check_field_offset(lv, v2, 1, "B_C_C.v2");
    check_field_offset(lv, v3, 2, "B_C_C.v3");
  }
}
static Arrange_To_Call_Me vB_C_C(Test_B_C_C, "B_C_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_D  {
  bool v1;
  char v2;
  double v3;
};
//SIG(1 B_C_D) C1{ Fc[2] FL}



static void Test_B_C_D()
{
  {
    init_simple_test("B_C_D");
    B_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_D)");
    check_field_offset(lv, v1, 0, "B_C_D.v1");
    check_field_offset(lv, v2, 1, "B_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_C_D.v3");
  }
}
static Arrange_To_Call_Me vB_C_D(Test_B_C_D, "B_C_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_F  {
  bool v1;
  char v2;
  float v3;
};
//SIG(1 B_C_F) C1{ Fc[2] Fi}



static void Test_B_C_F()
{
  {
    init_simple_test("B_C_F");
    B_C_F lv;
    check2(sizeof(lv), 8, "sizeof(B_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_F)");
    check_field_offset(lv, v1, 0, "B_C_F.v1");
    check_field_offset(lv, v2, 1, "B_C_F.v2");
    check_field_offset(lv, v3, 4, "B_C_F.v3");
  }
}
static Arrange_To_Call_Me vB_C_F(Test_B_C_F, "B_C_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_I  {
  bool v1;
  char v2;
  int v3;
};
//SIG(1 B_C_I) C1{ Fc[2] Fi}



static void Test_B_C_I()
{
  {
    init_simple_test("B_C_I");
    B_C_I lv;
    check2(sizeof(lv), 8, "sizeof(B_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_I)");
    check_field_offset(lv, v1, 0, "B_C_I.v1");
    check_field_offset(lv, v2, 1, "B_C_I.v2");
    check_field_offset(lv, v3, 4, "B_C_I.v3");
  }
}
static Arrange_To_Call_Me vB_C_I(Test_B_C_I, "B_C_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_Ip  {
  bool v1;
  char v2;
  int *v3;
};
//SIG(1 B_C_Ip) C1{ Fc[2] Fp}



static void Test_B_C_Ip()
{
  {
    init_simple_test("B_C_Ip");
    B_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_Ip)");
    check_field_offset(lv, v1, 0, "B_C_Ip.v1");
    check_field_offset(lv, v2, 1, "B_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_C_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_C_Ip(Test_B_C_Ip, "B_C_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_L  {
  bool v1;
  char v2;
  __tsi64 v3;
};
//SIG(1 B_C_L) C1{ Fc[2] FL}



static void Test_B_C_L()
{
  {
    init_simple_test("B_C_L");
    B_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_L)");
    check_field_offset(lv, v1, 0, "B_C_L.v1");
    check_field_offset(lv, v2, 1, "B_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_C_L.v3");
  }
}
static Arrange_To_Call_Me vB_C_L(Test_B_C_L, "B_C_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_S  {
  bool v1;
  char v2;
  short v3;
};
//SIG(1 B_C_S) C1{ Fc[2] Fs}



static void Test_B_C_S()
{
  {
    init_simple_test("B_C_S");
    B_C_S lv;
    check2(sizeof(lv), 4, "sizeof(B_C_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_C_S)");
    check_field_offset(lv, v1, 0, "B_C_S.v1");
    check_field_offset(lv, v2, 1, "B_C_S.v2");
    check_field_offset(lv, v3, 2, "B_C_S.v3");
  }
}
static Arrange_To_Call_Me vB_C_S(Test_B_C_S, "B_C_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_Uc  {
  bool v1;
  char v2;
  unsigned char v3;
};
//SIG(1 B_C_Uc) C1{ Fc[3]}



static void Test_B_C_Uc()
{
  {
    init_simple_test("B_C_Uc");
    B_C_Uc lv;
    check2(sizeof(lv), 3, "sizeof(B_C_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(B_C_Uc)");
    check_field_offset(lv, v1, 0, "B_C_Uc.v1");
    check_field_offset(lv, v2, 1, "B_C_Uc.v2");
    check_field_offset(lv, v3, 2, "B_C_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_C_Uc(Test_B_C_Uc, "B_C_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_Ui  {
  bool v1;
  char v2;
  unsigned int v3;
};
//SIG(1 B_C_Ui) C1{ Fc[2] Fi}



static void Test_B_C_Ui()
{
  {
    init_simple_test("B_C_Ui");
    B_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_C_Ui)");
    check_field_offset(lv, v1, 0, "B_C_Ui.v1");
    check_field_offset(lv, v2, 1, "B_C_Ui.v2");
    check_field_offset(lv, v3, 4, "B_C_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_C_Ui(Test_B_C_Ui, "B_C_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_Ul  {
  bool v1;
  char v2;
  __tsu64 v3;
};
//SIG(1 B_C_Ul) C1{ Fc[2] FL}



static void Test_B_C_Ul()
{
  {
    init_simple_test("B_C_Ul");
    B_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_Ul)");
    check_field_offset(lv, v1, 0, "B_C_Ul.v1");
    check_field_offset(lv, v2, 1, "B_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_C_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_C_Ul(Test_B_C_Ul, "B_C_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_Us  {
  bool v1;
  char v2;
  unsigned short v3;
};
//SIG(1 B_C_Us) C1{ Fc[2] Fs}



static void Test_B_C_Us()
{
  {
    init_simple_test("B_C_Us");
    B_C_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_C_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_C_Us)");
    check_field_offset(lv, v1, 0, "B_C_Us.v1");
    check_field_offset(lv, v2, 1, "B_C_Us.v2");
    check_field_offset(lv, v3, 2, "B_C_Us.v3");
  }
}
static Arrange_To_Call_Me vB_C_Us(Test_B_C_Us, "B_C_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_C_Vp  {
  bool v1;
  char v2;
  void *v3;
};
//SIG(1 B_C_Vp) C1{ Fc[2] Fp}



static void Test_B_C_Vp()
{
  {
    init_simple_test("B_C_Vp");
    B_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_C_Vp)");
    check_field_offset(lv, v1, 0, "B_C_Vp.v1");
    check_field_offset(lv, v2, 1, "B_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_C_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_C_Vp(Test_B_C_Vp, "B_C_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D  {
  bool v1;
  double v2;
};
//SIG(1 B_D) C1{ Fc FL}



static void Test_B_D()
{
  {
    init_simple_test("B_D");
    B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D)");
    check_field_offset(lv, v1, 0, "B_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D.v2");
  }
}
static Arrange_To_Call_Me vB_D(Test_B_D, "B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_B  {
  bool v1;
  double v2;
  bool v3;
};
//SIG(1 B_D_B) C1{ Fc FL Fc}



static void Test_B_D_B()
{
  {
    init_simple_test("B_D_B");
    B_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_B)");
    check_field_offset(lv, v1, 0, "B_D_B.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_B.v3");
  }
}
static Arrange_To_Call_Me vB_D_B(Test_B_D_B, "B_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu15i  {
  bool v1;
  double v2;
  unsigned int v3:15;
};
//SIG(1 B_D_BFu15i) C1{ Fc FL Fi:15}



static void Test_B_D_BFu15i()
{
  {
    init_simple_test("B_D_BFu15i");
    static B_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu15i)");
    check_field_offset(lv, v1, 0, "B_D_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "B_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "B_D_BFu15i");
  }
}
static Arrange_To_Call_Me vB_D_BFu15i(Test_B_D_BFu15i, "B_D_BFu15i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu15ll  {
  bool v1;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 B_D_BFu15ll) C1{ Fc FL FL:15}



static void Test_B_D_BFu15ll()
{
  {
    init_simple_test("B_D_BFu15ll");
    static B_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_D_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "B_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "B_D_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_D_BFu15ll(Test_B_D_BFu15ll, "B_D_BFu15ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu15s  {
  bool v1;
  double v2;
  unsigned short v3:15;
};
//SIG(1 B_D_BFu15s) C1{ Fc FL Fs:15}



static void Test_B_D_BFu15s()
{
  {
    init_simple_test("B_D_BFu15s");
    static B_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu15s)");
    check_field_offset(lv, v1, 0, "B_D_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "B_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "B_D_BFu15s");
  }
}
static Arrange_To_Call_Me vB_D_BFu15s(Test_B_D_BFu15s, "B_D_BFu15s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu16i  {
  bool v1;
  double v2;
  unsigned int v3:16;
};
//SIG(1 B_D_BFu16i) C1{ Fc FL Fi:16}



static void Test_B_D_BFu16i()
{
  {
    init_simple_test("B_D_BFu16i");
    static B_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu16i)");
    check_field_offset(lv, v1, 0, "B_D_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "B_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "B_D_BFu16i");
  }
}
static Arrange_To_Call_Me vB_D_BFu16i(Test_B_D_BFu16i, "B_D_BFu16i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu16ll  {
  bool v1;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 B_D_BFu16ll) C1{ Fc FL FL:16}



static void Test_B_D_BFu16ll()
{
  {
    init_simple_test("B_D_BFu16ll");
    static B_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_D_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "B_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "B_D_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_D_BFu16ll(Test_B_D_BFu16ll, "B_D_BFu16ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu16s  {
  bool v1;
  double v2;
  unsigned short v3:16;
};
//SIG(1 B_D_BFu16s) C1{ Fc FL Fs:16}



static void Test_B_D_BFu16s()
{
  {
    init_simple_test("B_D_BFu16s");
    static B_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu16s)");
    check_field_offset(lv, v1, 0, "B_D_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "B_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "B_D_BFu16s");
  }
}
static Arrange_To_Call_Me vB_D_BFu16s(Test_B_D_BFu16s, "B_D_BFu16s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu17i  {
  bool v1;
  double v2;
  unsigned int v3:17;
};
//SIG(1 B_D_BFu17i) C1{ Fc FL Fi:17}



static void Test_B_D_BFu17i()
{
  {
    init_simple_test("B_D_BFu17i");
    static B_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu17i)");
    check_field_offset(lv, v1, 0, "B_D_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "B_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "B_D_BFu17i");
  }
}
static Arrange_To_Call_Me vB_D_BFu17i(Test_B_D_BFu17i, "B_D_BFu17i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu17ll  {
  bool v1;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 B_D_BFu17ll) C1{ Fc FL FL:17}



static void Test_B_D_BFu17ll()
{
  {
    init_simple_test("B_D_BFu17ll");
    static B_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_D_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "B_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "B_D_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_D_BFu17ll(Test_B_D_BFu17ll, "B_D_BFu17ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu1c  {
  bool v1;
  double v2;
  unsigned char v3:1;
};
//SIG(1 B_D_BFu1c) C1{ Fc FL Fc:1}



static void Test_B_D_BFu1c()
{
  {
    init_simple_test("B_D_BFu1c");
    static B_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu1c)");
    check_field_offset(lv, v1, 0, "B_D_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_D_BFu1c");
  }
}
static Arrange_To_Call_Me vB_D_BFu1c(Test_B_D_BFu1c, "B_D_BFu1c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu1i  {
  bool v1;
  double v2;
  unsigned int v3:1;
};
//SIG(1 B_D_BFu1i) C1{ Fc FL Fi:1}



static void Test_B_D_BFu1i()
{
  {
    init_simple_test("B_D_BFu1i");
    static B_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu1i)");
    check_field_offset(lv, v1, 0, "B_D_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_D_BFu1i");
  }
}
static Arrange_To_Call_Me vB_D_BFu1i(Test_B_D_BFu1i, "B_D_BFu1i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu1ll  {
  bool v1;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 B_D_BFu1ll) C1{ Fc FL FL:1}



static void Test_B_D_BFu1ll()
{
  {
    init_simple_test("B_D_BFu1ll");
    static B_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_D_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_D_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_D_BFu1ll(Test_B_D_BFu1ll, "B_D_BFu1ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu1s  {
  bool v1;
  double v2;
  unsigned short v3:1;
};
//SIG(1 B_D_BFu1s) C1{ Fc FL Fs:1}



static void Test_B_D_BFu1s()
{
  {
    init_simple_test("B_D_BFu1s");
    static B_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu1s)");
    check_field_offset(lv, v1, 0, "B_D_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_D_BFu1s");
  }
}
static Arrange_To_Call_Me vB_D_BFu1s(Test_B_D_BFu1s, "B_D_BFu1s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu31i  {
  bool v1;
  double v2;
  unsigned int v3:31;
};
//SIG(1 B_D_BFu31i) C1{ Fc FL Fi:31}



static void Test_B_D_BFu31i()
{
  {
    init_simple_test("B_D_BFu31i");
    static B_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu31i)");
    check_field_offset(lv, v1, 0, "B_D_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "B_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "B_D_BFu31i");
  }
}
static Arrange_To_Call_Me vB_D_BFu31i(Test_B_D_BFu31i, "B_D_BFu31i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu31ll  {
  bool v1;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 B_D_BFu31ll) C1{ Fc FL FL:31}



static void Test_B_D_BFu31ll()
{
  {
    init_simple_test("B_D_BFu31ll");
    static B_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_D_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "B_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "B_D_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_D_BFu31ll(Test_B_D_BFu31ll, "B_D_BFu31ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu32i  {
  bool v1;
  double v2;
  unsigned int v3:32;
};
//SIG(1 B_D_BFu32i) C1{ Fc FL Fi:32}



static void Test_B_D_BFu32i()
{
  {
    init_simple_test("B_D_BFu32i");
    static B_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu32i)");
    check_field_offset(lv, v1, 0, "B_D_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "B_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "B_D_BFu32i");
  }
}
static Arrange_To_Call_Me vB_D_BFu32i(Test_B_D_BFu32i, "B_D_BFu32i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu32ll  {
  bool v1;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 B_D_BFu32ll) C1{ Fc FL FL:32}



static void Test_B_D_BFu32ll()
{
  {
    init_simple_test("B_D_BFu32ll");
    static B_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_D_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "B_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "B_D_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_D_BFu32ll(Test_B_D_BFu32ll, "B_D_BFu32ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu33  {
  bool v1;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 B_D_BFu33) C1{ Fc FL FL:33}



static void Test_B_D_BFu33()
{
  {
    init_simple_test("B_D_BFu33");
    static B_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu33)");
    check_field_offset(lv, v1, 0, "B_D_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "B_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "B_D_BFu33");
  }
}
static Arrange_To_Call_Me vB_D_BFu33(Test_B_D_BFu33, "B_D_BFu33", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu7c  {
  bool v1;
  double v2;
  unsigned char v3:7;
};
//SIG(1 B_D_BFu7c) C1{ Fc FL Fc:7}



static void Test_B_D_BFu7c()
{
  {
    init_simple_test("B_D_BFu7c");
    static B_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu7c)");
    check_field_offset(lv, v1, 0, "B_D_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_D_BFu7c");
  }
}
static Arrange_To_Call_Me vB_D_BFu7c(Test_B_D_BFu7c, "B_D_BFu7c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu7i  {
  bool v1;
  double v2;
  unsigned int v3:7;
};
//SIG(1 B_D_BFu7i) C1{ Fc FL Fi:7}



static void Test_B_D_BFu7i()
{
  {
    init_simple_test("B_D_BFu7i");
    static B_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu7i)");
    check_field_offset(lv, v1, 0, "B_D_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_D_BFu7i");
  }
}
static Arrange_To_Call_Me vB_D_BFu7i(Test_B_D_BFu7i, "B_D_BFu7i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu7ll  {
  bool v1;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 B_D_BFu7ll) C1{ Fc FL FL:7}



static void Test_B_D_BFu7ll()
{
  {
    init_simple_test("B_D_BFu7ll");
    static B_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_D_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_D_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_D_BFu7ll(Test_B_D_BFu7ll, "B_D_BFu7ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu7s  {
  bool v1;
  double v2;
  unsigned short v3:7;
};
//SIG(1 B_D_BFu7s) C1{ Fc FL Fs:7}



static void Test_B_D_BFu7s()
{
  {
    init_simple_test("B_D_BFu7s");
    static B_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu7s)");
    check_field_offset(lv, v1, 0, "B_D_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_D_BFu7s");
  }
}
static Arrange_To_Call_Me vB_D_BFu7s(Test_B_D_BFu7s, "B_D_BFu7s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu8c  {
  bool v1;
  double v2;
  unsigned char v3:8;
};
//SIG(1 B_D_BFu8c) C1{ Fc FL Fc:8}



static void Test_B_D_BFu8c()
{
  {
    init_simple_test("B_D_BFu8c");
    static B_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu8c)");
    check_field_offset(lv, v1, 0, "B_D_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_D_BFu8c");
  }
}
static Arrange_To_Call_Me vB_D_BFu8c(Test_B_D_BFu8c, "B_D_BFu8c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu8i  {
  bool v1;
  double v2;
  unsigned int v3:8;
};
//SIG(1 B_D_BFu8i) C1{ Fc FL Fi:8}



static void Test_B_D_BFu8i()
{
  {
    init_simple_test("B_D_BFu8i");
    static B_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu8i)");
    check_field_offset(lv, v1, 0, "B_D_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_D_BFu8i");
  }
}
static Arrange_To_Call_Me vB_D_BFu8i(Test_B_D_BFu8i, "B_D_BFu8i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu8ll  {
  bool v1;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 B_D_BFu8ll) C1{ Fc FL FL:8}



static void Test_B_D_BFu8ll()
{
  {
    init_simple_test("B_D_BFu8ll");
    static B_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_D_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_D_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_D_BFu8ll(Test_B_D_BFu8ll, "B_D_BFu8ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu8s  {
  bool v1;
  double v2;
  unsigned short v3:8;
};
//SIG(1 B_D_BFu8s) C1{ Fc FL Fs:8}



static void Test_B_D_BFu8s()
{
  {
    init_simple_test("B_D_BFu8s");
    static B_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu8s)");
    check_field_offset(lv, v1, 0, "B_D_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_D_BFu8s");
  }
}
static Arrange_To_Call_Me vB_D_BFu8s(Test_B_D_BFu8s, "B_D_BFu8s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu9i  {
  bool v1;
  double v2;
  unsigned int v3:9;
};
//SIG(1 B_D_BFu9i) C1{ Fc FL Fi:9}



static void Test_B_D_BFu9i()
{
  {
    init_simple_test("B_D_BFu9i");
    static B_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu9i)");
    check_field_offset(lv, v1, 0, "B_D_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "B_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "B_D_BFu9i");
  }
}
static Arrange_To_Call_Me vB_D_BFu9i(Test_B_D_BFu9i, "B_D_BFu9i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu9ll  {
  bool v1;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 B_D_BFu9ll) C1{ Fc FL FL:9}



static void Test_B_D_BFu9ll()
{
  {
    init_simple_test("B_D_BFu9ll");
    static B_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_D_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "B_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "B_D_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_D_BFu9ll(Test_B_D_BFu9ll, "B_D_BFu9ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_BFu9s  {
  bool v1;
  double v2;
  unsigned short v3:9;
};
//SIG(1 B_D_BFu9s) C1{ Fc FL Fs:9}



static void Test_B_D_BFu9s()
{
  {
    init_simple_test("B_D_BFu9s");
    static B_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_BFu9s)");
    check_field_offset(lv, v1, 0, "B_D_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "B_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "B_D_BFu9s");
  }
}
static Arrange_To_Call_Me vB_D_BFu9s(Test_B_D_BFu9s, "B_D_BFu9s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_C  {
  bool v1;
  double v2;
  char v3;
};
//SIG(1 B_D_C) C1{ Fc FL Fc}



static void Test_B_D_C()
{
  {
    init_simple_test("B_D_C");
    B_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_C)");
    check_field_offset(lv, v1, 0, "B_D_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_C.v3");
  }
}
static Arrange_To_Call_Me vB_D_C(Test_B_D_C, "B_D_C", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_D  {
  bool v1;
  double v2;
  double v3;
};
//SIG(1 B_D_D) C1{ Fc FL[2]}



static void Test_B_D_D()
{
  {
    init_simple_test("B_D_D");
    B_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_D)");
    check_field_offset(lv, v1, 0, "B_D_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_D.v3");
  }
}
static Arrange_To_Call_Me vB_D_D(Test_B_D_D, "B_D_D", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_F  {
  bool v1;
  double v2;
  float v3;
};
//SIG(1 B_D_F) C1{ Fc FL Fi}



static void Test_B_D_F()
{
  {
    init_simple_test("B_D_F");
    B_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_F)");
    check_field_offset(lv, v1, 0, "B_D_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_F.v3");
  }
}
static Arrange_To_Call_Me vB_D_F(Test_B_D_F, "B_D_F", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_I  {
  bool v1;
  double v2;
  int v3;
};
//SIG(1 B_D_I) C1{ Fc FL Fi}



static void Test_B_D_I()
{
  {
    init_simple_test("B_D_I");
    B_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_I)");
    check_field_offset(lv, v1, 0, "B_D_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_I.v3");
  }
}
static Arrange_To_Call_Me vB_D_I(Test_B_D_I, "B_D_I", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_Ip  {
  bool v1;
  double v2;
  int *v3;
};
//SIG(1 B_D_Ip) C1{ Fc FL Fp}



static void Test_B_D_Ip()
{
  {
    init_simple_test("B_D_Ip");
    B_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_Ip)");
    check_field_offset(lv, v1, 0, "B_D_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_D_Ip(Test_B_D_Ip, "B_D_Ip", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_L  {
  bool v1;
  double v2;
  __tsi64 v3;
};
//SIG(1 B_D_L) C1{ Fc FL[2]}



static void Test_B_D_L()
{
  {
    init_simple_test("B_D_L");
    B_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_L)");
    check_field_offset(lv, v1, 0, "B_D_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_L.v3");
  }
}
static Arrange_To_Call_Me vB_D_L(Test_B_D_L, "B_D_L", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_S  {
  bool v1;
  double v2;
  short v3;
};
//SIG(1 B_D_S) C1{ Fc FL Fs}



static void Test_B_D_S()
{
  {
    init_simple_test("B_D_S");
    B_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_S)");
    check_field_offset(lv, v1, 0, "B_D_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_S.v3");
  }
}
static Arrange_To_Call_Me vB_D_S(Test_B_D_S, "B_D_S", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_Uc  {
  bool v1;
  double v2;
  unsigned char v3;
};
//SIG(1 B_D_Uc) C1{ Fc FL Fc}



static void Test_B_D_Uc()
{
  {
    init_simple_test("B_D_Uc");
    B_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_Uc)");
    check_field_offset(lv, v1, 0, "B_D_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_D_Uc(Test_B_D_Uc, "B_D_Uc", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_Ui  {
  bool v1;
  double v2;
  unsigned int v3;
};
//SIG(1 B_D_Ui) C1{ Fc FL Fi}



static void Test_B_D_Ui()
{
  {
    init_simple_test("B_D_Ui");
    B_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_Ui)");
    check_field_offset(lv, v1, 0, "B_D_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_D_Ui(Test_B_D_Ui, "B_D_Ui", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_Ul  {
  bool v1;
  double v2;
  __tsu64 v3;
};
//SIG(1 B_D_Ul) C1{ Fc FL[2]}



static void Test_B_D_Ul()
{
  {
    init_simple_test("B_D_Ul");
    B_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_Ul)");
    check_field_offset(lv, v1, 0, "B_D_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_D_Ul(Test_B_D_Ul, "B_D_Ul", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_Us  {
  bool v1;
  double v2;
  unsigned short v3;
};
//SIG(1 B_D_Us) C1{ Fc FL Fs}



static void Test_B_D_Us()
{
  {
    init_simple_test("B_D_Us");
    B_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_Us)");
    check_field_offset(lv, v1, 0, "B_D_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_Us.v3");
  }
}
static Arrange_To_Call_Me vB_D_Us(Test_B_D_Us, "B_D_Us", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_D_Vp  {
  bool v1;
  double v2;
  void *v3;
};
//SIG(1 B_D_Vp) C1{ Fc FL Fp}



static void Test_B_D_Vp()
{
  {
    init_simple_test("B_D_Vp");
    B_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_D_Vp)");
    check_field_offset(lv, v1, 0, "B_D_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_D_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_D_Vp(Test_B_D_Vp, "B_D_Vp", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F  {
  bool v1;
  float v2;
};
//SIG(1 B_F) C1{ Fc Fi}



static void Test_B_F()
{
  {
    init_simple_test("B_F");
    B_F lv;
    check2(sizeof(lv), 8, "sizeof(B_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_F)");
    check_field_offset(lv, v1, 0, "B_F.v1");
    check_field_offset(lv, v2, 4, "B_F.v2");
  }
}
static Arrange_To_Call_Me vB_F(Test_B_F, "B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_B  {
  bool v1;
  float v2;
  bool v3;
};
//SIG(1 B_F_B) C1{ Fc Fi Fc}



static void Test_B_F_B()
{
  {
    init_simple_test("B_F_B");
    B_F_B lv;
    check2(sizeof(lv), 12, "sizeof(B_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_B)");
    check_field_offset(lv, v1, 0, "B_F_B.v1");
    check_field_offset(lv, v2, 4, "B_F_B.v2");
    check_field_offset(lv, v3, 8, "B_F_B.v3");
  }
}
static Arrange_To_Call_Me vB_F_B(Test_B_F_B, "B_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu15i  {
  bool v1;
  float v2;
  unsigned int v3:15;
};
//SIG(1 B_F_BFu15i) C1{ Fc Fi Fi:15}



static void Test_B_F_BFu15i()
{
  {
    init_simple_test("B_F_BFu15i");
    static B_F_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu15i)");
    check_field_offset(lv, v1, 0, "B_F_BFu15i.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_F_BFu15i");
  }
}
static Arrange_To_Call_Me vB_F_BFu15i(Test_B_F_BFu15i, "B_F_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu15ll  {
  bool v1;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 B_F_BFu15ll) C1{ Fc Fi FL:15}



static void Test_B_F_BFu15ll()
{
  {
    init_simple_test("B_F_BFu15ll");
    static B_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_F_BFu15ll.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_F_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_F_BFu15ll(Test_B_F_BFu15ll, "B_F_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu15s  {
  bool v1;
  float v2;
  unsigned short v3:15;
};
//SIG(1 B_F_BFu15s) C1{ Fc Fi Fs:15}



static void Test_B_F_BFu15s()
{
  {
    init_simple_test("B_F_BFu15s");
    static B_F_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu15s)");
    check_field_offset(lv, v1, 0, "B_F_BFu15s.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_F_BFu15s");
  }
}
static Arrange_To_Call_Me vB_F_BFu15s(Test_B_F_BFu15s, "B_F_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu16i  {
  bool v1;
  float v2;
  unsigned int v3:16;
};
//SIG(1 B_F_BFu16i) C1{ Fc Fi Fi:16}



static void Test_B_F_BFu16i()
{
  {
    init_simple_test("B_F_BFu16i");
    static B_F_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu16i)");
    check_field_offset(lv, v1, 0, "B_F_BFu16i.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_F_BFu16i");
  }
}
static Arrange_To_Call_Me vB_F_BFu16i(Test_B_F_BFu16i, "B_F_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu16ll  {
  bool v1;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 B_F_BFu16ll) C1{ Fc Fi FL:16}



static void Test_B_F_BFu16ll()
{
  {
    init_simple_test("B_F_BFu16ll");
    static B_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_F_BFu16ll.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_F_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_F_BFu16ll(Test_B_F_BFu16ll, "B_F_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu16s  {
  bool v1;
  float v2;
  unsigned short v3:16;
};
//SIG(1 B_F_BFu16s) C1{ Fc Fi Fs:16}



static void Test_B_F_BFu16s()
{
  {
    init_simple_test("B_F_BFu16s");
    static B_F_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu16s)");
    check_field_offset(lv, v1, 0, "B_F_BFu16s.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_F_BFu16s");
  }
}
static Arrange_To_Call_Me vB_F_BFu16s(Test_B_F_BFu16s, "B_F_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu17i  {
  bool v1;
  float v2;
  unsigned int v3:17;
};
//SIG(1 B_F_BFu17i) C1{ Fc Fi Fi:17}



static void Test_B_F_BFu17i()
{
  {
    init_simple_test("B_F_BFu17i");
    static B_F_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu17i)");
    check_field_offset(lv, v1, 0, "B_F_BFu17i.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "B_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "B_F_BFu17i");
  }
}
static Arrange_To_Call_Me vB_F_BFu17i(Test_B_F_BFu17i, "B_F_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu17ll  {
  bool v1;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 B_F_BFu17ll) C1{ Fc Fi FL:17}



static void Test_B_F_BFu17ll()
{
  {
    init_simple_test("B_F_BFu17ll");
    static B_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_F_BFu17ll.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "B_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "B_F_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_F_BFu17ll(Test_B_F_BFu17ll, "B_F_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu1c  {
  bool v1;
  float v2;
  unsigned char v3:1;
};
//SIG(1 B_F_BFu1c) C1{ Fc Fi Fc:1}



static void Test_B_F_BFu1c()
{
  {
    init_simple_test("B_F_BFu1c");
    static B_F_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu1c)");
    check_field_offset(lv, v1, 0, "B_F_BFu1c.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_F_BFu1c");
  }
}
static Arrange_To_Call_Me vB_F_BFu1c(Test_B_F_BFu1c, "B_F_BFu1c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu1i  {
  bool v1;
  float v2;
  unsigned int v3:1;
};
//SIG(1 B_F_BFu1i) C1{ Fc Fi Fi:1}



static void Test_B_F_BFu1i()
{
  {
    init_simple_test("B_F_BFu1i");
    static B_F_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu1i)");
    check_field_offset(lv, v1, 0, "B_F_BFu1i.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_F_BFu1i");
  }
}
static Arrange_To_Call_Me vB_F_BFu1i(Test_B_F_BFu1i, "B_F_BFu1i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu1ll  {
  bool v1;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 B_F_BFu1ll) C1{ Fc Fi FL:1}



static void Test_B_F_BFu1ll()
{
  {
    init_simple_test("B_F_BFu1ll");
    static B_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_F_BFu1ll.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_F_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_F_BFu1ll(Test_B_F_BFu1ll, "B_F_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu1s  {
  bool v1;
  float v2;
  unsigned short v3:1;
};
//SIG(1 B_F_BFu1s) C1{ Fc Fi Fs:1}



static void Test_B_F_BFu1s()
{
  {
    init_simple_test("B_F_BFu1s");
    static B_F_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu1s)");
    check_field_offset(lv, v1, 0, "B_F_BFu1s.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_F_BFu1s");
  }
}
static Arrange_To_Call_Me vB_F_BFu1s(Test_B_F_BFu1s, "B_F_BFu1s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu31i  {
  bool v1;
  float v2;
  unsigned int v3:31;
};
//SIG(1 B_F_BFu31i) C1{ Fc Fi Fi:31}



static void Test_B_F_BFu31i()
{
  {
    init_simple_test("B_F_BFu31i");
    static B_F_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu31i)");
    check_field_offset(lv, v1, 0, "B_F_BFu31i.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_F_BFu31i");
  }
}
static Arrange_To_Call_Me vB_F_BFu31i(Test_B_F_BFu31i, "B_F_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu31ll  {
  bool v1;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 B_F_BFu31ll) C1{ Fc Fi FL:31}



static void Test_B_F_BFu31ll()
{
  {
    init_simple_test("B_F_BFu31ll");
    static B_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_F_BFu31ll.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_F_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_F_BFu31ll(Test_B_F_BFu31ll, "B_F_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu32i  {
  bool v1;
  float v2;
  unsigned int v3:32;
};
//SIG(1 B_F_BFu32i) C1{ Fc Fi Fi:32}



static void Test_B_F_BFu32i()
{
  {
    init_simple_test("B_F_BFu32i");
    static B_F_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu32i)");
    check_field_offset(lv, v1, 0, "B_F_BFu32i.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_F_BFu32i");
  }
}
static Arrange_To_Call_Me vB_F_BFu32i(Test_B_F_BFu32i, "B_F_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu32ll  {
  bool v1;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 B_F_BFu32ll) C1{ Fc Fi FL:32}



static void Test_B_F_BFu32ll()
{
  {
    init_simple_test("B_F_BFu32ll");
    static B_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_F_BFu32ll.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_F_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_F_BFu32ll(Test_B_F_BFu32ll, "B_F_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu33  {
  bool v1;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 B_F_BFu33) C1{ Fc Fi FL:33}



static void Test_B_F_BFu33()
{
  {
    init_simple_test("B_F_BFu33");
    static B_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(B_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu33)");
    check_field_offset(lv, v1, 0, "B_F_BFu33.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "B_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "B_F_BFu33");
  }
}
static Arrange_To_Call_Me vB_F_BFu33(Test_B_F_BFu33, "B_F_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu7c  {
  bool v1;
  float v2;
  unsigned char v3:7;
};
//SIG(1 B_F_BFu7c) C1{ Fc Fi Fc:7}



static void Test_B_F_BFu7c()
{
  {
    init_simple_test("B_F_BFu7c");
    static B_F_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu7c)");
    check_field_offset(lv, v1, 0, "B_F_BFu7c.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_F_BFu7c");
  }
}
static Arrange_To_Call_Me vB_F_BFu7c(Test_B_F_BFu7c, "B_F_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu7i  {
  bool v1;
  float v2;
  unsigned int v3:7;
};
//SIG(1 B_F_BFu7i) C1{ Fc Fi Fi:7}



static void Test_B_F_BFu7i()
{
  {
    init_simple_test("B_F_BFu7i");
    static B_F_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu7i)");
    check_field_offset(lv, v1, 0, "B_F_BFu7i.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_F_BFu7i");
  }
}
static Arrange_To_Call_Me vB_F_BFu7i(Test_B_F_BFu7i, "B_F_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu7ll  {
  bool v1;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 B_F_BFu7ll) C1{ Fc Fi FL:7}



static void Test_B_F_BFu7ll()
{
  {
    init_simple_test("B_F_BFu7ll");
    static B_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_F_BFu7ll.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_F_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_F_BFu7ll(Test_B_F_BFu7ll, "B_F_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu7s  {
  bool v1;
  float v2;
  unsigned short v3:7;
};
//SIG(1 B_F_BFu7s) C1{ Fc Fi Fs:7}



static void Test_B_F_BFu7s()
{
  {
    init_simple_test("B_F_BFu7s");
    static B_F_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu7s)");
    check_field_offset(lv, v1, 0, "B_F_BFu7s.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_F_BFu7s");
  }
}
static Arrange_To_Call_Me vB_F_BFu7s(Test_B_F_BFu7s, "B_F_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu8c  {
  bool v1;
  float v2;
  unsigned char v3:8;
};
//SIG(1 B_F_BFu8c) C1{ Fc Fi Fc:8}



static void Test_B_F_BFu8c()
{
  {
    init_simple_test("B_F_BFu8c");
    static B_F_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu8c)");
    check_field_offset(lv, v1, 0, "B_F_BFu8c.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_F_BFu8c");
  }
}
static Arrange_To_Call_Me vB_F_BFu8c(Test_B_F_BFu8c, "B_F_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu8i  {
  bool v1;
  float v2;
  unsigned int v3:8;
};
//SIG(1 B_F_BFu8i) C1{ Fc Fi Fi:8}



static void Test_B_F_BFu8i()
{
  {
    init_simple_test("B_F_BFu8i");
    static B_F_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu8i)");
    check_field_offset(lv, v1, 0, "B_F_BFu8i.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_F_BFu8i");
  }
}
static Arrange_To_Call_Me vB_F_BFu8i(Test_B_F_BFu8i, "B_F_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu8ll  {
  bool v1;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 B_F_BFu8ll) C1{ Fc Fi FL:8}



static void Test_B_F_BFu8ll()
{
  {
    init_simple_test("B_F_BFu8ll");
    static B_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_F_BFu8ll.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_F_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_F_BFu8ll(Test_B_F_BFu8ll, "B_F_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu8s  {
  bool v1;
  float v2;
  unsigned short v3:8;
};
//SIG(1 B_F_BFu8s) C1{ Fc Fi Fs:8}



static void Test_B_F_BFu8s()
{
  {
    init_simple_test("B_F_BFu8s");
    static B_F_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu8s)");
    check_field_offset(lv, v1, 0, "B_F_BFu8s.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_F_BFu8s");
  }
}
static Arrange_To_Call_Me vB_F_BFu8s(Test_B_F_BFu8s, "B_F_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu9i  {
  bool v1;
  float v2;
  unsigned int v3:9;
};
//SIG(1 B_F_BFu9i) C1{ Fc Fi Fi:9}



static void Test_B_F_BFu9i()
{
  {
    init_simple_test("B_F_BFu9i");
    static B_F_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu9i)");
    check_field_offset(lv, v1, 0, "B_F_BFu9i.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_F_BFu9i");
  }
}
static Arrange_To_Call_Me vB_F_BFu9i(Test_B_F_BFu9i, "B_F_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu9ll  {
  bool v1;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 B_F_BFu9ll) C1{ Fc Fi FL:9}



static void Test_B_F_BFu9ll()
{
  {
    init_simple_test("B_F_BFu9ll");
    static B_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_F_BFu9ll.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_F_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_F_BFu9ll(Test_B_F_BFu9ll, "B_F_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_BFu9s  {
  bool v1;
  float v2;
  unsigned short v3:9;
};
//SIG(1 B_F_BFu9s) C1{ Fc Fi Fs:9}



static void Test_B_F_BFu9s()
{
  {
    init_simple_test("B_F_BFu9s");
    static B_F_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(B_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_BFu9s)");
    check_field_offset(lv, v1, 0, "B_F_BFu9s.v1");
    check_field_offset(lv, v2, 4, "B_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_F_BFu9s");
  }
}
static Arrange_To_Call_Me vB_F_BFu9s(Test_B_F_BFu9s, "B_F_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_C  {
  bool v1;
  float v2;
  char v3;
};
//SIG(1 B_F_C) C1{ Fc Fi Fc}



static void Test_B_F_C()
{
  {
    init_simple_test("B_F_C");
    B_F_C lv;
    check2(sizeof(lv), 12, "sizeof(B_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_C)");
    check_field_offset(lv, v1, 0, "B_F_C.v1");
    check_field_offset(lv, v2, 4, "B_F_C.v2");
    check_field_offset(lv, v3, 8, "B_F_C.v3");
  }
}
static Arrange_To_Call_Me vB_F_C(Test_B_F_C, "B_F_C", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_D  {
  bool v1;
  float v2;
  double v3;
};
//SIG(1 B_F_D) C1{ Fc Fi FL}



static void Test_B_F_D()
{
  {
    init_simple_test("B_F_D");
    B_F_D lv;
    check2(sizeof(lv), 16, "sizeof(B_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_D)");
    check_field_offset(lv, v1, 0, "B_F_D.v1");
    check_field_offset(lv, v2, 4, "B_F_D.v2");
    check_field_offset(lv, v3, 8, "B_F_D.v3");
  }
}
static Arrange_To_Call_Me vB_F_D(Test_B_F_D, "B_F_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_F  {
  bool v1;
  float v2;
  float v3;
};
//SIG(1 B_F_F) C1{ Fc Fi[2]}



static void Test_B_F_F()
{
  {
    init_simple_test("B_F_F");
    B_F_F lv;
    check2(sizeof(lv), 12, "sizeof(B_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_F)");
    check_field_offset(lv, v1, 0, "B_F_F.v1");
    check_field_offset(lv, v2, 4, "B_F_F.v2");
    check_field_offset(lv, v3, 8, "B_F_F.v3");
  }
}
static Arrange_To_Call_Me vB_F_F(Test_B_F_F, "B_F_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_I  {
  bool v1;
  float v2;
  int v3;
};
//SIG(1 B_F_I) C1{ Fc Fi[2]}



static void Test_B_F_I()
{
  {
    init_simple_test("B_F_I");
    B_F_I lv;
    check2(sizeof(lv), 12, "sizeof(B_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_I)");
    check_field_offset(lv, v1, 0, "B_F_I.v1");
    check_field_offset(lv, v2, 4, "B_F_I.v2");
    check_field_offset(lv, v3, 8, "B_F_I.v3");
  }
}
static Arrange_To_Call_Me vB_F_I(Test_B_F_I, "B_F_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_Ip  {
  bool v1;
  float v2;
  int *v3;
};
//SIG(1 B_F_Ip) C1{ Fc Fi Fp}



static void Test_B_F_Ip()
{
  {
    init_simple_test("B_F_Ip");
    B_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_Ip)");
    check_field_offset(lv, v1, 0, "B_F_Ip.v1");
    check_field_offset(lv, v2, 4, "B_F_Ip.v2");
    check_field_offset(lv, v3, 8, "B_F_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_F_Ip(Test_B_F_Ip, "B_F_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_L  {
  bool v1;
  float v2;
  __tsi64 v3;
};
//SIG(1 B_F_L) C1{ Fc Fi FL}



static void Test_B_F_L()
{
  {
    init_simple_test("B_F_L");
    B_F_L lv;
    check2(sizeof(lv), 16, "sizeof(B_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_L)");
    check_field_offset(lv, v1, 0, "B_F_L.v1");
    check_field_offset(lv, v2, 4, "B_F_L.v2");
    check_field_offset(lv, v3, 8, "B_F_L.v3");
  }
}
static Arrange_To_Call_Me vB_F_L(Test_B_F_L, "B_F_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_S  {
  bool v1;
  float v2;
  short v3;
};
//SIG(1 B_F_S) C1{ Fc Fi Fs}



static void Test_B_F_S()
{
  {
    init_simple_test("B_F_S");
    B_F_S lv;
    check2(sizeof(lv), 12, "sizeof(B_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_S)");
    check_field_offset(lv, v1, 0, "B_F_S.v1");
    check_field_offset(lv, v2, 4, "B_F_S.v2");
    check_field_offset(lv, v3, 8, "B_F_S.v3");
  }
}
static Arrange_To_Call_Me vB_F_S(Test_B_F_S, "B_F_S", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_Uc  {
  bool v1;
  float v2;
  unsigned char v3;
};
//SIG(1 B_F_Uc) C1{ Fc Fi Fc}



static void Test_B_F_Uc()
{
  {
    init_simple_test("B_F_Uc");
    B_F_Uc lv;
    check2(sizeof(lv), 12, "sizeof(B_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_Uc)");
    check_field_offset(lv, v1, 0, "B_F_Uc.v1");
    check_field_offset(lv, v2, 4, "B_F_Uc.v2");
    check_field_offset(lv, v3, 8, "B_F_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_F_Uc(Test_B_F_Uc, "B_F_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_Ui  {
  bool v1;
  float v2;
  unsigned int v3;
};
//SIG(1 B_F_Ui) C1{ Fc Fi[2]}



static void Test_B_F_Ui()
{
  {
    init_simple_test("B_F_Ui");
    B_F_Ui lv;
    check2(sizeof(lv), 12, "sizeof(B_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_Ui)");
    check_field_offset(lv, v1, 0, "B_F_Ui.v1");
    check_field_offset(lv, v2, 4, "B_F_Ui.v2");
    check_field_offset(lv, v3, 8, "B_F_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_F_Ui(Test_B_F_Ui, "B_F_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_Ul  {
  bool v1;
  float v2;
  __tsu64 v3;
};
//SIG(1 B_F_Ul) C1{ Fc Fi FL}



static void Test_B_F_Ul()
{
  {
    init_simple_test("B_F_Ul");
    B_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(B_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_Ul)");
    check_field_offset(lv, v1, 0, "B_F_Ul.v1");
    check_field_offset(lv, v2, 4, "B_F_Ul.v2");
    check_field_offset(lv, v3, 8, "B_F_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_F_Ul(Test_B_F_Ul, "B_F_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_Us  {
  bool v1;
  float v2;
  unsigned short v3;
};
//SIG(1 B_F_Us) C1{ Fc Fi Fs}



static void Test_B_F_Us()
{
  {
    init_simple_test("B_F_Us");
    B_F_Us lv;
    check2(sizeof(lv), 12, "sizeof(B_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_F_Us)");
    check_field_offset(lv, v1, 0, "B_F_Us.v1");
    check_field_offset(lv, v2, 4, "B_F_Us.v2");
    check_field_offset(lv, v3, 8, "B_F_Us.v3");
  }
}
static Arrange_To_Call_Me vB_F_Us(Test_B_F_Us, "B_F_Us", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_F_Vp  {
  bool v1;
  float v2;
  void *v3;
};
//SIG(1 B_F_Vp) C1{ Fc Fi Fp}



static void Test_B_F_Vp()
{
  {
    init_simple_test("B_F_Vp");
    B_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_F_Vp)");
    check_field_offset(lv, v1, 0, "B_F_Vp.v1");
    check_field_offset(lv, v2, 4, "B_F_Vp.v2");
    check_field_offset(lv, v3, 8, "B_F_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_F_Vp(Test_B_F_Vp, "B_F_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I  {
  bool v1;
  int v2;
};
//SIG(1 B_I) C1{ Fc Fi}



static void Test_B_I()
{
  {
    init_simple_test("B_I");
    B_I lv;
    check2(sizeof(lv), 8, "sizeof(B_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_I)");
    check_field_offset(lv, v1, 0, "B_I.v1");
    check_field_offset(lv, v2, 4, "B_I.v2");
  }
}
static Arrange_To_Call_Me vB_I(Test_B_I, "B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_B  {
  bool v1;
  int v2;
  bool v3;
};
//SIG(1 B_I_B) C1{ Fc Fi Fc}



static void Test_B_I_B()
{
  {
    init_simple_test("B_I_B");
    B_I_B lv;
    check2(sizeof(lv), 12, "sizeof(B_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_B)");
    check_field_offset(lv, v1, 0, "B_I_B.v1");
    check_field_offset(lv, v2, 4, "B_I_B.v2");
    check_field_offset(lv, v3, 8, "B_I_B.v3");
  }
}
static Arrange_To_Call_Me vB_I_B(Test_B_I_B, "B_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu15i  {
  bool v1;
  int v2;
  unsigned int v3:15;
};
//SIG(1 B_I_BFu15i) C1{ Fc Fi Fi:15}



static void Test_B_I_BFu15i()
{
  {
    init_simple_test("B_I_BFu15i");
    static B_I_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu15i)");
    check_field_offset(lv, v1, 0, "B_I_BFu15i.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_I_BFu15i");
  }
}
static Arrange_To_Call_Me vB_I_BFu15i(Test_B_I_BFu15i, "B_I_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu15ll  {
  bool v1;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 B_I_BFu15ll) C1{ Fc Fi FL:15}



static void Test_B_I_BFu15ll()
{
  {
    init_simple_test("B_I_BFu15ll");
    static B_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_I_BFu15ll.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_I_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_I_BFu15ll(Test_B_I_BFu15ll, "B_I_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu15s  {
  bool v1;
  int v2;
  unsigned short v3:15;
};
//SIG(1 B_I_BFu15s) C1{ Fc Fi Fs:15}



static void Test_B_I_BFu15s()
{
  {
    init_simple_test("B_I_BFu15s");
    static B_I_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu15s)");
    check_field_offset(lv, v1, 0, "B_I_BFu15s.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_I_BFu15s");
  }
}
static Arrange_To_Call_Me vB_I_BFu15s(Test_B_I_BFu15s, "B_I_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu16i  {
  bool v1;
  int v2;
  unsigned int v3:16;
};
//SIG(1 B_I_BFu16i) C1{ Fc Fi Fi:16}



static void Test_B_I_BFu16i()
{
  {
    init_simple_test("B_I_BFu16i");
    static B_I_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu16i)");
    check_field_offset(lv, v1, 0, "B_I_BFu16i.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_I_BFu16i");
  }
}
static Arrange_To_Call_Me vB_I_BFu16i(Test_B_I_BFu16i, "B_I_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu16ll  {
  bool v1;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 B_I_BFu16ll) C1{ Fc Fi FL:16}



static void Test_B_I_BFu16ll()
{
  {
    init_simple_test("B_I_BFu16ll");
    static B_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_I_BFu16ll.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_I_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_I_BFu16ll(Test_B_I_BFu16ll, "B_I_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu16s  {
  bool v1;
  int v2;
  unsigned short v3:16;
};
//SIG(1 B_I_BFu16s) C1{ Fc Fi Fs:16}



static void Test_B_I_BFu16s()
{
  {
    init_simple_test("B_I_BFu16s");
    static B_I_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu16s)");
    check_field_offset(lv, v1, 0, "B_I_BFu16s.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_I_BFu16s");
  }
}
static Arrange_To_Call_Me vB_I_BFu16s(Test_B_I_BFu16s, "B_I_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu17i  {
  bool v1;
  int v2;
  unsigned int v3:17;
};
//SIG(1 B_I_BFu17i) C1{ Fc Fi Fi:17}



static void Test_B_I_BFu17i()
{
  {
    init_simple_test("B_I_BFu17i");
    static B_I_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu17i)");
    check_field_offset(lv, v1, 0, "B_I_BFu17i.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "B_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "B_I_BFu17i");
  }
}
static Arrange_To_Call_Me vB_I_BFu17i(Test_B_I_BFu17i, "B_I_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu17ll  {
  bool v1;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 B_I_BFu17ll) C1{ Fc Fi FL:17}



static void Test_B_I_BFu17ll()
{
  {
    init_simple_test("B_I_BFu17ll");
    static B_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_I_BFu17ll.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "B_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "B_I_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_I_BFu17ll(Test_B_I_BFu17ll, "B_I_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu1c  {
  bool v1;
  int v2;
  unsigned char v3:1;
};
//SIG(1 B_I_BFu1c) C1{ Fc Fi Fc:1}



static void Test_B_I_BFu1c()
{
  {
    init_simple_test("B_I_BFu1c");
    static B_I_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu1c)");
    check_field_offset(lv, v1, 0, "B_I_BFu1c.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_I_BFu1c");
  }
}
static Arrange_To_Call_Me vB_I_BFu1c(Test_B_I_BFu1c, "B_I_BFu1c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu1i  {
  bool v1;
  int v2;
  unsigned int v3:1;
};
//SIG(1 B_I_BFu1i) C1{ Fc Fi Fi:1}



static void Test_B_I_BFu1i()
{
  {
    init_simple_test("B_I_BFu1i");
    static B_I_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu1i)");
    check_field_offset(lv, v1, 0, "B_I_BFu1i.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_I_BFu1i");
  }
}
static Arrange_To_Call_Me vB_I_BFu1i(Test_B_I_BFu1i, "B_I_BFu1i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu1ll  {
  bool v1;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 B_I_BFu1ll) C1{ Fc Fi FL:1}



static void Test_B_I_BFu1ll()
{
  {
    init_simple_test("B_I_BFu1ll");
    static B_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_I_BFu1ll.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_I_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_I_BFu1ll(Test_B_I_BFu1ll, "B_I_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu1s  {
  bool v1;
  int v2;
  unsigned short v3:1;
};
//SIG(1 B_I_BFu1s) C1{ Fc Fi Fs:1}



static void Test_B_I_BFu1s()
{
  {
    init_simple_test("B_I_BFu1s");
    static B_I_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu1s)");
    check_field_offset(lv, v1, 0, "B_I_BFu1s.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_I_BFu1s");
  }
}
static Arrange_To_Call_Me vB_I_BFu1s(Test_B_I_BFu1s, "B_I_BFu1s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu31i  {
  bool v1;
  int v2;
  unsigned int v3:31;
};
//SIG(1 B_I_BFu31i) C1{ Fc Fi Fi:31}



static void Test_B_I_BFu31i()
{
  {
    init_simple_test("B_I_BFu31i");
    static B_I_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu31i)");
    check_field_offset(lv, v1, 0, "B_I_BFu31i.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_I_BFu31i");
  }
}
static Arrange_To_Call_Me vB_I_BFu31i(Test_B_I_BFu31i, "B_I_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu31ll  {
  bool v1;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 B_I_BFu31ll) C1{ Fc Fi FL:31}



static void Test_B_I_BFu31ll()
{
  {
    init_simple_test("B_I_BFu31ll");
    static B_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_I_BFu31ll.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_I_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_I_BFu31ll(Test_B_I_BFu31ll, "B_I_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu32i  {
  bool v1;
  int v2;
  unsigned int v3:32;
};
//SIG(1 B_I_BFu32i) C1{ Fc Fi Fi:32}



static void Test_B_I_BFu32i()
{
  {
    init_simple_test("B_I_BFu32i");
    static B_I_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu32i)");
    check_field_offset(lv, v1, 0, "B_I_BFu32i.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_I_BFu32i");
  }
}
static Arrange_To_Call_Me vB_I_BFu32i(Test_B_I_BFu32i, "B_I_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu32ll  {
  bool v1;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 B_I_BFu32ll) C1{ Fc Fi FL:32}



static void Test_B_I_BFu32ll()
{
  {
    init_simple_test("B_I_BFu32ll");
    static B_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_I_BFu32ll.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_I_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_I_BFu32ll(Test_B_I_BFu32ll, "B_I_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu33  {
  bool v1;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 B_I_BFu33) C1{ Fc Fi FL:33}



static void Test_B_I_BFu33()
{
  {
    init_simple_test("B_I_BFu33");
    static B_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(B_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu33)");
    check_field_offset(lv, v1, 0, "B_I_BFu33.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "B_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "B_I_BFu33");
  }
}
static Arrange_To_Call_Me vB_I_BFu33(Test_B_I_BFu33, "B_I_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu7c  {
  bool v1;
  int v2;
  unsigned char v3:7;
};
//SIG(1 B_I_BFu7c) C1{ Fc Fi Fc:7}



static void Test_B_I_BFu7c()
{
  {
    init_simple_test("B_I_BFu7c");
    static B_I_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu7c)");
    check_field_offset(lv, v1, 0, "B_I_BFu7c.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_I_BFu7c");
  }
}
static Arrange_To_Call_Me vB_I_BFu7c(Test_B_I_BFu7c, "B_I_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu7i  {
  bool v1;
  int v2;
  unsigned int v3:7;
};
//SIG(1 B_I_BFu7i) C1{ Fc Fi Fi:7}



static void Test_B_I_BFu7i()
{
  {
    init_simple_test("B_I_BFu7i");
    static B_I_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu7i)");
    check_field_offset(lv, v1, 0, "B_I_BFu7i.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_I_BFu7i");
  }
}
static Arrange_To_Call_Me vB_I_BFu7i(Test_B_I_BFu7i, "B_I_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu7ll  {
  bool v1;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 B_I_BFu7ll) C1{ Fc Fi FL:7}



static void Test_B_I_BFu7ll()
{
  {
    init_simple_test("B_I_BFu7ll");
    static B_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_I_BFu7ll.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_I_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_I_BFu7ll(Test_B_I_BFu7ll, "B_I_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu7s  {
  bool v1;
  int v2;
  unsigned short v3:7;
};
//SIG(1 B_I_BFu7s) C1{ Fc Fi Fs:7}



static void Test_B_I_BFu7s()
{
  {
    init_simple_test("B_I_BFu7s");
    static B_I_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu7s)");
    check_field_offset(lv, v1, 0, "B_I_BFu7s.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_I_BFu7s");
  }
}
static Arrange_To_Call_Me vB_I_BFu7s(Test_B_I_BFu7s, "B_I_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu8c  {
  bool v1;
  int v2;
  unsigned char v3:8;
};
//SIG(1 B_I_BFu8c) C1{ Fc Fi Fc:8}



static void Test_B_I_BFu8c()
{
  {
    init_simple_test("B_I_BFu8c");
    static B_I_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu8c)");
    check_field_offset(lv, v1, 0, "B_I_BFu8c.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_I_BFu8c");
  }
}
static Arrange_To_Call_Me vB_I_BFu8c(Test_B_I_BFu8c, "B_I_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu8i  {
  bool v1;
  int v2;
  unsigned int v3:8;
};
//SIG(1 B_I_BFu8i) C1{ Fc Fi Fi:8}



static void Test_B_I_BFu8i()
{
  {
    init_simple_test("B_I_BFu8i");
    static B_I_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu8i)");
    check_field_offset(lv, v1, 0, "B_I_BFu8i.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_I_BFu8i");
  }
}
static Arrange_To_Call_Me vB_I_BFu8i(Test_B_I_BFu8i, "B_I_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu8ll  {
  bool v1;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 B_I_BFu8ll) C1{ Fc Fi FL:8}



static void Test_B_I_BFu8ll()
{
  {
    init_simple_test("B_I_BFu8ll");
    static B_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_I_BFu8ll.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_I_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_I_BFu8ll(Test_B_I_BFu8ll, "B_I_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu8s  {
  bool v1;
  int v2;
  unsigned short v3:8;
};
//SIG(1 B_I_BFu8s) C1{ Fc Fi Fs:8}



static void Test_B_I_BFu8s()
{
  {
    init_simple_test("B_I_BFu8s");
    static B_I_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu8s)");
    check_field_offset(lv, v1, 0, "B_I_BFu8s.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_I_BFu8s");
  }
}
static Arrange_To_Call_Me vB_I_BFu8s(Test_B_I_BFu8s, "B_I_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu9i  {
  bool v1;
  int v2;
  unsigned int v3:9;
};
//SIG(1 B_I_BFu9i) C1{ Fc Fi Fi:9}



static void Test_B_I_BFu9i()
{
  {
    init_simple_test("B_I_BFu9i");
    static B_I_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu9i)");
    check_field_offset(lv, v1, 0, "B_I_BFu9i.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_I_BFu9i");
  }
}
static Arrange_To_Call_Me vB_I_BFu9i(Test_B_I_BFu9i, "B_I_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu9ll  {
  bool v1;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 B_I_BFu9ll) C1{ Fc Fi FL:9}



static void Test_B_I_BFu9ll()
{
  {
    init_simple_test("B_I_BFu9ll");
    static B_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_I_BFu9ll.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_I_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_I_BFu9ll(Test_B_I_BFu9ll, "B_I_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_BFu9s  {
  bool v1;
  int v2;
  unsigned short v3:9;
};
//SIG(1 B_I_BFu9s) C1{ Fc Fi Fs:9}



static void Test_B_I_BFu9s()
{
  {
    init_simple_test("B_I_BFu9s");
    static B_I_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(B_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_BFu9s)");
    check_field_offset(lv, v1, 0, "B_I_BFu9s.v1");
    check_field_offset(lv, v2, 4, "B_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_I_BFu9s");
  }
}
static Arrange_To_Call_Me vB_I_BFu9s(Test_B_I_BFu9s, "B_I_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_C  {
  bool v1;
  int v2;
  char v3;
};
//SIG(1 B_I_C) C1{ Fc Fi Fc}



static void Test_B_I_C()
{
  {
    init_simple_test("B_I_C");
    B_I_C lv;
    check2(sizeof(lv), 12, "sizeof(B_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_C)");
    check_field_offset(lv, v1, 0, "B_I_C.v1");
    check_field_offset(lv, v2, 4, "B_I_C.v2");
    check_field_offset(lv, v3, 8, "B_I_C.v3");
  }
}
static Arrange_To_Call_Me vB_I_C(Test_B_I_C, "B_I_C", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_D  {
  bool v1;
  int v2;
  double v3;
};
//SIG(1 B_I_D) C1{ Fc Fi FL}



static void Test_B_I_D()
{
  {
    init_simple_test("B_I_D");
    B_I_D lv;
    check2(sizeof(lv), 16, "sizeof(B_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_D)");
    check_field_offset(lv, v1, 0, "B_I_D.v1");
    check_field_offset(lv, v2, 4, "B_I_D.v2");
    check_field_offset(lv, v3, 8, "B_I_D.v3");
  }
}
static Arrange_To_Call_Me vB_I_D(Test_B_I_D, "B_I_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_F  {
  bool v1;
  int v2;
  float v3;
};
//SIG(1 B_I_F) C1{ Fc Fi[2]}



static void Test_B_I_F()
{
  {
    init_simple_test("B_I_F");
    B_I_F lv;
    check2(sizeof(lv), 12, "sizeof(B_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_F)");
    check_field_offset(lv, v1, 0, "B_I_F.v1");
    check_field_offset(lv, v2, 4, "B_I_F.v2");
    check_field_offset(lv, v3, 8, "B_I_F.v3");
  }
}
static Arrange_To_Call_Me vB_I_F(Test_B_I_F, "B_I_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_I  {
  bool v1;
  int v2;
  int v3;
};
//SIG(1 B_I_I) C1{ Fc Fi[2]}



static void Test_B_I_I()
{
  {
    init_simple_test("B_I_I");
    B_I_I lv;
    check2(sizeof(lv), 12, "sizeof(B_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_I)");
    check_field_offset(lv, v1, 0, "B_I_I.v1");
    check_field_offset(lv, v2, 4, "B_I_I.v2");
    check_field_offset(lv, v3, 8, "B_I_I.v3");
  }
}
static Arrange_To_Call_Me vB_I_I(Test_B_I_I, "B_I_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_Ip  {
  bool v1;
  int v2;
  int *v3;
};
//SIG(1 B_I_Ip) C1{ Fc Fi Fp}



static void Test_B_I_Ip()
{
  {
    init_simple_test("B_I_Ip");
    B_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_Ip)");
    check_field_offset(lv, v1, 0, "B_I_Ip.v1");
    check_field_offset(lv, v2, 4, "B_I_Ip.v2");
    check_field_offset(lv, v3, 8, "B_I_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_I_Ip(Test_B_I_Ip, "B_I_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_L  {
  bool v1;
  int v2;
  __tsi64 v3;
};
//SIG(1 B_I_L) C1{ Fc Fi FL}



static void Test_B_I_L()
{
  {
    init_simple_test("B_I_L");
    B_I_L lv;
    check2(sizeof(lv), 16, "sizeof(B_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_L)");
    check_field_offset(lv, v1, 0, "B_I_L.v1");
    check_field_offset(lv, v2, 4, "B_I_L.v2");
    check_field_offset(lv, v3, 8, "B_I_L.v3");
  }
}
static Arrange_To_Call_Me vB_I_L(Test_B_I_L, "B_I_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_S  {
  bool v1;
  int v2;
  short v3;
};
//SIG(1 B_I_S) C1{ Fc Fi Fs}



static void Test_B_I_S()
{
  {
    init_simple_test("B_I_S");
    B_I_S lv;
    check2(sizeof(lv), 12, "sizeof(B_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_S)");
    check_field_offset(lv, v1, 0, "B_I_S.v1");
    check_field_offset(lv, v2, 4, "B_I_S.v2");
    check_field_offset(lv, v3, 8, "B_I_S.v3");
  }
}
static Arrange_To_Call_Me vB_I_S(Test_B_I_S, "B_I_S", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_Uc  {
  bool v1;
  int v2;
  unsigned char v3;
};
//SIG(1 B_I_Uc) C1{ Fc Fi Fc}



static void Test_B_I_Uc()
{
  {
    init_simple_test("B_I_Uc");
    B_I_Uc lv;
    check2(sizeof(lv), 12, "sizeof(B_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_Uc)");
    check_field_offset(lv, v1, 0, "B_I_Uc.v1");
    check_field_offset(lv, v2, 4, "B_I_Uc.v2");
    check_field_offset(lv, v3, 8, "B_I_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_I_Uc(Test_B_I_Uc, "B_I_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_Ui  {
  bool v1;
  int v2;
  unsigned int v3;
};
//SIG(1 B_I_Ui) C1{ Fc Fi[2]}



static void Test_B_I_Ui()
{
  {
    init_simple_test("B_I_Ui");
    B_I_Ui lv;
    check2(sizeof(lv), 12, "sizeof(B_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_Ui)");
    check_field_offset(lv, v1, 0, "B_I_Ui.v1");
    check_field_offset(lv, v2, 4, "B_I_Ui.v2");
    check_field_offset(lv, v3, 8, "B_I_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_I_Ui(Test_B_I_Ui, "B_I_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_Ul  {
  bool v1;
  int v2;
  __tsu64 v3;
};
//SIG(1 B_I_Ul) C1{ Fc Fi FL}



static void Test_B_I_Ul()
{
  {
    init_simple_test("B_I_Ul");
    B_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(B_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_Ul)");
    check_field_offset(lv, v1, 0, "B_I_Ul.v1");
    check_field_offset(lv, v2, 4, "B_I_Ul.v2");
    check_field_offset(lv, v3, 8, "B_I_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_I_Ul(Test_B_I_Ul, "B_I_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_Us  {
  bool v1;
  int v2;
  unsigned short v3;
};
//SIG(1 B_I_Us) C1{ Fc Fi Fs}



static void Test_B_I_Us()
{
  {
    init_simple_test("B_I_Us");
    B_I_Us lv;
    check2(sizeof(lv), 12, "sizeof(B_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_I_Us)");
    check_field_offset(lv, v1, 0, "B_I_Us.v1");
    check_field_offset(lv, v2, 4, "B_I_Us.v2");
    check_field_offset(lv, v3, 8, "B_I_Us.v3");
  }
}
static Arrange_To_Call_Me vB_I_Us(Test_B_I_Us, "B_I_Us", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_I_Vp  {
  bool v1;
  int v2;
  void *v3;
};
//SIG(1 B_I_Vp) C1{ Fc Fi Fp}



static void Test_B_I_Vp()
{
  {
    init_simple_test("B_I_Vp");
    B_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_I_Vp)");
    check_field_offset(lv, v1, 0, "B_I_Vp.v1");
    check_field_offset(lv, v2, 4, "B_I_Vp.v2");
    check_field_offset(lv, v3, 8, "B_I_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_I_Vp(Test_B_I_Vp, "B_I_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip  {
  bool v1;
  int *v2;
};
//SIG(1 B_Ip) C1{ Fc Fp}



static void Test_B_Ip()
{
  {
    init_simple_test("B_Ip");
    B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip)");
    check_field_offset(lv, v1, 0, "B_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip.v2");
  }
}
static Arrange_To_Call_Me vB_Ip(Test_B_Ip, "B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_B  {
  bool v1;
  int *v2;
  bool v3;
};
//SIG(1 B_Ip_B) C1{ Fc Fp Fc}



static void Test_B_Ip_B()
{
  {
    init_simple_test("B_Ip_B");
    B_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_B)");
    check_field_offset(lv, v1, 0, "B_Ip_B.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_B(Test_B_Ip_B, "B_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu15i  {
  bool v1;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 B_Ip_BFu15i) C1{ Fc Fp Fi:15}



static void Test_B_Ip_BFu15i()
{
  {
    init_simple_test("B_Ip_BFu15i");
    static B_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu15i)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "B_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "B_Ip_BFu15i");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu15i(Test_B_Ip_BFu15i, "B_Ip_BFu15i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu15ll  {
  bool v1;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 B_Ip_BFu15ll) C1{ Fc Fp FL:15}



static void Test_B_Ip_BFu15ll()
{
  {
    init_simple_test("B_Ip_BFu15ll");
    static B_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "B_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "B_Ip_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu15ll(Test_B_Ip_BFu15ll, "B_Ip_BFu15ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu15s  {
  bool v1;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 B_Ip_BFu15s) C1{ Fc Fp Fs:15}



static void Test_B_Ip_BFu15s()
{
  {
    init_simple_test("B_Ip_BFu15s");
    static B_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu15s)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "B_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "B_Ip_BFu15s");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu15s(Test_B_Ip_BFu15s, "B_Ip_BFu15s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu16i  {
  bool v1;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 B_Ip_BFu16i) C1{ Fc Fp Fi:16}



static void Test_B_Ip_BFu16i()
{
  {
    init_simple_test("B_Ip_BFu16i");
    static B_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu16i)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "B_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "B_Ip_BFu16i");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu16i(Test_B_Ip_BFu16i, "B_Ip_BFu16i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu16ll  {
  bool v1;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 B_Ip_BFu16ll) C1{ Fc Fp FL:16}



static void Test_B_Ip_BFu16ll()
{
  {
    init_simple_test("B_Ip_BFu16ll");
    static B_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "B_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "B_Ip_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu16ll(Test_B_Ip_BFu16ll, "B_Ip_BFu16ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu16s  {
  bool v1;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 B_Ip_BFu16s) C1{ Fc Fp Fs:16}



static void Test_B_Ip_BFu16s()
{
  {
    init_simple_test("B_Ip_BFu16s");
    static B_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu16s)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "B_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "B_Ip_BFu16s");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu16s(Test_B_Ip_BFu16s, "B_Ip_BFu16s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu17i  {
  bool v1;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 B_Ip_BFu17i) C1{ Fc Fp Fi:17}



static void Test_B_Ip_BFu17i()
{
  {
    init_simple_test("B_Ip_BFu17i");
    static B_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu17i)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "B_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "B_Ip_BFu17i");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu17i(Test_B_Ip_BFu17i, "B_Ip_BFu17i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu17ll  {
  bool v1;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 B_Ip_BFu17ll) C1{ Fc Fp FL:17}



static void Test_B_Ip_BFu17ll()
{
  {
    init_simple_test("B_Ip_BFu17ll");
    static B_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "B_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "B_Ip_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu17ll(Test_B_Ip_BFu17ll, "B_Ip_BFu17ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu1c  {
  bool v1;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 B_Ip_BFu1c) C1{ Fc Fp Fc:1}



static void Test_B_Ip_BFu1c()
{
  {
    init_simple_test("B_Ip_BFu1c");
    static B_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu1c)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "B_Ip_BFu1c");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu1c(Test_B_Ip_BFu1c, "B_Ip_BFu1c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu1i  {
  bool v1;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 B_Ip_BFu1i) C1{ Fc Fp Fi:1}



static void Test_B_Ip_BFu1i()
{
  {
    init_simple_test("B_Ip_BFu1i");
    static B_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu1i)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "B_Ip_BFu1i");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu1i(Test_B_Ip_BFu1i, "B_Ip_BFu1i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu1ll  {
  bool v1;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 B_Ip_BFu1ll) C1{ Fc Fp FL:1}



static void Test_B_Ip_BFu1ll()
{
  {
    init_simple_test("B_Ip_BFu1ll");
    static B_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "B_Ip_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu1ll(Test_B_Ip_BFu1ll, "B_Ip_BFu1ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu1s  {
  bool v1;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 B_Ip_BFu1s) C1{ Fc Fp Fs:1}



static void Test_B_Ip_BFu1s()
{
  {
    init_simple_test("B_Ip_BFu1s");
    static B_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu1s)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "B_Ip_BFu1s");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu1s(Test_B_Ip_BFu1s, "B_Ip_BFu1s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu31i  {
  bool v1;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 B_Ip_BFu31i) C1{ Fc Fp Fi:31}



static void Test_B_Ip_BFu31i()
{
  {
    init_simple_test("B_Ip_BFu31i");
    static B_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu31i)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "B_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "B_Ip_BFu31i");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu31i(Test_B_Ip_BFu31i, "B_Ip_BFu31i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu31ll  {
  bool v1;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 B_Ip_BFu31ll) C1{ Fc Fp FL:31}



static void Test_B_Ip_BFu31ll()
{
  {
    init_simple_test("B_Ip_BFu31ll");
    static B_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "B_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "B_Ip_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu31ll(Test_B_Ip_BFu31ll, "B_Ip_BFu31ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu32i  {
  bool v1;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 B_Ip_BFu32i) C1{ Fc Fp Fi:32}



static void Test_B_Ip_BFu32i()
{
  {
    init_simple_test("B_Ip_BFu32i");
    static B_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu32i)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "B_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "B_Ip_BFu32i");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu32i(Test_B_Ip_BFu32i, "B_Ip_BFu32i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu32ll  {
  bool v1;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 B_Ip_BFu32ll) C1{ Fc Fp FL:32}



static void Test_B_Ip_BFu32ll()
{
  {
    init_simple_test("B_Ip_BFu32ll");
    static B_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "B_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "B_Ip_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu32ll(Test_B_Ip_BFu32ll, "B_Ip_BFu32ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu33  {
  bool v1;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 B_Ip_BFu33) C1{ Fc Fp FL:33}



static void Test_B_Ip_BFu33()
{
  {
    init_simple_test("B_Ip_BFu33");
    static B_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu33)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "B_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "B_Ip_BFu33");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu33(Test_B_Ip_BFu33, "B_Ip_BFu33", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu7c  {
  bool v1;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 B_Ip_BFu7c) C1{ Fc Fp Fc:7}



static void Test_B_Ip_BFu7c()
{
  {
    init_simple_test("B_Ip_BFu7c");
    static B_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu7c)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "B_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "B_Ip_BFu7c");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu7c(Test_B_Ip_BFu7c, "B_Ip_BFu7c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu7i  {
  bool v1;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 B_Ip_BFu7i) C1{ Fc Fp Fi:7}



static void Test_B_Ip_BFu7i()
{
  {
    init_simple_test("B_Ip_BFu7i");
    static B_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu7i)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "B_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "B_Ip_BFu7i");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu7i(Test_B_Ip_BFu7i, "B_Ip_BFu7i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu7ll  {
  bool v1;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 B_Ip_BFu7ll) C1{ Fc Fp FL:7}



static void Test_B_Ip_BFu7ll()
{
  {
    init_simple_test("B_Ip_BFu7ll");
    static B_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "B_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "B_Ip_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu7ll(Test_B_Ip_BFu7ll, "B_Ip_BFu7ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu7s  {
  bool v1;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 B_Ip_BFu7s) C1{ Fc Fp Fs:7}



static void Test_B_Ip_BFu7s()
{
  {
    init_simple_test("B_Ip_BFu7s");
    static B_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu7s)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "B_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "B_Ip_BFu7s");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu7s(Test_B_Ip_BFu7s, "B_Ip_BFu7s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu8c  {
  bool v1;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 B_Ip_BFu8c) C1{ Fc Fp Fc:8}



static void Test_B_Ip_BFu8c()
{
  {
    init_simple_test("B_Ip_BFu8c");
    static B_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu8c)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "B_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "B_Ip_BFu8c");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu8c(Test_B_Ip_BFu8c, "B_Ip_BFu8c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu8i  {
  bool v1;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 B_Ip_BFu8i) C1{ Fc Fp Fi:8}



static void Test_B_Ip_BFu8i()
{
  {
    init_simple_test("B_Ip_BFu8i");
    static B_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu8i)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "B_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "B_Ip_BFu8i");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu8i(Test_B_Ip_BFu8i, "B_Ip_BFu8i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu8ll  {
  bool v1;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 B_Ip_BFu8ll) C1{ Fc Fp FL:8}



static void Test_B_Ip_BFu8ll()
{
  {
    init_simple_test("B_Ip_BFu8ll");
    static B_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "B_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "B_Ip_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu8ll(Test_B_Ip_BFu8ll, "B_Ip_BFu8ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu8s  {
  bool v1;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 B_Ip_BFu8s) C1{ Fc Fp Fs:8}



static void Test_B_Ip_BFu8s()
{
  {
    init_simple_test("B_Ip_BFu8s");
    static B_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu8s)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "B_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "B_Ip_BFu8s");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu8s(Test_B_Ip_BFu8s, "B_Ip_BFu8s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu9i  {
  bool v1;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 B_Ip_BFu9i) C1{ Fc Fp Fi:9}



static void Test_B_Ip_BFu9i()
{
  {
    init_simple_test("B_Ip_BFu9i");
    static B_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu9i)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "B_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "B_Ip_BFu9i");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu9i(Test_B_Ip_BFu9i, "B_Ip_BFu9i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu9ll  {
  bool v1;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 B_Ip_BFu9ll) C1{ Fc Fp FL:9}



static void Test_B_Ip_BFu9ll()
{
  {
    init_simple_test("B_Ip_BFu9ll");
    static B_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "B_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "B_Ip_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu9ll(Test_B_Ip_BFu9ll, "B_Ip_BFu9ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_BFu9s  {
  bool v1;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 B_Ip_BFu9s) C1{ Fc Fp Fs:9}



static void Test_B_Ip_BFu9s()
{
  {
    init_simple_test("B_Ip_BFu9s");
    static B_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_BFu9s)");
    check_field_offset(lv, v1, 0, "B_Ip_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "B_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "B_Ip_BFu9s");
  }
}
static Arrange_To_Call_Me vB_Ip_BFu9s(Test_B_Ip_BFu9s, "B_Ip_BFu9s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_C  {
  bool v1;
  int *v2;
  char v3;
};
//SIG(1 B_Ip_C) C1{ Fc Fp Fc}



static void Test_B_Ip_C()
{
  {
    init_simple_test("B_Ip_C");
    B_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_C)");
    check_field_offset(lv, v1, 0, "B_Ip_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_C.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_C(Test_B_Ip_C, "B_Ip_C", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_D  {
  bool v1;
  int *v2;
  double v3;
};
//SIG(1 B_Ip_D) C1{ Fc Fp FL}



static void Test_B_Ip_D()
{
  {
    init_simple_test("B_Ip_D");
    B_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_D)");
    check_field_offset(lv, v1, 0, "B_Ip_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_D.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_D(Test_B_Ip_D, "B_Ip_D", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_F  {
  bool v1;
  int *v2;
  float v3;
};
//SIG(1 B_Ip_F) C1{ Fc Fp Fi}



static void Test_B_Ip_F()
{
  {
    init_simple_test("B_Ip_F");
    B_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_F)");
    check_field_offset(lv, v1, 0, "B_Ip_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_F.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_F(Test_B_Ip_F, "B_Ip_F", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_I  {
  bool v1;
  int *v2;
  int v3;
};
//SIG(1 B_Ip_I) C1{ Fc Fp Fi}



static void Test_B_Ip_I()
{
  {
    init_simple_test("B_Ip_I");
    B_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_I)");
    check_field_offset(lv, v1, 0, "B_Ip_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_I.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_I(Test_B_Ip_I, "B_Ip_I", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_Ip  {
  bool v1;
  int *v2;
  int *v3;
};
//SIG(1 B_Ip_Ip) C1{ Fc Fp[2]}



static void Test_B_Ip_Ip()
{
  {
    init_simple_test("B_Ip_Ip");
    B_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_Ip)");
    check_field_offset(lv, v1, 0, "B_Ip_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_Ip(Test_B_Ip_Ip, "B_Ip_Ip", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_L  {
  bool v1;
  int *v2;
  __tsi64 v3;
};
//SIG(1 B_Ip_L) C1{ Fc Fp FL}



static void Test_B_Ip_L()
{
  {
    init_simple_test("B_Ip_L");
    B_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_L)");
    check_field_offset(lv, v1, 0, "B_Ip_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_L.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_L(Test_B_Ip_L, "B_Ip_L", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_S  {
  bool v1;
  int *v2;
  short v3;
};
//SIG(1 B_Ip_S) C1{ Fc Fp Fs}



static void Test_B_Ip_S()
{
  {
    init_simple_test("B_Ip_S");
    B_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_S)");
    check_field_offset(lv, v1, 0, "B_Ip_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_S.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_S(Test_B_Ip_S, "B_Ip_S", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_Uc  {
  bool v1;
  int *v2;
  unsigned char v3;
};
//SIG(1 B_Ip_Uc) C1{ Fc Fp Fc}



static void Test_B_Ip_Uc()
{
  {
    init_simple_test("B_Ip_Uc");
    B_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_Uc)");
    check_field_offset(lv, v1, 0, "B_Ip_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_Uc(Test_B_Ip_Uc, "B_Ip_Uc", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_Ui  {
  bool v1;
  int *v2;
  unsigned int v3;
};
//SIG(1 B_Ip_Ui) C1{ Fc Fp Fi}



static void Test_B_Ip_Ui()
{
  {
    init_simple_test("B_Ip_Ui");
    B_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_Ui)");
    check_field_offset(lv, v1, 0, "B_Ip_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_Ui(Test_B_Ip_Ui, "B_Ip_Ui", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_Ul  {
  bool v1;
  int *v2;
  __tsu64 v3;
};
//SIG(1 B_Ip_Ul) C1{ Fc Fp FL}



static void Test_B_Ip_Ul()
{
  {
    init_simple_test("B_Ip_Ul");
    B_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_Ul)");
    check_field_offset(lv, v1, 0, "B_Ip_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_Ul(Test_B_Ip_Ul, "B_Ip_Ul", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_Us  {
  bool v1;
  int *v2;
  unsigned short v3;
};
//SIG(1 B_Ip_Us) C1{ Fc Fp Fs}



static void Test_B_Ip_Us()
{
  {
    init_simple_test("B_Ip_Us");
    B_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_Us)");
    check_field_offset(lv, v1, 0, "B_Ip_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_Us.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_Us(Test_B_Ip_Us, "B_Ip_Us", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ip_Vp  {
  bool v1;
  int *v2;
  void *v3;
};
//SIG(1 B_Ip_Vp) C1{ Fc Fp[2]}



static void Test_B_Ip_Vp()
{
  {
    init_simple_test("B_Ip_Vp");
    B_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ip_Vp)");
    check_field_offset(lv, v1, 0, "B_Ip_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Ip_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_Ip_Vp(Test_B_Ip_Vp, "B_Ip_Vp", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L  {
  bool v1;
  __tsi64 v2;
};
//SIG(1 B_L) C1{ Fc FL}



static void Test_B_L()
{
  {
    init_simple_test("B_L");
    B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L)");
    check_field_offset(lv, v1, 0, "B_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L.v2");
  }
}
static Arrange_To_Call_Me vB_L(Test_B_L, "B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_B  {
  bool v1;
  __tsi64 v2;
  bool v3;
};
//SIG(1 B_L_B) C1{ Fc FL Fc}



static void Test_B_L_B()
{
  {
    init_simple_test("B_L_B");
    B_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_B)");
    check_field_offset(lv, v1, 0, "B_L_B.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_B.v3");
  }
}
static Arrange_To_Call_Me vB_L_B(Test_B_L_B, "B_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu15i  {
  bool v1;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 B_L_BFu15i) C1{ Fc FL Fi:15}



static void Test_B_L_BFu15i()
{
  {
    init_simple_test("B_L_BFu15i");
    static B_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu15i)");
    check_field_offset(lv, v1, 0, "B_L_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "B_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "B_L_BFu15i");
  }
}
static Arrange_To_Call_Me vB_L_BFu15i(Test_B_L_BFu15i, "B_L_BFu15i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu15ll  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 B_L_BFu15ll) C1{ Fc FL FL:15}



static void Test_B_L_BFu15ll()
{
  {
    init_simple_test("B_L_BFu15ll");
    static B_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_L_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "B_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "B_L_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_L_BFu15ll(Test_B_L_BFu15ll, "B_L_BFu15ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu15s  {
  bool v1;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 B_L_BFu15s) C1{ Fc FL Fs:15}



static void Test_B_L_BFu15s()
{
  {
    init_simple_test("B_L_BFu15s");
    static B_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu15s)");
    check_field_offset(lv, v1, 0, "B_L_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "B_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "B_L_BFu15s");
  }
}
static Arrange_To_Call_Me vB_L_BFu15s(Test_B_L_BFu15s, "B_L_BFu15s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu16i  {
  bool v1;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 B_L_BFu16i) C1{ Fc FL Fi:16}



static void Test_B_L_BFu16i()
{
  {
    init_simple_test("B_L_BFu16i");
    static B_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu16i)");
    check_field_offset(lv, v1, 0, "B_L_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "B_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "B_L_BFu16i");
  }
}
static Arrange_To_Call_Me vB_L_BFu16i(Test_B_L_BFu16i, "B_L_BFu16i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu16ll  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 B_L_BFu16ll) C1{ Fc FL FL:16}



static void Test_B_L_BFu16ll()
{
  {
    init_simple_test("B_L_BFu16ll");
    static B_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_L_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "B_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "B_L_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_L_BFu16ll(Test_B_L_BFu16ll, "B_L_BFu16ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu16s  {
  bool v1;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 B_L_BFu16s) C1{ Fc FL Fs:16}



static void Test_B_L_BFu16s()
{
  {
    init_simple_test("B_L_BFu16s");
    static B_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu16s)");
    check_field_offset(lv, v1, 0, "B_L_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "B_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "B_L_BFu16s");
  }
}
static Arrange_To_Call_Me vB_L_BFu16s(Test_B_L_BFu16s, "B_L_BFu16s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu17i  {
  bool v1;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 B_L_BFu17i) C1{ Fc FL Fi:17}



static void Test_B_L_BFu17i()
{
  {
    init_simple_test("B_L_BFu17i");
    static B_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu17i)");
    check_field_offset(lv, v1, 0, "B_L_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "B_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "B_L_BFu17i");
  }
}
static Arrange_To_Call_Me vB_L_BFu17i(Test_B_L_BFu17i, "B_L_BFu17i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu17ll  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 B_L_BFu17ll) C1{ Fc FL FL:17}



static void Test_B_L_BFu17ll()
{
  {
    init_simple_test("B_L_BFu17ll");
    static B_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_L_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "B_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "B_L_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_L_BFu17ll(Test_B_L_BFu17ll, "B_L_BFu17ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu1c  {
  bool v1;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 B_L_BFu1c) C1{ Fc FL Fc:1}



static void Test_B_L_BFu1c()
{
  {
    init_simple_test("B_L_BFu1c");
    static B_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu1c)");
    check_field_offset(lv, v1, 0, "B_L_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_L_BFu1c");
  }
}
static Arrange_To_Call_Me vB_L_BFu1c(Test_B_L_BFu1c, "B_L_BFu1c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu1i  {
  bool v1;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 B_L_BFu1i) C1{ Fc FL Fi:1}



static void Test_B_L_BFu1i()
{
  {
    init_simple_test("B_L_BFu1i");
    static B_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu1i)");
    check_field_offset(lv, v1, 0, "B_L_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_L_BFu1i");
  }
}
static Arrange_To_Call_Me vB_L_BFu1i(Test_B_L_BFu1i, "B_L_BFu1i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu1ll  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 B_L_BFu1ll) C1{ Fc FL FL:1}



static void Test_B_L_BFu1ll()
{
  {
    init_simple_test("B_L_BFu1ll");
    static B_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_L_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_L_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_L_BFu1ll(Test_B_L_BFu1ll, "B_L_BFu1ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu1s  {
  bool v1;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 B_L_BFu1s) C1{ Fc FL Fs:1}



static void Test_B_L_BFu1s()
{
  {
    init_simple_test("B_L_BFu1s");
    static B_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu1s)");
    check_field_offset(lv, v1, 0, "B_L_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_L_BFu1s");
  }
}
static Arrange_To_Call_Me vB_L_BFu1s(Test_B_L_BFu1s, "B_L_BFu1s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu31i  {
  bool v1;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 B_L_BFu31i) C1{ Fc FL Fi:31}



static void Test_B_L_BFu31i()
{
  {
    init_simple_test("B_L_BFu31i");
    static B_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu31i)");
    check_field_offset(lv, v1, 0, "B_L_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "B_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "B_L_BFu31i");
  }
}
static Arrange_To_Call_Me vB_L_BFu31i(Test_B_L_BFu31i, "B_L_BFu31i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu31ll  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 B_L_BFu31ll) C1{ Fc FL FL:31}



static void Test_B_L_BFu31ll()
{
  {
    init_simple_test("B_L_BFu31ll");
    static B_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_L_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "B_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "B_L_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_L_BFu31ll(Test_B_L_BFu31ll, "B_L_BFu31ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu32i  {
  bool v1;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 B_L_BFu32i) C1{ Fc FL Fi:32}



static void Test_B_L_BFu32i()
{
  {
    init_simple_test("B_L_BFu32i");
    static B_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu32i)");
    check_field_offset(lv, v1, 0, "B_L_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "B_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "B_L_BFu32i");
  }
}
static Arrange_To_Call_Me vB_L_BFu32i(Test_B_L_BFu32i, "B_L_BFu32i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu32ll  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 B_L_BFu32ll) C1{ Fc FL FL:32}



static void Test_B_L_BFu32ll()
{
  {
    init_simple_test("B_L_BFu32ll");
    static B_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_L_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "B_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "B_L_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_L_BFu32ll(Test_B_L_BFu32ll, "B_L_BFu32ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu33  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 B_L_BFu33) C1{ Fc FL FL:33}



static void Test_B_L_BFu33()
{
  {
    init_simple_test("B_L_BFu33");
    static B_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu33)");
    check_field_offset(lv, v1, 0, "B_L_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "B_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "B_L_BFu33");
  }
}
static Arrange_To_Call_Me vB_L_BFu33(Test_B_L_BFu33, "B_L_BFu33", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu7c  {
  bool v1;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 B_L_BFu7c) C1{ Fc FL Fc:7}



static void Test_B_L_BFu7c()
{
  {
    init_simple_test("B_L_BFu7c");
    static B_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu7c)");
    check_field_offset(lv, v1, 0, "B_L_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_L_BFu7c");
  }
}
static Arrange_To_Call_Me vB_L_BFu7c(Test_B_L_BFu7c, "B_L_BFu7c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu7i  {
  bool v1;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 B_L_BFu7i) C1{ Fc FL Fi:7}



static void Test_B_L_BFu7i()
{
  {
    init_simple_test("B_L_BFu7i");
    static B_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu7i)");
    check_field_offset(lv, v1, 0, "B_L_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_L_BFu7i");
  }
}
static Arrange_To_Call_Me vB_L_BFu7i(Test_B_L_BFu7i, "B_L_BFu7i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu7ll  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 B_L_BFu7ll) C1{ Fc FL FL:7}



static void Test_B_L_BFu7ll()
{
  {
    init_simple_test("B_L_BFu7ll");
    static B_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_L_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_L_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_L_BFu7ll(Test_B_L_BFu7ll, "B_L_BFu7ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu7s  {
  bool v1;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 B_L_BFu7s) C1{ Fc FL Fs:7}



static void Test_B_L_BFu7s()
{
  {
    init_simple_test("B_L_BFu7s");
    static B_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu7s)");
    check_field_offset(lv, v1, 0, "B_L_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_L_BFu7s");
  }
}
static Arrange_To_Call_Me vB_L_BFu7s(Test_B_L_BFu7s, "B_L_BFu7s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu8c  {
  bool v1;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 B_L_BFu8c) C1{ Fc FL Fc:8}



static void Test_B_L_BFu8c()
{
  {
    init_simple_test("B_L_BFu8c");
    static B_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu8c)");
    check_field_offset(lv, v1, 0, "B_L_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_L_BFu8c");
  }
}
static Arrange_To_Call_Me vB_L_BFu8c(Test_B_L_BFu8c, "B_L_BFu8c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu8i  {
  bool v1;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 B_L_BFu8i) C1{ Fc FL Fi:8}



static void Test_B_L_BFu8i()
{
  {
    init_simple_test("B_L_BFu8i");
    static B_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu8i)");
    check_field_offset(lv, v1, 0, "B_L_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_L_BFu8i");
  }
}
static Arrange_To_Call_Me vB_L_BFu8i(Test_B_L_BFu8i, "B_L_BFu8i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu8ll  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 B_L_BFu8ll) C1{ Fc FL FL:8}



static void Test_B_L_BFu8ll()
{
  {
    init_simple_test("B_L_BFu8ll");
    static B_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_L_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_L_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_L_BFu8ll(Test_B_L_BFu8ll, "B_L_BFu8ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu8s  {
  bool v1;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 B_L_BFu8s) C1{ Fc FL Fs:8}



static void Test_B_L_BFu8s()
{
  {
    init_simple_test("B_L_BFu8s");
    static B_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu8s)");
    check_field_offset(lv, v1, 0, "B_L_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_L_BFu8s");
  }
}
static Arrange_To_Call_Me vB_L_BFu8s(Test_B_L_BFu8s, "B_L_BFu8s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu9i  {
  bool v1;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 B_L_BFu9i) C1{ Fc FL Fi:9}



static void Test_B_L_BFu9i()
{
  {
    init_simple_test("B_L_BFu9i");
    static B_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu9i)");
    check_field_offset(lv, v1, 0, "B_L_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "B_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "B_L_BFu9i");
  }
}
static Arrange_To_Call_Me vB_L_BFu9i(Test_B_L_BFu9i, "B_L_BFu9i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu9ll  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 B_L_BFu9ll) C1{ Fc FL FL:9}



static void Test_B_L_BFu9ll()
{
  {
    init_simple_test("B_L_BFu9ll");
    static B_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_L_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "B_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "B_L_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_L_BFu9ll(Test_B_L_BFu9ll, "B_L_BFu9ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_BFu9s  {
  bool v1;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 B_L_BFu9s) C1{ Fc FL Fs:9}



static void Test_B_L_BFu9s()
{
  {
    init_simple_test("B_L_BFu9s");
    static B_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_BFu9s)");
    check_field_offset(lv, v1, 0, "B_L_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "B_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "B_L_BFu9s");
  }
}
static Arrange_To_Call_Me vB_L_BFu9s(Test_B_L_BFu9s, "B_L_BFu9s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_C  {
  bool v1;
  __tsi64 v2;
  char v3;
};
//SIG(1 B_L_C) C1{ Fc FL Fc}



static void Test_B_L_C()
{
  {
    init_simple_test("B_L_C");
    B_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_C)");
    check_field_offset(lv, v1, 0, "B_L_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_C.v3");
  }
}
static Arrange_To_Call_Me vB_L_C(Test_B_L_C, "B_L_C", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_D  {
  bool v1;
  __tsi64 v2;
  double v3;
};
//SIG(1 B_L_D) C1{ Fc FL[2]}



static void Test_B_L_D()
{
  {
    init_simple_test("B_L_D");
    B_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_D)");
    check_field_offset(lv, v1, 0, "B_L_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_D.v3");
  }
}
static Arrange_To_Call_Me vB_L_D(Test_B_L_D, "B_L_D", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_F  {
  bool v1;
  __tsi64 v2;
  float v3;
};
//SIG(1 B_L_F) C1{ Fc FL Fi}



static void Test_B_L_F()
{
  {
    init_simple_test("B_L_F");
    B_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_F)");
    check_field_offset(lv, v1, 0, "B_L_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_F.v3");
  }
}
static Arrange_To_Call_Me vB_L_F(Test_B_L_F, "B_L_F", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_I  {
  bool v1;
  __tsi64 v2;
  int v3;
};
//SIG(1 B_L_I) C1{ Fc FL Fi}



static void Test_B_L_I()
{
  {
    init_simple_test("B_L_I");
    B_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_I)");
    check_field_offset(lv, v1, 0, "B_L_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_I.v3");
  }
}
static Arrange_To_Call_Me vB_L_I(Test_B_L_I, "B_L_I", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_Ip  {
  bool v1;
  __tsi64 v2;
  int *v3;
};
//SIG(1 B_L_Ip) C1{ Fc FL Fp}



static void Test_B_L_Ip()
{
  {
    init_simple_test("B_L_Ip");
    B_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_Ip)");
    check_field_offset(lv, v1, 0, "B_L_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_L_Ip(Test_B_L_Ip, "B_L_Ip", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_L  {
  bool v1;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 B_L_L) C1{ Fc FL[2]}



static void Test_B_L_L()
{
  {
    init_simple_test("B_L_L");
    B_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_L)");
    check_field_offset(lv, v1, 0, "B_L_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_L.v3");
  }
}
static Arrange_To_Call_Me vB_L_L(Test_B_L_L, "B_L_L", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_S  {
  bool v1;
  __tsi64 v2;
  short v3;
};
//SIG(1 B_L_S) C1{ Fc FL Fs}



static void Test_B_L_S()
{
  {
    init_simple_test("B_L_S");
    B_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_S)");
    check_field_offset(lv, v1, 0, "B_L_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_S.v3");
  }
}
static Arrange_To_Call_Me vB_L_S(Test_B_L_S, "B_L_S", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_Uc  {
  bool v1;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 B_L_Uc) C1{ Fc FL Fc}



static void Test_B_L_Uc()
{
  {
    init_simple_test("B_L_Uc");
    B_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_Uc)");
    check_field_offset(lv, v1, 0, "B_L_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_L_Uc(Test_B_L_Uc, "B_L_Uc", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_Ui  {
  bool v1;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 B_L_Ui) C1{ Fc FL Fi}



static void Test_B_L_Ui()
{
  {
    init_simple_test("B_L_Ui");
    B_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_Ui)");
    check_field_offset(lv, v1, 0, "B_L_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_L_Ui(Test_B_L_Ui, "B_L_Ui", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_Ul  {
  bool v1;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 B_L_Ul) C1{ Fc FL[2]}



static void Test_B_L_Ul()
{
  {
    init_simple_test("B_L_Ul");
    B_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_Ul)");
    check_field_offset(lv, v1, 0, "B_L_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_L_Ul(Test_B_L_Ul, "B_L_Ul", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_Us  {
  bool v1;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 B_L_Us) C1{ Fc FL Fs}



static void Test_B_L_Us()
{
  {
    init_simple_test("B_L_Us");
    B_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_Us)");
    check_field_offset(lv, v1, 0, "B_L_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_Us.v3");
  }
}
static Arrange_To_Call_Me vB_L_Us(Test_B_L_Us, "B_L_Us", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_L_Vp  {
  bool v1;
  __tsi64 v2;
  void *v3;
};
//SIG(1 B_L_Vp) C1{ Fc FL Fp}



static void Test_B_L_Vp()
{
  {
    init_simple_test("B_L_Vp");
    B_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_L_Vp)");
    check_field_offset(lv, v1, 0, "B_L_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_L_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_L_Vp(Test_B_L_Vp, "B_L_Vp", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S  {
  bool v1;
  short v2;
};
//SIG(1 B_S) C1{ Fc Fs}



static void Test_B_S()
{
  {
    init_simple_test("B_S");
    B_S lv;
    check2(sizeof(lv), 4, "sizeof(B_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_S)");
    check_field_offset(lv, v1, 0, "B_S.v1");
    check_field_offset(lv, v2, 2, "B_S.v2");
  }
}
static Arrange_To_Call_Me vB_S(Test_B_S, "B_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_B  {
  bool v1;
  short v2;
  bool v3;
};
//SIG(1 B_S_B) C1{ Fc Fs Fc}



static void Test_B_S_B()
{
  {
    init_simple_test("B_S_B");
    B_S_B lv;
    check2(sizeof(lv), 6, "sizeof(B_S_B)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_B)");
    check_field_offset(lv, v1, 0, "B_S_B.v1");
    check_field_offset(lv, v2, 2, "B_S_B.v2");
    check_field_offset(lv, v3, 4, "B_S_B.v3");
  }
}
static Arrange_To_Call_Me vB_S_B(Test_B_S_B, "B_S_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu15i  {
  bool v1;
  short v2;
  unsigned int v3:15;
};
//SIG(1 B_S_BFu15i) C1{ Fc Fs Fi:15}



static void Test_B_S_BFu15i()
{
  {
    init_simple_test("B_S_BFu15i");
    static B_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_BFu15i)");
    check_field_offset(lv, v1, 0, "B_S_BFu15i.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_S_BFu15i");
  }
}
static Arrange_To_Call_Me vB_S_BFu15i(Test_B_S_BFu15i, "B_S_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu15ll  {
  bool v1;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 B_S_BFu15ll) C1{ Fc Fs FL:15}



static void Test_B_S_BFu15ll()
{
  {
    init_simple_test("B_S_BFu15ll");
    static B_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_S_BFu15ll.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_S_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_S_BFu15ll(Test_B_S_BFu15ll, "B_S_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu15s  {
  bool v1;
  short v2;
  unsigned short v3:15;
};
//SIG(1 B_S_BFu15s) C1{ Fc Fs Fs:15}



static void Test_B_S_BFu15s()
{
  {
    init_simple_test("B_S_BFu15s");
    static B_S_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(B_S_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_BFu15s)");
    check_field_offset(lv, v1, 0, "B_S_BFu15s.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_S_BFu15s");
  }
}
static Arrange_To_Call_Me vB_S_BFu15s(Test_B_S_BFu15s, "B_S_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu16i  {
  bool v1;
  short v2;
  unsigned int v3:16;
};
//SIG(1 B_S_BFu16i) C1{ Fc Fs Fi:16}



static void Test_B_S_BFu16i()
{
  {
    init_simple_test("B_S_BFu16i");
    static B_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_BFu16i)");
    check_field_offset(lv, v1, 0, "B_S_BFu16i.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_S_BFu16i");
  }
}
static Arrange_To_Call_Me vB_S_BFu16i(Test_B_S_BFu16i, "B_S_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu16ll  {
  bool v1;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 B_S_BFu16ll) C1{ Fc Fs FL:16}



static void Test_B_S_BFu16ll()
{
  {
    init_simple_test("B_S_BFu16ll");
    static B_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_S_BFu16ll.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_S_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_S_BFu16ll(Test_B_S_BFu16ll, "B_S_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu16s  {
  bool v1;
  short v2;
  unsigned short v3:16;
};
//SIG(1 B_S_BFu16s) C1{ Fc Fs Fs:16}



static void Test_B_S_BFu16s()
{
  {
    init_simple_test("B_S_BFu16s");
    static B_S_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(B_S_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_BFu16s)");
    check_field_offset(lv, v1, 0, "B_S_BFu16s.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_S_BFu16s");
  }
}
static Arrange_To_Call_Me vB_S_BFu16s(Test_B_S_BFu16s, "B_S_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu17i  {
  bool v1;
  short v2;
  unsigned int v3:17;
};
//SIG(1 B_S_BFu17i) C1{ Fc Fs Fi:17}



static void Test_B_S_BFu17i()
{
  {
    init_simple_test("B_S_BFu17i");
    static B_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_BFu17i)");
    check_field_offset(lv, v1, 0, "B_S_BFu17i.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_S_BFu17i");
  }
}
static Arrange_To_Call_Me vB_S_BFu17i(Test_B_S_BFu17i, "B_S_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu17ll  {
  bool v1;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 B_S_BFu17ll) C1{ Fc Fs FL:17}



static void Test_B_S_BFu17ll()
{
  {
    init_simple_test("B_S_BFu17ll");
    static B_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_S_BFu17ll.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_S_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_S_BFu17ll(Test_B_S_BFu17ll, "B_S_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu1c  {
  bool v1;
  short v2;
  unsigned char v3:1;
};
//SIG(1 B_S_BFu1c) C1{ Fc Fs Fc:1}



static void Test_B_S_BFu1c()
{
  {
    init_simple_test("B_S_BFu1c");
    static B_S_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(B_S_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_BFu1c)");
    check_field_offset(lv, v1, 0, "B_S_BFu1c.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_S_BFu1c");
  }
}
static Arrange_To_Call_Me vB_S_BFu1c(Test_B_S_BFu1c, "B_S_BFu1c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu1i  {
  bool v1;
  short v2;
  unsigned int v3:1;
};
//SIG(1 B_S_BFu1i) C1{ Fc Fs Fi:1}



static void Test_B_S_BFu1i()
{
  {
    init_simple_test("B_S_BFu1i");
    static B_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_BFu1i)");
    check_field_offset(lv, v1, 0, "B_S_BFu1i.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_S_BFu1i");
  }
}
static Arrange_To_Call_Me vB_S_BFu1i(Test_B_S_BFu1i, "B_S_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu1ll  {
  bool v1;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 B_S_BFu1ll) C1{ Fc Fs FL:1}



static void Test_B_S_BFu1ll()
{
  {
    init_simple_test("B_S_BFu1ll");
    static B_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_S_BFu1ll.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_S_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_S_BFu1ll(Test_B_S_BFu1ll, "B_S_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu1s  {
  bool v1;
  short v2;
  unsigned short v3:1;
};
//SIG(1 B_S_BFu1s) C1{ Fc Fs Fs:1}



static void Test_B_S_BFu1s()
{
  {
    init_simple_test("B_S_BFu1s");
    static B_S_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(B_S_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_BFu1s)");
    check_field_offset(lv, v1, 0, "B_S_BFu1s.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_S_BFu1s");
  }
}
static Arrange_To_Call_Me vB_S_BFu1s(Test_B_S_BFu1s, "B_S_BFu1s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu31i  {
  bool v1;
  short v2;
  unsigned int v3:31;
};
//SIG(1 B_S_BFu31i) C1{ Fc Fs Fi:31}



static void Test_B_S_BFu31i()
{
  {
    init_simple_test("B_S_BFu31i");
    static B_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_BFu31i)");
    check_field_offset(lv, v1, 0, "B_S_BFu31i.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_S_BFu31i");
  }
}
static Arrange_To_Call_Me vB_S_BFu31i(Test_B_S_BFu31i, "B_S_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu31ll  {
  bool v1;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 B_S_BFu31ll) C1{ Fc Fs FL:31}



static void Test_B_S_BFu31ll()
{
  {
    init_simple_test("B_S_BFu31ll");
    static B_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_S_BFu31ll.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_S_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_S_BFu31ll(Test_B_S_BFu31ll, "B_S_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu32i  {
  bool v1;
  short v2;
  unsigned int v3:32;
};
//SIG(1 B_S_BFu32i) C1{ Fc Fs Fi:32}



static void Test_B_S_BFu32i()
{
  {
    init_simple_test("B_S_BFu32i");
    static B_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_BFu32i)");
    check_field_offset(lv, v1, 0, "B_S_BFu32i.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_S_BFu32i");
  }
}
static Arrange_To_Call_Me vB_S_BFu32i(Test_B_S_BFu32i, "B_S_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu32ll  {
  bool v1;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 B_S_BFu32ll) C1{ Fc Fs FL:32}



static void Test_B_S_BFu32ll()
{
  {
    init_simple_test("B_S_BFu32ll");
    static B_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_S_BFu32ll.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_S_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_S_BFu32ll(Test_B_S_BFu32ll, "B_S_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu33  {
  bool v1;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 B_S_BFu33) C1{ Fc Fs FL:33}



static void Test_B_S_BFu33()
{
  {
    init_simple_test("B_S_BFu33");
    static B_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu33)");
    check_field_offset(lv, v1, 0, "B_S_BFu33.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "B_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "B_S_BFu33");
  }
}
static Arrange_To_Call_Me vB_S_BFu33(Test_B_S_BFu33, "B_S_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu7c  {
  bool v1;
  short v2;
  unsigned char v3:7;
};
//SIG(1 B_S_BFu7c) C1{ Fc Fs Fc:7}



static void Test_B_S_BFu7c()
{
  {
    init_simple_test("B_S_BFu7c");
    static B_S_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(B_S_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_BFu7c)");
    check_field_offset(lv, v1, 0, "B_S_BFu7c.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_S_BFu7c");
  }
}
static Arrange_To_Call_Me vB_S_BFu7c(Test_B_S_BFu7c, "B_S_BFu7c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu7i  {
  bool v1;
  short v2;
  unsigned int v3:7;
};
//SIG(1 B_S_BFu7i) C1{ Fc Fs Fi:7}



static void Test_B_S_BFu7i()
{
  {
    init_simple_test("B_S_BFu7i");
    static B_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_BFu7i)");
    check_field_offset(lv, v1, 0, "B_S_BFu7i.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_S_BFu7i");
  }
}
static Arrange_To_Call_Me vB_S_BFu7i(Test_B_S_BFu7i, "B_S_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu7ll  {
  bool v1;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 B_S_BFu7ll) C1{ Fc Fs FL:7}



static void Test_B_S_BFu7ll()
{
  {
    init_simple_test("B_S_BFu7ll");
    static B_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_S_BFu7ll.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_S_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_S_BFu7ll(Test_B_S_BFu7ll, "B_S_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu7s  {
  bool v1;
  short v2;
  unsigned short v3:7;
};
//SIG(1 B_S_BFu7s) C1{ Fc Fs Fs:7}



static void Test_B_S_BFu7s()
{
  {
    init_simple_test("B_S_BFu7s");
    static B_S_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(B_S_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_BFu7s)");
    check_field_offset(lv, v1, 0, "B_S_BFu7s.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_S_BFu7s");
  }
}
static Arrange_To_Call_Me vB_S_BFu7s(Test_B_S_BFu7s, "B_S_BFu7s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu8c  {
  bool v1;
  short v2;
  unsigned char v3:8;
};
//SIG(1 B_S_BFu8c) C1{ Fc Fs Fc:8}



static void Test_B_S_BFu8c()
{
  {
    init_simple_test("B_S_BFu8c");
    static B_S_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(B_S_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_BFu8c)");
    check_field_offset(lv, v1, 0, "B_S_BFu8c.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_S_BFu8c");
  }
}
static Arrange_To_Call_Me vB_S_BFu8c(Test_B_S_BFu8c, "B_S_BFu8c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu8i  {
  bool v1;
  short v2;
  unsigned int v3:8;
};
//SIG(1 B_S_BFu8i) C1{ Fc Fs Fi:8}



static void Test_B_S_BFu8i()
{
  {
    init_simple_test("B_S_BFu8i");
    static B_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_BFu8i)");
    check_field_offset(lv, v1, 0, "B_S_BFu8i.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_S_BFu8i");
  }
}
static Arrange_To_Call_Me vB_S_BFu8i(Test_B_S_BFu8i, "B_S_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu8ll  {
  bool v1;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 B_S_BFu8ll) C1{ Fc Fs FL:8}



static void Test_B_S_BFu8ll()
{
  {
    init_simple_test("B_S_BFu8ll");
    static B_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_S_BFu8ll.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_S_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_S_BFu8ll(Test_B_S_BFu8ll, "B_S_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu8s  {
  bool v1;
  short v2;
  unsigned short v3:8;
};
//SIG(1 B_S_BFu8s) C1{ Fc Fs Fs:8}



static void Test_B_S_BFu8s()
{
  {
    init_simple_test("B_S_BFu8s");
    static B_S_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(B_S_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_BFu8s)");
    check_field_offset(lv, v1, 0, "B_S_BFu8s.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_S_BFu8s");
  }
}
static Arrange_To_Call_Me vB_S_BFu8s(Test_B_S_BFu8s, "B_S_BFu8s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu9i  {
  bool v1;
  short v2;
  unsigned int v3:9;
};
//SIG(1 B_S_BFu9i) C1{ Fc Fs Fi:9}



static void Test_B_S_BFu9i()
{
  {
    init_simple_test("B_S_BFu9i");
    static B_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_BFu9i)");
    check_field_offset(lv, v1, 0, "B_S_BFu9i.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_S_BFu9i");
  }
}
static Arrange_To_Call_Me vB_S_BFu9i(Test_B_S_BFu9i, "B_S_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu9ll  {
  bool v1;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 B_S_BFu9ll) C1{ Fc Fs FL:9}



static void Test_B_S_BFu9ll()
{
  {
    init_simple_test("B_S_BFu9ll");
    static B_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_S_BFu9ll.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_S_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_S_BFu9ll(Test_B_S_BFu9ll, "B_S_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_BFu9s  {
  bool v1;
  short v2;
  unsigned short v3:9;
};
//SIG(1 B_S_BFu9s) C1{ Fc Fs Fs:9}



static void Test_B_S_BFu9s()
{
  {
    init_simple_test("B_S_BFu9s");
    static B_S_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(B_S_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_BFu9s)");
    check_field_offset(lv, v1, 0, "B_S_BFu9s.v1");
    check_field_offset(lv, v2, 2, "B_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_S_BFu9s");
  }
}
static Arrange_To_Call_Me vB_S_BFu9s(Test_B_S_BFu9s, "B_S_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_C  {
  bool v1;
  short v2;
  char v3;
};
//SIG(1 B_S_C) C1{ Fc Fs Fc}



static void Test_B_S_C()
{
  {
    init_simple_test("B_S_C");
    B_S_C lv;
    check2(sizeof(lv), 6, "sizeof(B_S_C)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_C)");
    check_field_offset(lv, v1, 0, "B_S_C.v1");
    check_field_offset(lv, v2, 2, "B_S_C.v2");
    check_field_offset(lv, v3, 4, "B_S_C.v3");
  }
}
static Arrange_To_Call_Me vB_S_C(Test_B_S_C, "B_S_C", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_D  {
  bool v1;
  short v2;
  double v3;
};
//SIG(1 B_S_D) C1{ Fc Fs FL}



static void Test_B_S_D()
{
  {
    init_simple_test("B_S_D");
    B_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_D)");
    check_field_offset(lv, v1, 0, "B_S_D.v1");
    check_field_offset(lv, v2, 2, "B_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_S_D.v3");
  }
}
static Arrange_To_Call_Me vB_S_D(Test_B_S_D, "B_S_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_F  {
  bool v1;
  short v2;
  float v3;
};
//SIG(1 B_S_F) C1{ Fc Fs Fi}



static void Test_B_S_F()
{
  {
    init_simple_test("B_S_F");
    B_S_F lv;
    check2(sizeof(lv), 8, "sizeof(B_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_F)");
    check_field_offset(lv, v1, 0, "B_S_F.v1");
    check_field_offset(lv, v2, 2, "B_S_F.v2");
    check_field_offset(lv, v3, 4, "B_S_F.v3");
  }
}
static Arrange_To_Call_Me vB_S_F(Test_B_S_F, "B_S_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_I  {
  bool v1;
  short v2;
  int v3;
};
//SIG(1 B_S_I) C1{ Fc Fs Fi}



static void Test_B_S_I()
{
  {
    init_simple_test("B_S_I");
    B_S_I lv;
    check2(sizeof(lv), 8, "sizeof(B_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_I)");
    check_field_offset(lv, v1, 0, "B_S_I.v1");
    check_field_offset(lv, v2, 2, "B_S_I.v2");
    check_field_offset(lv, v3, 4, "B_S_I.v3");
  }
}
static Arrange_To_Call_Me vB_S_I(Test_B_S_I, "B_S_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_Ip  {
  bool v1;
  short v2;
  int *v3;
};
//SIG(1 B_S_Ip) C1{ Fc Fs Fp}



static void Test_B_S_Ip()
{
  {
    init_simple_test("B_S_Ip");
    B_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_Ip)");
    check_field_offset(lv, v1, 0, "B_S_Ip.v1");
    check_field_offset(lv, v2, 2, "B_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_S_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_S_Ip(Test_B_S_Ip, "B_S_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_L  {
  bool v1;
  short v2;
  __tsi64 v3;
};
//SIG(1 B_S_L) C1{ Fc Fs FL}



static void Test_B_S_L()
{
  {
    init_simple_test("B_S_L");
    B_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_L)");
    check_field_offset(lv, v1, 0, "B_S_L.v1");
    check_field_offset(lv, v2, 2, "B_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_S_L.v3");
  }
}
static Arrange_To_Call_Me vB_S_L(Test_B_S_L, "B_S_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_S  {
  bool v1;
  short v2;
  short v3;
};
//SIG(1 B_S_S) C1{ Fc Fs[2]}



static void Test_B_S_S()
{
  {
    init_simple_test("B_S_S");
    B_S_S lv;
    check2(sizeof(lv), 6, "sizeof(B_S_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_S)");
    check_field_offset(lv, v1, 0, "B_S_S.v1");
    check_field_offset(lv, v2, 2, "B_S_S.v2");
    check_field_offset(lv, v3, 4, "B_S_S.v3");
  }
}
static Arrange_To_Call_Me vB_S_S(Test_B_S_S, "B_S_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_Uc  {
  bool v1;
  short v2;
  unsigned char v3;
};
//SIG(1 B_S_Uc) C1{ Fc Fs Fc}



static void Test_B_S_Uc()
{
  {
    init_simple_test("B_S_Uc");
    B_S_Uc lv;
    check2(sizeof(lv), 6, "sizeof(B_S_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_Uc)");
    check_field_offset(lv, v1, 0, "B_S_Uc.v1");
    check_field_offset(lv, v2, 2, "B_S_Uc.v2");
    check_field_offset(lv, v3, 4, "B_S_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_S_Uc(Test_B_S_Uc, "B_S_Uc", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_Ui  {
  bool v1;
  short v2;
  unsigned int v3;
};
//SIG(1 B_S_Ui) C1{ Fc Fs Fi}



static void Test_B_S_Ui()
{
  {
    init_simple_test("B_S_Ui");
    B_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_S_Ui)");
    check_field_offset(lv, v1, 0, "B_S_Ui.v1");
    check_field_offset(lv, v2, 2, "B_S_Ui.v2");
    check_field_offset(lv, v3, 4, "B_S_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_S_Ui(Test_B_S_Ui, "B_S_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_Ul  {
  bool v1;
  short v2;
  __tsu64 v3;
};
//SIG(1 B_S_Ul) C1{ Fc Fs FL}



static void Test_B_S_Ul()
{
  {
    init_simple_test("B_S_Ul");
    B_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_Ul)");
    check_field_offset(lv, v1, 0, "B_S_Ul.v1");
    check_field_offset(lv, v2, 2, "B_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_S_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_S_Ul(Test_B_S_Ul, "B_S_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_Us  {
  bool v1;
  short v2;
  unsigned short v3;
};
//SIG(1 B_S_Us) C1{ Fc Fs[2]}



static void Test_B_S_Us()
{
  {
    init_simple_test("B_S_Us");
    B_S_Us lv;
    check2(sizeof(lv), 6, "sizeof(B_S_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_S_Us)");
    check_field_offset(lv, v1, 0, "B_S_Us.v1");
    check_field_offset(lv, v2, 2, "B_S_Us.v2");
    check_field_offset(lv, v3, 4, "B_S_Us.v3");
  }
}
static Arrange_To_Call_Me vB_S_Us(Test_B_S_Us, "B_S_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_S_Vp  {
  bool v1;
  short v2;
  void *v3;
};
//SIG(1 B_S_Vp) C1{ Fc Fs Fp}



static void Test_B_S_Vp()
{
  {
    init_simple_test("B_S_Vp");
    B_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_S_Vp)");
    check_field_offset(lv, v1, 0, "B_S_Vp.v1");
    check_field_offset(lv, v2, 2, "B_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_S_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_S_Vp(Test_B_S_Vp, "B_S_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc  {
  bool v1;
  unsigned char v2;
};
//SIG(1 B_Uc) C1{ Fc[2]}



static void Test_B_Uc()
{
  {
    init_simple_test("B_Uc");
    B_Uc lv;
    check2(sizeof(lv), 2, "sizeof(B_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(B_Uc)");
    check_field_offset(lv, v1, 0, "B_Uc.v1");
    check_field_offset(lv, v2, 1, "B_Uc.v2");
  }
}
static Arrange_To_Call_Me vB_Uc(Test_B_Uc, "B_Uc", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_B  {
  bool v1;
  unsigned char v2;
  bool v3;
};
//SIG(1 B_Uc_B) C1{ Fc[3]}



static void Test_B_Uc_B()
{
  {
    init_simple_test("B_Uc_B");
    B_Uc_B lv;
    check2(sizeof(lv), 3, "sizeof(B_Uc_B)");
    check2(__alignof__(lv), 1, "__alignof__(B_Uc_B)");
    check_field_offset(lv, v1, 0, "B_Uc_B.v1");
    check_field_offset(lv, v2, 1, "B_Uc_B.v2");
    check_field_offset(lv, v3, 2, "B_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_B(Test_B_Uc_B, "B_Uc_B", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu15i  {
  bool v1;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 B_Uc_BFu15i) C1{ Fc[2] Fi:15}



static void Test_B_Uc_BFu15i()
{
  {
    init_simple_test("B_Uc_BFu15i");
    static B_Uc_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_BFu15i)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu15i.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_Uc_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_Uc_BFu15i");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu15i(Test_B_Uc_BFu15i, "B_Uc_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu15ll  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 B_Uc_BFu15ll) C1{ Fc[2] FL:15}



static void Test_B_Uc_BFu15ll()
{
  {
    init_simple_test("B_Uc_BFu15ll");
    static B_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu15ll.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_Uc_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu15ll(Test_B_Uc_BFu15ll, "B_Uc_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu15s  {
  bool v1;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 B_Uc_BFu15s) C1{ Fc[2] Fs:15}



static void Test_B_Uc_BFu15s()
{
  {
    init_simple_test("B_Uc_BFu15s");
    static B_Uc_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Uc_BFu15s)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu15s.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "B_Uc_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "B_Uc_BFu15s");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu15s(Test_B_Uc_BFu15s, "B_Uc_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu16i  {
  bool v1;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 B_Uc_BFu16i) C1{ Fc[2] Fi:16}



static void Test_B_Uc_BFu16i()
{
  {
    init_simple_test("B_Uc_BFu16i");
    static B_Uc_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_BFu16i)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu16i.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_Uc_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_Uc_BFu16i");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu16i(Test_B_Uc_BFu16i, "B_Uc_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu16ll  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 B_Uc_BFu16ll) C1{ Fc[2] FL:16}



static void Test_B_Uc_BFu16ll()
{
  {
    init_simple_test("B_Uc_BFu16ll");
    static B_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu16ll.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_Uc_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu16ll(Test_B_Uc_BFu16ll, "B_Uc_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu16s  {
  bool v1;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 B_Uc_BFu16s) C1{ Fc[2] Fs:16}



static void Test_B_Uc_BFu16s()
{
  {
    init_simple_test("B_Uc_BFu16s");
    static B_Uc_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Uc_BFu16s)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu16s.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "B_Uc_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "B_Uc_BFu16s");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu16s(Test_B_Uc_BFu16s, "B_Uc_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu17i  {
  bool v1;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 B_Uc_BFu17i) C1{ Fc[2] Fi:17}



static void Test_B_Uc_BFu17i()
{
  {
    init_simple_test("B_Uc_BFu17i");
    static B_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_BFu17i)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu17i.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_Uc_BFu17i");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu17i(Test_B_Uc_BFu17i, "B_Uc_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu17ll  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 B_Uc_BFu17ll) C1{ Fc[2] FL:17}



static void Test_B_Uc_BFu17ll()
{
  {
    init_simple_test("B_Uc_BFu17ll");
    static B_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu17ll.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "B_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "B_Uc_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu17ll(Test_B_Uc_BFu17ll, "B_Uc_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu1c  {
  bool v1;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 B_Uc_BFu1c) C1{ Fc[2] Fc:1}



static void Test_B_Uc_BFu1c()
{
  {
    init_simple_test("B_Uc_BFu1c");
    static B_Uc_BFu1c lv;
    check2(sizeof(lv), 3, "sizeof(B_Uc_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(B_Uc_BFu1c)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu1c.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_Uc_BFu1c");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu1c(Test_B_Uc_BFu1c, "B_Uc_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu1i  {
  bool v1;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 B_Uc_BFu1i) C1{ Fc[2] Fi:1}



static void Test_B_Uc_BFu1i()
{
  {
    init_simple_test("B_Uc_BFu1i");
    static B_Uc_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_BFu1i)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu1i.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_Uc_BFu1i");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu1i(Test_B_Uc_BFu1i, "B_Uc_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu1ll  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 B_Uc_BFu1ll) C1{ Fc[2] FL:1}



static void Test_B_Uc_BFu1ll()
{
  {
    init_simple_test("B_Uc_BFu1ll");
    static B_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu1ll.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_Uc_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu1ll(Test_B_Uc_BFu1ll, "B_Uc_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu1s  {
  bool v1;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 B_Uc_BFu1s) C1{ Fc[2] Fs:1}



static void Test_B_Uc_BFu1s()
{
  {
    init_simple_test("B_Uc_BFu1s");
    static B_Uc_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Uc_BFu1s)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu1s.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "B_Uc_BFu1s");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu1s(Test_B_Uc_BFu1s, "B_Uc_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu31i  {
  bool v1;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 B_Uc_BFu31i) C1{ Fc[2] Fi:31}



static void Test_B_Uc_BFu31i()
{
  {
    init_simple_test("B_Uc_BFu31i");
    static B_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_BFu31i)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu31i.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_Uc_BFu31i");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu31i(Test_B_Uc_BFu31i, "B_Uc_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu31ll  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 B_Uc_BFu31ll) C1{ Fc[2] FL:31}



static void Test_B_Uc_BFu31ll()
{
  {
    init_simple_test("B_Uc_BFu31ll");
    static B_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu31ll.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "B_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "B_Uc_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu31ll(Test_B_Uc_BFu31ll, "B_Uc_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu32i  {
  bool v1;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 B_Uc_BFu32i) C1{ Fc[2] Fi:32}



static void Test_B_Uc_BFu32i()
{
  {
    init_simple_test("B_Uc_BFu32i");
    static B_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_BFu32i)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu32i.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_Uc_BFu32i");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu32i(Test_B_Uc_BFu32i, "B_Uc_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu32ll  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 B_Uc_BFu32ll) C1{ Fc[2] FL:32}



static void Test_B_Uc_BFu32ll()
{
  {
    init_simple_test("B_Uc_BFu32ll");
    static B_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu32ll.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "B_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "B_Uc_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu32ll(Test_B_Uc_BFu32ll, "B_Uc_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu33  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 B_Uc_BFu33) C1{ Fc[2] FL:33}



static void Test_B_Uc_BFu33()
{
  {
    init_simple_test("B_Uc_BFu33");
    static B_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu33)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu33.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "B_Uc_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "B_Uc_BFu33");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu33(Test_B_Uc_BFu33, "B_Uc_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu7c  {
  bool v1;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 B_Uc_BFu7c) C1{ Fc[2] Fc:7}



static void Test_B_Uc_BFu7c()
{
  {
    init_simple_test("B_Uc_BFu7c");
    static B_Uc_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(B_Uc_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(B_Uc_BFu7c)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu7c.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_Uc_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_Uc_BFu7c");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu7c(Test_B_Uc_BFu7c, "B_Uc_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu7i  {
  bool v1;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 B_Uc_BFu7i) C1{ Fc[2] Fi:7}



static void Test_B_Uc_BFu7i()
{
  {
    init_simple_test("B_Uc_BFu7i");
    static B_Uc_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_BFu7i)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu7i.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_Uc_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_Uc_BFu7i");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu7i(Test_B_Uc_BFu7i, "B_Uc_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu7ll  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 B_Uc_BFu7ll) C1{ Fc[2] FL:7}



static void Test_B_Uc_BFu7ll()
{
  {
    init_simple_test("B_Uc_BFu7ll");
    static B_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu7ll.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_Uc_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu7ll(Test_B_Uc_BFu7ll, "B_Uc_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu7s  {
  bool v1;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 B_Uc_BFu7s) C1{ Fc[2] Fs:7}



static void Test_B_Uc_BFu7s()
{
  {
    init_simple_test("B_Uc_BFu7s");
    static B_Uc_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Uc_BFu7s)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu7s.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "B_Uc_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "B_Uc_BFu7s");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu7s(Test_B_Uc_BFu7s, "B_Uc_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu8c  {
  bool v1;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 B_Uc_BFu8c) C1{ Fc[2] Fc:8}



static void Test_B_Uc_BFu8c()
{
  {
    init_simple_test("B_Uc_BFu8c");
    static B_Uc_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(B_Uc_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(B_Uc_BFu8c)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu8c.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_Uc_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_Uc_BFu8c");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu8c(Test_B_Uc_BFu8c, "B_Uc_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu8i  {
  bool v1;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 B_Uc_BFu8i) C1{ Fc[2] Fi:8}



static void Test_B_Uc_BFu8i()
{
  {
    init_simple_test("B_Uc_BFu8i");
    static B_Uc_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_BFu8i)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu8i.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_Uc_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_Uc_BFu8i");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu8i(Test_B_Uc_BFu8i, "B_Uc_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu8ll  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 B_Uc_BFu8ll) C1{ Fc[2] FL:8}



static void Test_B_Uc_BFu8ll()
{
  {
    init_simple_test("B_Uc_BFu8ll");
    static B_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu8ll.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_Uc_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu8ll(Test_B_Uc_BFu8ll, "B_Uc_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu8s  {
  bool v1;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 B_Uc_BFu8s) C1{ Fc[2] Fs:8}



static void Test_B_Uc_BFu8s()
{
  {
    init_simple_test("B_Uc_BFu8s");
    static B_Uc_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Uc_BFu8s)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu8s.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "B_Uc_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "B_Uc_BFu8s");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu8s(Test_B_Uc_BFu8s, "B_Uc_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu9i  {
  bool v1;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 B_Uc_BFu9i) C1{ Fc[2] Fi:9}



static void Test_B_Uc_BFu9i()
{
  {
    init_simple_test("B_Uc_BFu9i");
    static B_Uc_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_BFu9i)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu9i.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_Uc_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_Uc_BFu9i");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu9i(Test_B_Uc_BFu9i, "B_Uc_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu9ll  {
  bool v1;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 B_Uc_BFu9ll) C1{ Fc[2] FL:9}



static void Test_B_Uc_BFu9ll()
{
  {
    init_simple_test("B_Uc_BFu9ll");
    static B_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(B_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu9ll.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_Uc_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu9ll(Test_B_Uc_BFu9ll, "B_Uc_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_BFu9s  {
  bool v1;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 B_Uc_BFu9s) C1{ Fc[2] Fs:9}



static void Test_B_Uc_BFu9s()
{
  {
    init_simple_test("B_Uc_BFu9s");
    static B_Uc_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Uc_BFu9s)");
    check_field_offset(lv, v1, 0, "B_Uc_BFu9s.v1");
    check_field_offset(lv, v2, 1, "B_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "B_Uc_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "B_Uc_BFu9s");
  }
}
static Arrange_To_Call_Me vB_Uc_BFu9s(Test_B_Uc_BFu9s, "B_Uc_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_C  {
  bool v1;
  unsigned char v2;
  char v3;
};
//SIG(1 B_Uc_C) C1{ Fc[3]}



static void Test_B_Uc_C()
{
  {
    init_simple_test("B_Uc_C");
    B_Uc_C lv;
    check2(sizeof(lv), 3, "sizeof(B_Uc_C)");
    check2(__alignof__(lv), 1, "__alignof__(B_Uc_C)");
    check_field_offset(lv, v1, 0, "B_Uc_C.v1");
    check_field_offset(lv, v2, 1, "B_Uc_C.v2");
    check_field_offset(lv, v3, 2, "B_Uc_C.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_C(Test_B_Uc_C, "B_Uc_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_D  {
  bool v1;
  unsigned char v2;
  double v3;
};
//SIG(1 B_Uc_D) C1{ Fc[2] FL}



static void Test_B_Uc_D()
{
  {
    init_simple_test("B_Uc_D");
    B_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_D)");
    check_field_offset(lv, v1, 0, "B_Uc_D.v1");
    check_field_offset(lv, v2, 1, "B_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Uc_D.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_D(Test_B_Uc_D, "B_Uc_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_F  {
  bool v1;
  unsigned char v2;
  float v3;
};
//SIG(1 B_Uc_F) C1{ Fc[2] Fi}



static void Test_B_Uc_F()
{
  {
    init_simple_test("B_Uc_F");
    B_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_F)");
    check_field_offset(lv, v1, 0, "B_Uc_F.v1");
    check_field_offset(lv, v2, 1, "B_Uc_F.v2");
    check_field_offset(lv, v3, 4, "B_Uc_F.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_F(Test_B_Uc_F, "B_Uc_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_I  {
  bool v1;
  unsigned char v2;
  int v3;
};
//SIG(1 B_Uc_I) C1{ Fc[2] Fi}



static void Test_B_Uc_I()
{
  {
    init_simple_test("B_Uc_I");
    B_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_I)");
    check_field_offset(lv, v1, 0, "B_Uc_I.v1");
    check_field_offset(lv, v2, 1, "B_Uc_I.v2");
    check_field_offset(lv, v3, 4, "B_Uc_I.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_I(Test_B_Uc_I, "B_Uc_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_Ip  {
  bool v1;
  unsigned char v2;
  int *v3;
};
//SIG(1 B_Uc_Ip) C1{ Fc[2] Fp}



static void Test_B_Uc_Ip()
{
  {
    init_simple_test("B_Uc_Ip");
    B_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_Ip)");
    check_field_offset(lv, v1, 0, "B_Uc_Ip.v1");
    check_field_offset(lv, v2, 1, "B_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Uc_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_Ip(Test_B_Uc_Ip, "B_Uc_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_L  {
  bool v1;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 B_Uc_L) C1{ Fc[2] FL}



static void Test_B_Uc_L()
{
  {
    init_simple_test("B_Uc_L");
    B_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_L)");
    check_field_offset(lv, v1, 0, "B_Uc_L.v1");
    check_field_offset(lv, v2, 1, "B_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Uc_L.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_L(Test_B_Uc_L, "B_Uc_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_S  {
  bool v1;
  unsigned char v2;
  short v3;
};
//SIG(1 B_Uc_S) C1{ Fc[2] Fs}



static void Test_B_Uc_S()
{
  {
    init_simple_test("B_Uc_S");
    B_Uc_S lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_Uc_S)");
    check_field_offset(lv, v1, 0, "B_Uc_S.v1");
    check_field_offset(lv, v2, 1, "B_Uc_S.v2");
    check_field_offset(lv, v3, 2, "B_Uc_S.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_S(Test_B_Uc_S, "B_Uc_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_Uc  {
  bool v1;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 B_Uc_Uc) C1{ Fc[3]}



static void Test_B_Uc_Uc()
{
  {
    init_simple_test("B_Uc_Uc");
    B_Uc_Uc lv;
    check2(sizeof(lv), 3, "sizeof(B_Uc_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(B_Uc_Uc)");
    check_field_offset(lv, v1, 0, "B_Uc_Uc.v1");
    check_field_offset(lv, v2, 1, "B_Uc_Uc.v2");
    check_field_offset(lv, v3, 2, "B_Uc_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_Uc(Test_B_Uc_Uc, "B_Uc_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_Ui  {
  bool v1;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 B_Uc_Ui) C1{ Fc[2] Fi}



static void Test_B_Uc_Ui()
{
  {
    init_simple_test("B_Uc_Ui");
    B_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_Uc_Ui)");
    check_field_offset(lv, v1, 0, "B_Uc_Ui.v1");
    check_field_offset(lv, v2, 1, "B_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "B_Uc_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_Ui(Test_B_Uc_Ui, "B_Uc_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_Ul  {
  bool v1;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 B_Uc_Ul) C1{ Fc[2] FL}



static void Test_B_Uc_Ul()
{
  {
    init_simple_test("B_Uc_Ul");
    B_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_Ul)");
    check_field_offset(lv, v1, 0, "B_Uc_Ul.v1");
    check_field_offset(lv, v2, 1, "B_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Uc_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_Ul(Test_B_Uc_Ul, "B_Uc_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_Us  {
  bool v1;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 B_Uc_Us) C1{ Fc[2] Fs}



static void Test_B_Uc_Us()
{
  {
    init_simple_test("B_Uc_Us");
    B_Uc_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_Uc_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_Uc_Us)");
    check_field_offset(lv, v1, 0, "B_Uc_Us.v1");
    check_field_offset(lv, v2, 1, "B_Uc_Us.v2");
    check_field_offset(lv, v3, 2, "B_Uc_Us.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_Us(Test_B_Uc_Us, "B_Uc_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Uc_Vp  {
  bool v1;
  unsigned char v2;
  void *v3;
};
//SIG(1 B_Uc_Vp) C1{ Fc[2] Fp}



static void Test_B_Uc_Vp()
{
  {
    init_simple_test("B_Uc_Vp");
    B_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Uc_Vp)");
    check_field_offset(lv, v1, 0, "B_Uc_Vp.v1");
    check_field_offset(lv, v2, 1, "B_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Uc_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_Uc_Vp(Test_B_Uc_Vp, "B_Uc_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui  {
  bool v1;
  unsigned int v2;
};
//SIG(1 B_Ui) C1{ Fc Fi}



static void Test_B_Ui()
{
  {
    init_simple_test("B_Ui");
    B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui)");
    check_field_offset(lv, v1, 0, "B_Ui.v1");
    check_field_offset(lv, v2, 4, "B_Ui.v2");
  }
}
static Arrange_To_Call_Me vB_Ui(Test_B_Ui, "B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_B  {
  bool v1;
  unsigned int v2;
  bool v3;
};
//SIG(1 B_Ui_B) C1{ Fc Fi Fc}



static void Test_B_Ui_B()
{
  {
    init_simple_test("B_Ui_B");
    B_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_B)");
    check_field_offset(lv, v1, 0, "B_Ui_B.v1");
    check_field_offset(lv, v2, 4, "B_Ui_B.v2");
    check_field_offset(lv, v3, 8, "B_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_B(Test_B_Ui_B, "B_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu15i  {
  bool v1;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 B_Ui_BFu15i) C1{ Fc Fi Fi:15}



static void Test_B_Ui_BFu15i()
{
  {
    init_simple_test("B_Ui_BFu15i");
    static B_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu15i)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu15i.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_Ui_BFu15i");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu15i(Test_B_Ui_BFu15i, "B_Ui_BFu15i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu15ll  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 B_Ui_BFu15ll) C1{ Fc Fi FL:15}



static void Test_B_Ui_BFu15ll()
{
  {
    init_simple_test("B_Ui_BFu15ll");
    static B_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu15ll.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_Ui_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu15ll(Test_B_Ui_BFu15ll, "B_Ui_BFu15ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu15s  {
  bool v1;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 B_Ui_BFu15s) C1{ Fc Fi Fs:15}



static void Test_B_Ui_BFu15s()
{
  {
    init_simple_test("B_Ui_BFu15s");
    static B_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu15s)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu15s.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "B_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "B_Ui_BFu15s");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu15s(Test_B_Ui_BFu15s, "B_Ui_BFu15s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu16i  {
  bool v1;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 B_Ui_BFu16i) C1{ Fc Fi Fi:16}



static void Test_B_Ui_BFu16i()
{
  {
    init_simple_test("B_Ui_BFu16i");
    static B_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu16i)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu16i.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_Ui_BFu16i");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu16i(Test_B_Ui_BFu16i, "B_Ui_BFu16i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu16ll  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 B_Ui_BFu16ll) C1{ Fc Fi FL:16}



static void Test_B_Ui_BFu16ll()
{
  {
    init_simple_test("B_Ui_BFu16ll");
    static B_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu16ll.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_Ui_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu16ll(Test_B_Ui_BFu16ll, "B_Ui_BFu16ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu16s  {
  bool v1;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 B_Ui_BFu16s) C1{ Fc Fi Fs:16}



static void Test_B_Ui_BFu16s()
{
  {
    init_simple_test("B_Ui_BFu16s");
    static B_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu16s)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu16s.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "B_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "B_Ui_BFu16s");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu16s(Test_B_Ui_BFu16s, "B_Ui_BFu16s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu17i  {
  bool v1;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 B_Ui_BFu17i) C1{ Fc Fi Fi:17}



static void Test_B_Ui_BFu17i()
{
  {
    init_simple_test("B_Ui_BFu17i");
    static B_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu17i)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu17i.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "B_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "B_Ui_BFu17i");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu17i(Test_B_Ui_BFu17i, "B_Ui_BFu17i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu17ll  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 B_Ui_BFu17ll) C1{ Fc Fi FL:17}



static void Test_B_Ui_BFu17ll()
{
  {
    init_simple_test("B_Ui_BFu17ll");
    static B_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu17ll.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "B_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "B_Ui_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu17ll(Test_B_Ui_BFu17ll, "B_Ui_BFu17ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu1c  {
  bool v1;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 B_Ui_BFu1c) C1{ Fc Fi Fc:1}



static void Test_B_Ui_BFu1c()
{
  {
    init_simple_test("B_Ui_BFu1c");
    static B_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu1c)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu1c.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_Ui_BFu1c");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu1c(Test_B_Ui_BFu1c, "B_Ui_BFu1c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu1i  {
  bool v1;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 B_Ui_BFu1i) C1{ Fc Fi Fi:1}



static void Test_B_Ui_BFu1i()
{
  {
    init_simple_test("B_Ui_BFu1i");
    static B_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu1i)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu1i.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_Ui_BFu1i");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu1i(Test_B_Ui_BFu1i, "B_Ui_BFu1i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu1ll  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 B_Ui_BFu1ll) C1{ Fc Fi FL:1}



static void Test_B_Ui_BFu1ll()
{
  {
    init_simple_test("B_Ui_BFu1ll");
    static B_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu1ll.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_Ui_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu1ll(Test_B_Ui_BFu1ll, "B_Ui_BFu1ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu1s  {
  bool v1;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 B_Ui_BFu1s) C1{ Fc Fi Fs:1}



static void Test_B_Ui_BFu1s()
{
  {
    init_simple_test("B_Ui_BFu1s");
    static B_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu1s)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu1s.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "B_Ui_BFu1s");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu1s(Test_B_Ui_BFu1s, "B_Ui_BFu1s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu31i  {
  bool v1;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 B_Ui_BFu31i) C1{ Fc Fi Fi:31}



static void Test_B_Ui_BFu31i()
{
  {
    init_simple_test("B_Ui_BFu31i");
    static B_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu31i)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu31i.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_Ui_BFu31i");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu31i(Test_B_Ui_BFu31i, "B_Ui_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu31ll  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 B_Ui_BFu31ll) C1{ Fc Fi FL:31}



static void Test_B_Ui_BFu31ll()
{
  {
    init_simple_test("B_Ui_BFu31ll");
    static B_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu31ll.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "B_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "B_Ui_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu31ll(Test_B_Ui_BFu31ll, "B_Ui_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu32i  {
  bool v1;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 B_Ui_BFu32i) C1{ Fc Fi Fi:32}



static void Test_B_Ui_BFu32i()
{
  {
    init_simple_test("B_Ui_BFu32i");
    static B_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu32i)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu32i.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_Ui_BFu32i");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu32i(Test_B_Ui_BFu32i, "B_Ui_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu32ll  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 B_Ui_BFu32ll) C1{ Fc Fi FL:32}



static void Test_B_Ui_BFu32ll()
{
  {
    init_simple_test("B_Ui_BFu32ll");
    static B_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu32ll.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "B_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "B_Ui_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu32ll(Test_B_Ui_BFu32ll, "B_Ui_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu33  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 B_Ui_BFu33) C1{ Fc Fi FL:33}



static void Test_B_Ui_BFu33()
{
  {
    init_simple_test("B_Ui_BFu33");
    static B_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(B_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu33)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu33.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "B_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "B_Ui_BFu33");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu33(Test_B_Ui_BFu33, "B_Ui_BFu33", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu7c  {
  bool v1;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 B_Ui_BFu7c) C1{ Fc Fi Fc:7}



static void Test_B_Ui_BFu7c()
{
  {
    init_simple_test("B_Ui_BFu7c");
    static B_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu7c)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu7c.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_Ui_BFu7c");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu7c(Test_B_Ui_BFu7c, "B_Ui_BFu7c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu7i  {
  bool v1;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 B_Ui_BFu7i) C1{ Fc Fi Fi:7}



static void Test_B_Ui_BFu7i()
{
  {
    init_simple_test("B_Ui_BFu7i");
    static B_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu7i)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu7i.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_Ui_BFu7i");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu7i(Test_B_Ui_BFu7i, "B_Ui_BFu7i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu7ll  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 B_Ui_BFu7ll) C1{ Fc Fi FL:7}



static void Test_B_Ui_BFu7ll()
{
  {
    init_simple_test("B_Ui_BFu7ll");
    static B_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu7ll.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_Ui_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu7ll(Test_B_Ui_BFu7ll, "B_Ui_BFu7ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu7s  {
  bool v1;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 B_Ui_BFu7s) C1{ Fc Fi Fs:7}



static void Test_B_Ui_BFu7s()
{
  {
    init_simple_test("B_Ui_BFu7s");
    static B_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu7s)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu7s.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "B_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "B_Ui_BFu7s");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu7s(Test_B_Ui_BFu7s, "B_Ui_BFu7s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu8c  {
  bool v1;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 B_Ui_BFu8c) C1{ Fc Fi Fc:8}



static void Test_B_Ui_BFu8c()
{
  {
    init_simple_test("B_Ui_BFu8c");
    static B_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu8c)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu8c.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_Ui_BFu8c");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu8c(Test_B_Ui_BFu8c, "B_Ui_BFu8c", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu8i  {
  bool v1;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 B_Ui_BFu8i) C1{ Fc Fi Fi:8}



static void Test_B_Ui_BFu8i()
{
  {
    init_simple_test("B_Ui_BFu8i");
    static B_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu8i)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu8i.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_Ui_BFu8i");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu8i(Test_B_Ui_BFu8i, "B_Ui_BFu8i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu8ll  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 B_Ui_BFu8ll) C1{ Fc Fi FL:8}



static void Test_B_Ui_BFu8ll()
{
  {
    init_simple_test("B_Ui_BFu8ll");
    static B_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu8ll.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_Ui_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu8ll(Test_B_Ui_BFu8ll, "B_Ui_BFu8ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu8s  {
  bool v1;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 B_Ui_BFu8s) C1{ Fc Fi Fs:8}



static void Test_B_Ui_BFu8s()
{
  {
    init_simple_test("B_Ui_BFu8s");
    static B_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu8s)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu8s.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "B_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "B_Ui_BFu8s");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu8s(Test_B_Ui_BFu8s, "B_Ui_BFu8s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu9i  {
  bool v1;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 B_Ui_BFu9i) C1{ Fc Fi Fi:9}



static void Test_B_Ui_BFu9i()
{
  {
    init_simple_test("B_Ui_BFu9i");
    static B_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu9i)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu9i.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_Ui_BFu9i");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu9i(Test_B_Ui_BFu9i, "B_Ui_BFu9i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu9ll  {
  bool v1;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 B_Ui_BFu9ll) C1{ Fc Fi FL:9}



static void Test_B_Ui_BFu9ll()
{
  {
    init_simple_test("B_Ui_BFu9ll");
    static B_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu9ll.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_Ui_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu9ll(Test_B_Ui_BFu9ll, "B_Ui_BFu9ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_BFu9s  {
  bool v1;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 B_Ui_BFu9s) C1{ Fc Fi Fs:9}



static void Test_B_Ui_BFu9s()
{
  {
    init_simple_test("B_Ui_BFu9s");
    static B_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_BFu9s)");
    check_field_offset(lv, v1, 0, "B_Ui_BFu9s.v1");
    check_field_offset(lv, v2, 4, "B_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "B_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "B_Ui_BFu9s");
  }
}
static Arrange_To_Call_Me vB_Ui_BFu9s(Test_B_Ui_BFu9s, "B_Ui_BFu9s", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_C  {
  bool v1;
  unsigned int v2;
  char v3;
};
//SIG(1 B_Ui_C) C1{ Fc Fi Fc}



static void Test_B_Ui_C()
{
  {
    init_simple_test("B_Ui_C");
    B_Ui_C lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_C)");
    check_field_offset(lv, v1, 0, "B_Ui_C.v1");
    check_field_offset(lv, v2, 4, "B_Ui_C.v2");
    check_field_offset(lv, v3, 8, "B_Ui_C.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_C(Test_B_Ui_C, "B_Ui_C", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_D  {
  bool v1;
  unsigned int v2;
  double v3;
};
//SIG(1 B_Ui_D) C1{ Fc Fi FL}



static void Test_B_Ui_D()
{
  {
    init_simple_test("B_Ui_D");
    B_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(B_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_D)");
    check_field_offset(lv, v1, 0, "B_Ui_D.v1");
    check_field_offset(lv, v2, 4, "B_Ui_D.v2");
    check_field_offset(lv, v3, 8, "B_Ui_D.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_D(Test_B_Ui_D, "B_Ui_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_F  {
  bool v1;
  unsigned int v2;
  float v3;
};
//SIG(1 B_Ui_F) C1{ Fc Fi[2]}



static void Test_B_Ui_F()
{
  {
    init_simple_test("B_Ui_F");
    B_Ui_F lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_F)");
    check_field_offset(lv, v1, 0, "B_Ui_F.v1");
    check_field_offset(lv, v2, 4, "B_Ui_F.v2");
    check_field_offset(lv, v3, 8, "B_Ui_F.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_F(Test_B_Ui_F, "B_Ui_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_I  {
  bool v1;
  unsigned int v2;
  int v3;
};
//SIG(1 B_Ui_I) C1{ Fc Fi[2]}



static void Test_B_Ui_I()
{
  {
    init_simple_test("B_Ui_I");
    B_Ui_I lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_I)");
    check_field_offset(lv, v1, 0, "B_Ui_I.v1");
    check_field_offset(lv, v2, 4, "B_Ui_I.v2");
    check_field_offset(lv, v3, 8, "B_Ui_I.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_I(Test_B_Ui_I, "B_Ui_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_Ip  {
  bool v1;
  unsigned int v2;
  int *v3;
};
//SIG(1 B_Ui_Ip) C1{ Fc Fi Fp}



static void Test_B_Ui_Ip()
{
  {
    init_simple_test("B_Ui_Ip");
    B_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_Ip)");
    check_field_offset(lv, v1, 0, "B_Ui_Ip.v1");
    check_field_offset(lv, v2, 4, "B_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "B_Ui_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_Ip(Test_B_Ui_Ip, "B_Ui_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_L  {
  bool v1;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 B_Ui_L) C1{ Fc Fi FL}



static void Test_B_Ui_L()
{
  {
    init_simple_test("B_Ui_L");
    B_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(B_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_L)");
    check_field_offset(lv, v1, 0, "B_Ui_L.v1");
    check_field_offset(lv, v2, 4, "B_Ui_L.v2");
    check_field_offset(lv, v3, 8, "B_Ui_L.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_L(Test_B_Ui_L, "B_Ui_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_S  {
  bool v1;
  unsigned int v2;
  short v3;
};
//SIG(1 B_Ui_S) C1{ Fc Fi Fs}



static void Test_B_Ui_S()
{
  {
    init_simple_test("B_Ui_S");
    B_Ui_S lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_S)");
    check_field_offset(lv, v1, 0, "B_Ui_S.v1");
    check_field_offset(lv, v2, 4, "B_Ui_S.v2");
    check_field_offset(lv, v3, 8, "B_Ui_S.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_S(Test_B_Ui_S, "B_Ui_S", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_Uc  {
  bool v1;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 B_Ui_Uc) C1{ Fc Fi Fc}



static void Test_B_Ui_Uc()
{
  {
    init_simple_test("B_Ui_Uc");
    B_Ui_Uc lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_Uc)");
    check_field_offset(lv, v1, 0, "B_Ui_Uc.v1");
    check_field_offset(lv, v2, 4, "B_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "B_Ui_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_Uc(Test_B_Ui_Uc, "B_Ui_Uc", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_Ui  {
  bool v1;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 B_Ui_Ui) C1{ Fc Fi[2]}



static void Test_B_Ui_Ui()
{
  {
    init_simple_test("B_Ui_Ui");
    B_Ui_Ui lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_Ui)");
    check_field_offset(lv, v1, 0, "B_Ui_Ui.v1");
    check_field_offset(lv, v2, 4, "B_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "B_Ui_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_Ui(Test_B_Ui_Ui, "B_Ui_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_Ul  {
  bool v1;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 B_Ui_Ul) C1{ Fc Fi FL}



static void Test_B_Ui_Ul()
{
  {
    init_simple_test("B_Ui_Ul");
    B_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(B_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_Ul)");
    check_field_offset(lv, v1, 0, "B_Ui_Ul.v1");
    check_field_offset(lv, v2, 4, "B_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "B_Ui_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_Ul(Test_B_Ui_Ul, "B_Ui_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_Us  {
  bool v1;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 B_Ui_Us) C1{ Fc Fi Fs}



static void Test_B_Ui_Us()
{
  {
    init_simple_test("B_Ui_Us");
    B_Ui_Us lv;
    check2(sizeof(lv), 12, "sizeof(B_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(B_Ui_Us)");
    check_field_offset(lv, v1, 0, "B_Ui_Us.v1");
    check_field_offset(lv, v2, 4, "B_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "B_Ui_Us.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_Us(Test_B_Ui_Us, "B_Ui_Us", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ui_Vp  {
  bool v1;
  unsigned int v2;
  void *v3;
};
//SIG(1 B_Ui_Vp) C1{ Fc Fi Fp}



static void Test_B_Ui_Vp()
{
  {
    init_simple_test("B_Ui_Vp");
    B_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ui_Vp)");
    check_field_offset(lv, v1, 0, "B_Ui_Vp.v1");
    check_field_offset(lv, v2, 4, "B_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "B_Ui_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_Ui_Vp(Test_B_Ui_Vp, "B_Ui_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul  {
  bool v1;
  __tsu64 v2;
};
//SIG(1 B_Ul) C1{ Fc FL}



static void Test_B_Ul()
{
  {
    init_simple_test("B_Ul");
    B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul)");
    check_field_offset(lv, v1, 0, "B_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul.v2");
  }
}
static Arrange_To_Call_Me vB_Ul(Test_B_Ul, "B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_B  {
  bool v1;
  __tsu64 v2;
  bool v3;
};
//SIG(1 B_Ul_B) C1{ Fc FL Fc}



static void Test_B_Ul_B()
{
  {
    init_simple_test("B_Ul_B");
    B_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_B)");
    check_field_offset(lv, v1, 0, "B_Ul_B.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_B(Test_B_Ul_B, "B_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu15i  {
  bool v1;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 B_Ul_BFu15i) C1{ Fc FL Fi:15}



static void Test_B_Ul_BFu15i()
{
  {
    init_simple_test("B_Ul_BFu15i");
    static B_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu15i)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "B_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "B_Ul_BFu15i");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu15i(Test_B_Ul_BFu15i, "B_Ul_BFu15i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu15ll  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 B_Ul_BFu15ll) C1{ Fc FL FL:15}



static void Test_B_Ul_BFu15ll()
{
  {
    init_simple_test("B_Ul_BFu15ll");
    static B_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "B_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "B_Ul_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu15ll(Test_B_Ul_BFu15ll, "B_Ul_BFu15ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu15s  {
  bool v1;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 B_Ul_BFu15s) C1{ Fc FL Fs:15}



static void Test_B_Ul_BFu15s()
{
  {
    init_simple_test("B_Ul_BFu15s");
    static B_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu15s)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "B_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "B_Ul_BFu15s");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu15s(Test_B_Ul_BFu15s, "B_Ul_BFu15s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu16i  {
  bool v1;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 B_Ul_BFu16i) C1{ Fc FL Fi:16}



static void Test_B_Ul_BFu16i()
{
  {
    init_simple_test("B_Ul_BFu16i");
    static B_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu16i)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "B_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "B_Ul_BFu16i");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu16i(Test_B_Ul_BFu16i, "B_Ul_BFu16i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu16ll  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 B_Ul_BFu16ll) C1{ Fc FL FL:16}



static void Test_B_Ul_BFu16ll()
{
  {
    init_simple_test("B_Ul_BFu16ll");
    static B_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "B_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "B_Ul_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu16ll(Test_B_Ul_BFu16ll, "B_Ul_BFu16ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu16s  {
  bool v1;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 B_Ul_BFu16s) C1{ Fc FL Fs:16}



static void Test_B_Ul_BFu16s()
{
  {
    init_simple_test("B_Ul_BFu16s");
    static B_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu16s)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "B_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "B_Ul_BFu16s");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu16s(Test_B_Ul_BFu16s, "B_Ul_BFu16s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu17i  {
  bool v1;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 B_Ul_BFu17i) C1{ Fc FL Fi:17}



static void Test_B_Ul_BFu17i()
{
  {
    init_simple_test("B_Ul_BFu17i");
    static B_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu17i)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "B_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "B_Ul_BFu17i");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu17i(Test_B_Ul_BFu17i, "B_Ul_BFu17i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu17ll  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 B_Ul_BFu17ll) C1{ Fc FL FL:17}



static void Test_B_Ul_BFu17ll()
{
  {
    init_simple_test("B_Ul_BFu17ll");
    static B_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "B_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "B_Ul_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu17ll(Test_B_Ul_BFu17ll, "B_Ul_BFu17ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu1c  {
  bool v1;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 B_Ul_BFu1c) C1{ Fc FL Fc:1}



static void Test_B_Ul_BFu1c()
{
  {
    init_simple_test("B_Ul_BFu1c");
    static B_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu1c)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_Ul_BFu1c");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu1c(Test_B_Ul_BFu1c, "B_Ul_BFu1c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu1i  {
  bool v1;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 B_Ul_BFu1i) C1{ Fc FL Fi:1}



static void Test_B_Ul_BFu1i()
{
  {
    init_simple_test("B_Ul_BFu1i");
    static B_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu1i)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_Ul_BFu1i");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu1i(Test_B_Ul_BFu1i, "B_Ul_BFu1i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu1ll  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 B_Ul_BFu1ll) C1{ Fc FL FL:1}



static void Test_B_Ul_BFu1ll()
{
  {
    init_simple_test("B_Ul_BFu1ll");
    static B_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_Ul_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu1ll(Test_B_Ul_BFu1ll, "B_Ul_BFu1ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu1s  {
  bool v1;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 B_Ul_BFu1s) C1{ Fc FL Fs:1}



static void Test_B_Ul_BFu1s()
{
  {
    init_simple_test("B_Ul_BFu1s");
    static B_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu1s)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "B_Ul_BFu1s");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu1s(Test_B_Ul_BFu1s, "B_Ul_BFu1s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu31i  {
  bool v1;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 B_Ul_BFu31i) C1{ Fc FL Fi:31}



static void Test_B_Ul_BFu31i()
{
  {
    init_simple_test("B_Ul_BFu31i");
    static B_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu31i)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "B_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "B_Ul_BFu31i");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu31i(Test_B_Ul_BFu31i, "B_Ul_BFu31i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu31ll  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 B_Ul_BFu31ll) C1{ Fc FL FL:31}



static void Test_B_Ul_BFu31ll()
{
  {
    init_simple_test("B_Ul_BFu31ll");
    static B_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "B_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "B_Ul_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu31ll(Test_B_Ul_BFu31ll, "B_Ul_BFu31ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu32i  {
  bool v1;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 B_Ul_BFu32i) C1{ Fc FL Fi:32}



static void Test_B_Ul_BFu32i()
{
  {
    init_simple_test("B_Ul_BFu32i");
    static B_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu32i)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "B_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "B_Ul_BFu32i");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu32i(Test_B_Ul_BFu32i, "B_Ul_BFu32i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu32ll  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 B_Ul_BFu32ll) C1{ Fc FL FL:32}



static void Test_B_Ul_BFu32ll()
{
  {
    init_simple_test("B_Ul_BFu32ll");
    static B_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "B_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "B_Ul_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu32ll(Test_B_Ul_BFu32ll, "B_Ul_BFu32ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu33  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 B_Ul_BFu33) C1{ Fc FL FL:33}



static void Test_B_Ul_BFu33()
{
  {
    init_simple_test("B_Ul_BFu33");
    static B_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu33)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "B_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "B_Ul_BFu33");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu33(Test_B_Ul_BFu33, "B_Ul_BFu33", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu7c  {
  bool v1;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 B_Ul_BFu7c) C1{ Fc FL Fc:7}



static void Test_B_Ul_BFu7c()
{
  {
    init_simple_test("B_Ul_BFu7c");
    static B_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu7c)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_Ul_BFu7c");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu7c(Test_B_Ul_BFu7c, "B_Ul_BFu7c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu7i  {
  bool v1;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 B_Ul_BFu7i) C1{ Fc FL Fi:7}



static void Test_B_Ul_BFu7i()
{
  {
    init_simple_test("B_Ul_BFu7i");
    static B_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu7i)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_Ul_BFu7i");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu7i(Test_B_Ul_BFu7i, "B_Ul_BFu7i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu7ll  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 B_Ul_BFu7ll) C1{ Fc FL FL:7}



static void Test_B_Ul_BFu7ll()
{
  {
    init_simple_test("B_Ul_BFu7ll");
    static B_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_Ul_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu7ll(Test_B_Ul_BFu7ll, "B_Ul_BFu7ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu7s  {
  bool v1;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 B_Ul_BFu7s) C1{ Fc FL Fs:7}



static void Test_B_Ul_BFu7s()
{
  {
    init_simple_test("B_Ul_BFu7s");
    static B_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu7s)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "B_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "B_Ul_BFu7s");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu7s(Test_B_Ul_BFu7s, "B_Ul_BFu7s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu8c  {
  bool v1;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 B_Ul_BFu8c) C1{ Fc FL Fc:8}



static void Test_B_Ul_BFu8c()
{
  {
    init_simple_test("B_Ul_BFu8c");
    static B_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu8c)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_Ul_BFu8c");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu8c(Test_B_Ul_BFu8c, "B_Ul_BFu8c", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu8i  {
  bool v1;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 B_Ul_BFu8i) C1{ Fc FL Fi:8}



static void Test_B_Ul_BFu8i()
{
  {
    init_simple_test("B_Ul_BFu8i");
    static B_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu8i)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_Ul_BFu8i");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu8i(Test_B_Ul_BFu8i, "B_Ul_BFu8i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu8ll  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 B_Ul_BFu8ll) C1{ Fc FL FL:8}



static void Test_B_Ul_BFu8ll()
{
  {
    init_simple_test("B_Ul_BFu8ll");
    static B_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_Ul_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu8ll(Test_B_Ul_BFu8ll, "B_Ul_BFu8ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu8s  {
  bool v1;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 B_Ul_BFu8s) C1{ Fc FL Fs:8}



static void Test_B_Ul_BFu8s()
{
  {
    init_simple_test("B_Ul_BFu8s");
    static B_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu8s)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "B_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "B_Ul_BFu8s");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu8s(Test_B_Ul_BFu8s, "B_Ul_BFu8s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu9i  {
  bool v1;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 B_Ul_BFu9i) C1{ Fc FL Fi:9}



static void Test_B_Ul_BFu9i()
{
  {
    init_simple_test("B_Ul_BFu9i");
    static B_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu9i)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "B_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "B_Ul_BFu9i");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu9i(Test_B_Ul_BFu9i, "B_Ul_BFu9i", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu9ll  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 B_Ul_BFu9ll) C1{ Fc FL FL:9}



static void Test_B_Ul_BFu9ll()
{
  {
    init_simple_test("B_Ul_BFu9ll");
    static B_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "B_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "B_Ul_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu9ll(Test_B_Ul_BFu9ll, "B_Ul_BFu9ll", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_BFu9s  {
  bool v1;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 B_Ul_BFu9s) C1{ Fc FL Fs:9}



static void Test_B_Ul_BFu9s()
{
  {
    init_simple_test("B_Ul_BFu9s");
    static B_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_BFu9s)");
    check_field_offset(lv, v1, 0, "B_Ul_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "B_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "B_Ul_BFu9s");
  }
}
static Arrange_To_Call_Me vB_Ul_BFu9s(Test_B_Ul_BFu9s, "B_Ul_BFu9s", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_C  {
  bool v1;
  __tsu64 v2;
  char v3;
};
//SIG(1 B_Ul_C) C1{ Fc FL Fc}



static void Test_B_Ul_C()
{
  {
    init_simple_test("B_Ul_C");
    B_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_C)");
    check_field_offset(lv, v1, 0, "B_Ul_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_C.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_C(Test_B_Ul_C, "B_Ul_C", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_D  {
  bool v1;
  __tsu64 v2;
  double v3;
};
//SIG(1 B_Ul_D) C1{ Fc FL[2]}



static void Test_B_Ul_D()
{
  {
    init_simple_test("B_Ul_D");
    B_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_D)");
    check_field_offset(lv, v1, 0, "B_Ul_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_D.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_D(Test_B_Ul_D, "B_Ul_D", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_F  {
  bool v1;
  __tsu64 v2;
  float v3;
};
//SIG(1 B_Ul_F) C1{ Fc FL Fi}



static void Test_B_Ul_F()
{
  {
    init_simple_test("B_Ul_F");
    B_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_F)");
    check_field_offset(lv, v1, 0, "B_Ul_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_F.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_F(Test_B_Ul_F, "B_Ul_F", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_I  {
  bool v1;
  __tsu64 v2;
  int v3;
};
//SIG(1 B_Ul_I) C1{ Fc FL Fi}



static void Test_B_Ul_I()
{
  {
    init_simple_test("B_Ul_I");
    B_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_I)");
    check_field_offset(lv, v1, 0, "B_Ul_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_I.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_I(Test_B_Ul_I, "B_Ul_I", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_Ip  {
  bool v1;
  __tsu64 v2;
  int *v3;
};
//SIG(1 B_Ul_Ip) C1{ Fc FL Fp}



static void Test_B_Ul_Ip()
{
  {
    init_simple_test("B_Ul_Ip");
    B_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_Ip)");
    check_field_offset(lv, v1, 0, "B_Ul_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_Ip(Test_B_Ul_Ip, "B_Ul_Ip", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_L  {
  bool v1;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 B_Ul_L) C1{ Fc FL[2]}



static void Test_B_Ul_L()
{
  {
    init_simple_test("B_Ul_L");
    B_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_L)");
    check_field_offset(lv, v1, 0, "B_Ul_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_L.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_L(Test_B_Ul_L, "B_Ul_L", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_S  {
  bool v1;
  __tsu64 v2;
  short v3;
};
//SIG(1 B_Ul_S) C1{ Fc FL Fs}



static void Test_B_Ul_S()
{
  {
    init_simple_test("B_Ul_S");
    B_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_S)");
    check_field_offset(lv, v1, 0, "B_Ul_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_S.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_S(Test_B_Ul_S, "B_Ul_S", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_Uc  {
  bool v1;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 B_Ul_Uc) C1{ Fc FL Fc}



static void Test_B_Ul_Uc()
{
  {
    init_simple_test("B_Ul_Uc");
    B_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_Uc)");
    check_field_offset(lv, v1, 0, "B_Ul_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_Uc(Test_B_Ul_Uc, "B_Ul_Uc", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_Ui  {
  bool v1;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 B_Ul_Ui) C1{ Fc FL Fi}



static void Test_B_Ul_Ui()
{
  {
    init_simple_test("B_Ul_Ui");
    B_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_Ui)");
    check_field_offset(lv, v1, 0, "B_Ul_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_Ui(Test_B_Ul_Ui, "B_Ul_Ui", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_Ul  {
  bool v1;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 B_Ul_Ul) C1{ Fc FL[2]}



static void Test_B_Ul_Ul()
{
  {
    init_simple_test("B_Ul_Ul");
    B_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(B_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_Ul)");
    check_field_offset(lv, v1, 0, "B_Ul_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_Ul(Test_B_Ul_Ul, "B_Ul_Ul", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_Us  {
  bool v1;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 B_Ul_Us) C1{ Fc FL Fs}



static void Test_B_Ul_Us()
{
  {
    init_simple_test("B_Ul_Us");
    B_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_Us)");
    check_field_offset(lv, v1, 0, "B_Ul_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_Us.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_Us(Test_B_Ul_Us, "B_Ul_Us", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Ul_Vp  {
  bool v1;
  __tsu64 v2;
  void *v3;
};
//SIG(1 B_Ul_Vp) C1{ Fc FL Fp}



static void Test_B_Ul_Vp()
{
  {
    init_simple_test("B_Ul_Vp");
    B_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Ul_Vp)");
    check_field_offset(lv, v1, 0, "B_Ul_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "B_Ul_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_Ul_Vp(Test_B_Ul_Vp, "B_Ul_Vp", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us  {
  bool v1;
  unsigned short v2;
};
//SIG(1 B_Us) C1{ Fc Fs}



static void Test_B_Us()
{
  {
    init_simple_test("B_Us");
    B_Us lv;
    check2(sizeof(lv), 4, "sizeof(B_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us)");
    check_field_offset(lv, v1, 0, "B_Us.v1");
    check_field_offset(lv, v2, 2, "B_Us.v2");
  }
}
static Arrange_To_Call_Me vB_Us(Test_B_Us, "B_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_B  {
  bool v1;
  unsigned short v2;
  bool v3;
};
//SIG(1 B_Us_B) C1{ Fc Fs Fc}



static void Test_B_Us_B()
{
  {
    init_simple_test("B_Us_B");
    B_Us_B lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_B)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_B)");
    check_field_offset(lv, v1, 0, "B_Us_B.v1");
    check_field_offset(lv, v2, 2, "B_Us_B.v2");
    check_field_offset(lv, v3, 4, "B_Us_B.v3");
  }
}
static Arrange_To_Call_Me vB_Us_B(Test_B_Us_B, "B_Us_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu15i  {
  bool v1;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 B_Us_BFu15i) C1{ Fc Fs Fi:15}



static void Test_B_Us_BFu15i()
{
  {
    init_simple_test("B_Us_BFu15i");
    static B_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_BFu15i)");
    check_field_offset(lv, v1, 0, "B_Us_BFu15i.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_Us_BFu15i");
  }
}
static Arrange_To_Call_Me vB_Us_BFu15i(Test_B_Us_BFu15i, "B_Us_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu15ll  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 B_Us_BFu15ll) C1{ Fc Fs FL:15}



static void Test_B_Us_BFu15ll()
{
  {
    init_simple_test("B_Us_BFu15ll");
    static B_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_Us_BFu15ll.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_Us_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_Us_BFu15ll(Test_B_Us_BFu15ll, "B_Us_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu15s  {
  bool v1;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 B_Us_BFu15s) C1{ Fc Fs Fs:15}



static void Test_B_Us_BFu15s()
{
  {
    init_simple_test("B_Us_BFu15s");
    static B_Us_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_BFu15s)");
    check_field_offset(lv, v1, 0, "B_Us_BFu15s.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "B_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "B_Us_BFu15s");
  }
}
static Arrange_To_Call_Me vB_Us_BFu15s(Test_B_Us_BFu15s, "B_Us_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu16i  {
  bool v1;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 B_Us_BFu16i) C1{ Fc Fs Fi:16}



static void Test_B_Us_BFu16i()
{
  {
    init_simple_test("B_Us_BFu16i");
    static B_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_BFu16i)");
    check_field_offset(lv, v1, 0, "B_Us_BFu16i.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_Us_BFu16i");
  }
}
static Arrange_To_Call_Me vB_Us_BFu16i(Test_B_Us_BFu16i, "B_Us_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu16ll  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 B_Us_BFu16ll) C1{ Fc Fs FL:16}



static void Test_B_Us_BFu16ll()
{
  {
    init_simple_test("B_Us_BFu16ll");
    static B_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_Us_BFu16ll.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_Us_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_Us_BFu16ll(Test_B_Us_BFu16ll, "B_Us_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu16s  {
  bool v1;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 B_Us_BFu16s) C1{ Fc Fs Fs:16}



static void Test_B_Us_BFu16s()
{
  {
    init_simple_test("B_Us_BFu16s");
    static B_Us_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_BFu16s)");
    check_field_offset(lv, v1, 0, "B_Us_BFu16s.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "B_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "B_Us_BFu16s");
  }
}
static Arrange_To_Call_Me vB_Us_BFu16s(Test_B_Us_BFu16s, "B_Us_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu17i  {
  bool v1;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 B_Us_BFu17i) C1{ Fc Fs Fi:17}



static void Test_B_Us_BFu17i()
{
  {
    init_simple_test("B_Us_BFu17i");
    static B_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_BFu17i)");
    check_field_offset(lv, v1, 0, "B_Us_BFu17i.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_Us_BFu17i");
  }
}
static Arrange_To_Call_Me vB_Us_BFu17i(Test_B_Us_BFu17i, "B_Us_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu17ll  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 B_Us_BFu17ll) C1{ Fc Fs FL:17}



static void Test_B_Us_BFu17ll()
{
  {
    init_simple_test("B_Us_BFu17ll");
    static B_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_Us_BFu17ll.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "B_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "B_Us_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_Us_BFu17ll(Test_B_Us_BFu17ll, "B_Us_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu1c  {
  bool v1;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 B_Us_BFu1c) C1{ Fc Fs Fc:1}



static void Test_B_Us_BFu1c()
{
  {
    init_simple_test("B_Us_BFu1c");
    static B_Us_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_BFu1c)");
    check_field_offset(lv, v1, 0, "B_Us_BFu1c.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_Us_BFu1c");
  }
}
static Arrange_To_Call_Me vB_Us_BFu1c(Test_B_Us_BFu1c, "B_Us_BFu1c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu1i  {
  bool v1;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 B_Us_BFu1i) C1{ Fc Fs Fi:1}



static void Test_B_Us_BFu1i()
{
  {
    init_simple_test("B_Us_BFu1i");
    static B_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_BFu1i)");
    check_field_offset(lv, v1, 0, "B_Us_BFu1i.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_Us_BFu1i");
  }
}
static Arrange_To_Call_Me vB_Us_BFu1i(Test_B_Us_BFu1i, "B_Us_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu1ll  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 B_Us_BFu1ll) C1{ Fc Fs FL:1}



static void Test_B_Us_BFu1ll()
{
  {
    init_simple_test("B_Us_BFu1ll");
    static B_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_Us_BFu1ll.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_Us_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_Us_BFu1ll(Test_B_Us_BFu1ll, "B_Us_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu1s  {
  bool v1;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 B_Us_BFu1s) C1{ Fc Fs Fs:1}



static void Test_B_Us_BFu1s()
{
  {
    init_simple_test("B_Us_BFu1s");
    static B_Us_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_BFu1s)");
    check_field_offset(lv, v1, 0, "B_Us_BFu1s.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "B_Us_BFu1s");
  }
}
static Arrange_To_Call_Me vB_Us_BFu1s(Test_B_Us_BFu1s, "B_Us_BFu1s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu31i  {
  bool v1;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 B_Us_BFu31i) C1{ Fc Fs Fi:31}



static void Test_B_Us_BFu31i()
{
  {
    init_simple_test("B_Us_BFu31i");
    static B_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_BFu31i)");
    check_field_offset(lv, v1, 0, "B_Us_BFu31i.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_Us_BFu31i");
  }
}
static Arrange_To_Call_Me vB_Us_BFu31i(Test_B_Us_BFu31i, "B_Us_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu31ll  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 B_Us_BFu31ll) C1{ Fc Fs FL:31}



static void Test_B_Us_BFu31ll()
{
  {
    init_simple_test("B_Us_BFu31ll");
    static B_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_Us_BFu31ll.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "B_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "B_Us_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_Us_BFu31ll(Test_B_Us_BFu31ll, "B_Us_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu32i  {
  bool v1;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 B_Us_BFu32i) C1{ Fc Fs Fi:32}



static void Test_B_Us_BFu32i()
{
  {
    init_simple_test("B_Us_BFu32i");
    static B_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_BFu32i)");
    check_field_offset(lv, v1, 0, "B_Us_BFu32i.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_Us_BFu32i");
  }
}
static Arrange_To_Call_Me vB_Us_BFu32i(Test_B_Us_BFu32i, "B_Us_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu32ll  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 B_Us_BFu32ll) C1{ Fc Fs FL:32}



static void Test_B_Us_BFu32ll()
{
  {
    init_simple_test("B_Us_BFu32ll");
    static B_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_Us_BFu32ll.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "B_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "B_Us_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_Us_BFu32ll(Test_B_Us_BFu32ll, "B_Us_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu33  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 B_Us_BFu33) C1{ Fc Fs FL:33}



static void Test_B_Us_BFu33()
{
  {
    init_simple_test("B_Us_BFu33");
    static B_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu33)");
    check_field_offset(lv, v1, 0, "B_Us_BFu33.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "B_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "B_Us_BFu33");
  }
}
static Arrange_To_Call_Me vB_Us_BFu33(Test_B_Us_BFu33, "B_Us_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu7c  {
  bool v1;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 B_Us_BFu7c) C1{ Fc Fs Fc:7}



static void Test_B_Us_BFu7c()
{
  {
    init_simple_test("B_Us_BFu7c");
    static B_Us_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_BFu7c)");
    check_field_offset(lv, v1, 0, "B_Us_BFu7c.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_Us_BFu7c");
  }
}
static Arrange_To_Call_Me vB_Us_BFu7c(Test_B_Us_BFu7c, "B_Us_BFu7c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu7i  {
  bool v1;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 B_Us_BFu7i) C1{ Fc Fs Fi:7}



static void Test_B_Us_BFu7i()
{
  {
    init_simple_test("B_Us_BFu7i");
    static B_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_BFu7i)");
    check_field_offset(lv, v1, 0, "B_Us_BFu7i.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_Us_BFu7i");
  }
}
static Arrange_To_Call_Me vB_Us_BFu7i(Test_B_Us_BFu7i, "B_Us_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu7ll  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 B_Us_BFu7ll) C1{ Fc Fs FL:7}



static void Test_B_Us_BFu7ll()
{
  {
    init_simple_test("B_Us_BFu7ll");
    static B_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_Us_BFu7ll.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_Us_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_Us_BFu7ll(Test_B_Us_BFu7ll, "B_Us_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu7s  {
  bool v1;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 B_Us_BFu7s) C1{ Fc Fs Fs:7}



static void Test_B_Us_BFu7s()
{
  {
    init_simple_test("B_Us_BFu7s");
    static B_Us_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_BFu7s)");
    check_field_offset(lv, v1, 0, "B_Us_BFu7s.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "B_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "B_Us_BFu7s");
  }
}
static Arrange_To_Call_Me vB_Us_BFu7s(Test_B_Us_BFu7s, "B_Us_BFu7s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu8c  {
  bool v1;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 B_Us_BFu8c) C1{ Fc Fs Fc:8}



static void Test_B_Us_BFu8c()
{
  {
    init_simple_test("B_Us_BFu8c");
    static B_Us_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_BFu8c)");
    check_field_offset(lv, v1, 0, "B_Us_BFu8c.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_Us_BFu8c");
  }
}
static Arrange_To_Call_Me vB_Us_BFu8c(Test_B_Us_BFu8c, "B_Us_BFu8c", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu8i  {
  bool v1;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 B_Us_BFu8i) C1{ Fc Fs Fi:8}



static void Test_B_Us_BFu8i()
{
  {
    init_simple_test("B_Us_BFu8i");
    static B_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_BFu8i)");
    check_field_offset(lv, v1, 0, "B_Us_BFu8i.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_Us_BFu8i");
  }
}
static Arrange_To_Call_Me vB_Us_BFu8i(Test_B_Us_BFu8i, "B_Us_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu8ll  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 B_Us_BFu8ll) C1{ Fc Fs FL:8}



static void Test_B_Us_BFu8ll()
{
  {
    init_simple_test("B_Us_BFu8ll");
    static B_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_Us_BFu8ll.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_Us_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_Us_BFu8ll(Test_B_Us_BFu8ll, "B_Us_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu8s  {
  bool v1;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 B_Us_BFu8s) C1{ Fc Fs Fs:8}



static void Test_B_Us_BFu8s()
{
  {
    init_simple_test("B_Us_BFu8s");
    static B_Us_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_BFu8s)");
    check_field_offset(lv, v1, 0, "B_Us_BFu8s.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "B_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "B_Us_BFu8s");
  }
}
static Arrange_To_Call_Me vB_Us_BFu8s(Test_B_Us_BFu8s, "B_Us_BFu8s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu9i  {
  bool v1;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 B_Us_BFu9i) C1{ Fc Fs Fi:9}



static void Test_B_Us_BFu9i()
{
  {
    init_simple_test("B_Us_BFu9i");
    static B_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_BFu9i)");
    check_field_offset(lv, v1, 0, "B_Us_BFu9i.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_Us_BFu9i");
  }
}
static Arrange_To_Call_Me vB_Us_BFu9i(Test_B_Us_BFu9i, "B_Us_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu9ll  {
  bool v1;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 B_Us_BFu9ll) C1{ Fc Fs FL:9}



static void Test_B_Us_BFu9ll()
{
  {
    init_simple_test("B_Us_BFu9ll");
    static B_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_Us_BFu9ll.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_Us_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_Us_BFu9ll(Test_B_Us_BFu9ll, "B_Us_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_BFu9s  {
  bool v1;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 B_Us_BFu9s) C1{ Fc Fs Fs:9}



static void Test_B_Us_BFu9s()
{
  {
    init_simple_test("B_Us_BFu9s");
    static B_Us_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_BFu9s)");
    check_field_offset(lv, v1, 0, "B_Us_BFu9s.v1");
    check_field_offset(lv, v2, 2, "B_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "B_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "B_Us_BFu9s");
  }
}
static Arrange_To_Call_Me vB_Us_BFu9s(Test_B_Us_BFu9s, "B_Us_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_C  {
  bool v1;
  unsigned short v2;
  char v3;
};
//SIG(1 B_Us_C) C1{ Fc Fs Fc}



static void Test_B_Us_C()
{
  {
    init_simple_test("B_Us_C");
    B_Us_C lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_C)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_C)");
    check_field_offset(lv, v1, 0, "B_Us_C.v1");
    check_field_offset(lv, v2, 2, "B_Us_C.v2");
    check_field_offset(lv, v3, 4, "B_Us_C.v3");
  }
}
static Arrange_To_Call_Me vB_Us_C(Test_B_Us_C, "B_Us_C", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_D  {
  bool v1;
  unsigned short v2;
  double v3;
};
//SIG(1 B_Us_D) C1{ Fc Fs FL}



static void Test_B_Us_D()
{
  {
    init_simple_test("B_Us_D");
    B_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_D)");
    check_field_offset(lv, v1, 0, "B_Us_D.v1");
    check_field_offset(lv, v2, 2, "B_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Us_D.v3");
  }
}
static Arrange_To_Call_Me vB_Us_D(Test_B_Us_D, "B_Us_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_F  {
  bool v1;
  unsigned short v2;
  float v3;
};
//SIG(1 B_Us_F) C1{ Fc Fs Fi}



static void Test_B_Us_F()
{
  {
    init_simple_test("B_Us_F");
    B_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_F)");
    check_field_offset(lv, v1, 0, "B_Us_F.v1");
    check_field_offset(lv, v2, 2, "B_Us_F.v2");
    check_field_offset(lv, v3, 4, "B_Us_F.v3");
  }
}
static Arrange_To_Call_Me vB_Us_F(Test_B_Us_F, "B_Us_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_I  {
  bool v1;
  unsigned short v2;
  int v3;
};
//SIG(1 B_Us_I) C1{ Fc Fs Fi}



static void Test_B_Us_I()
{
  {
    init_simple_test("B_Us_I");
    B_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_I)");
    check_field_offset(lv, v1, 0, "B_Us_I.v1");
    check_field_offset(lv, v2, 2, "B_Us_I.v2");
    check_field_offset(lv, v3, 4, "B_Us_I.v3");
  }
}
static Arrange_To_Call_Me vB_Us_I(Test_B_Us_I, "B_Us_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_Ip  {
  bool v1;
  unsigned short v2;
  int *v3;
};
//SIG(1 B_Us_Ip) C1{ Fc Fs Fp}



static void Test_B_Us_Ip()
{
  {
    init_simple_test("B_Us_Ip");
    B_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_Ip)");
    check_field_offset(lv, v1, 0, "B_Us_Ip.v1");
    check_field_offset(lv, v2, 2, "B_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Us_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_Us_Ip(Test_B_Us_Ip, "B_Us_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_L  {
  bool v1;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 B_Us_L) C1{ Fc Fs FL}



static void Test_B_Us_L()
{
  {
    init_simple_test("B_Us_L");
    B_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_L)");
    check_field_offset(lv, v1, 0, "B_Us_L.v1");
    check_field_offset(lv, v2, 2, "B_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Us_L.v3");
  }
}
static Arrange_To_Call_Me vB_Us_L(Test_B_Us_L, "B_Us_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_S  {
  bool v1;
  unsigned short v2;
  short v3;
};
//SIG(1 B_Us_S) C1{ Fc Fs[2]}



static void Test_B_Us_S()
{
  {
    init_simple_test("B_Us_S");
    B_Us_S lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_S)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_S)");
    check_field_offset(lv, v1, 0, "B_Us_S.v1");
    check_field_offset(lv, v2, 2, "B_Us_S.v2");
    check_field_offset(lv, v3, 4, "B_Us_S.v3");
  }
}
static Arrange_To_Call_Me vB_Us_S(Test_B_Us_S, "B_Us_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_Uc  {
  bool v1;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 B_Us_Uc) C1{ Fc Fs Fc}



static void Test_B_Us_Uc()
{
  {
    init_simple_test("B_Us_Uc");
    B_Us_Uc lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_Uc)");
    check_field_offset(lv, v1, 0, "B_Us_Uc.v1");
    check_field_offset(lv, v2, 2, "B_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "B_Us_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_Us_Uc(Test_B_Us_Uc, "B_Us_Uc", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_Ui  {
  bool v1;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 B_Us_Ui) C1{ Fc Fs Fi}



static void Test_B_Us_Ui()
{
  {
    init_simple_test("B_Us_Ui");
    B_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(B_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(B_Us_Ui)");
    check_field_offset(lv, v1, 0, "B_Us_Ui.v1");
    check_field_offset(lv, v2, 2, "B_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "B_Us_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_Us_Ui(Test_B_Us_Ui, "B_Us_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_Ul  {
  bool v1;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 B_Us_Ul) C1{ Fc Fs FL}



static void Test_B_Us_Ul()
{
  {
    init_simple_test("B_Us_Ul");
    B_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(B_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_Ul)");
    check_field_offset(lv, v1, 0, "B_Us_Ul.v1");
    check_field_offset(lv, v2, 2, "B_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Us_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_Us_Ul(Test_B_Us_Ul, "B_Us_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_Us  {
  bool v1;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 B_Us_Us) C1{ Fc Fs[2]}



static void Test_B_Us_Us()
{
  {
    init_simple_test("B_Us_Us");
    B_Us_Us lv;
    check2(sizeof(lv), 6, "sizeof(B_Us_Us)");
    check2(__alignof__(lv), 2, "__alignof__(B_Us_Us)");
    check_field_offset(lv, v1, 0, "B_Us_Us.v1");
    check_field_offset(lv, v2, 2, "B_Us_Us.v2");
    check_field_offset(lv, v3, 4, "B_Us_Us.v3");
  }
}
static Arrange_To_Call_Me vB_Us_Us(Test_B_Us_Us, "B_Us_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Us_Vp  {
  bool v1;
  unsigned short v2;
  void *v3;
};
//SIG(1 B_Us_Vp) C1{ Fc Fs Fp}



static void Test_B_Us_Vp()
{
  {
    init_simple_test("B_Us_Vp");
    B_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Us_Vp)");
    check_field_offset(lv, v1, 0, "B_Us_Vp.v1");
    check_field_offset(lv, v2, 2, "B_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "B_Us_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_Us_Vp(Test_B_Us_Vp, "B_Us_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp  {
  bool v1;
  void *v2;
};
//SIG(1 B_Vp) C1{ Fc Fp}



static void Test_B_Vp()
{
  {
    init_simple_test("B_Vp");
    B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp)");
    check_field_offset(lv, v1, 0, "B_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp.v2");
  }
}
static Arrange_To_Call_Me vB_Vp(Test_B_Vp, "B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_B  {
  bool v1;
  void *v2;
  bool v3;
};
//SIG(1 B_Vp_B) C1{ Fc Fp Fc}



static void Test_B_Vp_B()
{
  {
    init_simple_test("B_Vp_B");
    B_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_B)");
    check_field_offset(lv, v1, 0, "B_Vp_B.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_B(Test_B_Vp_B, "B_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu15i  {
  bool v1;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 B_Vp_BFu15i) C1{ Fc Fp Fi:15}



static void Test_B_Vp_BFu15i()
{
  {
    init_simple_test("B_Vp_BFu15i");
    static B_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu15i)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu15i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "B_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "B_Vp_BFu15i");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu15i(Test_B_Vp_BFu15i, "B_Vp_BFu15i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu15ll  {
  bool v1;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 B_Vp_BFu15ll) C1{ Fc Fp FL:15}



static void Test_B_Vp_BFu15ll()
{
  {
    init_simple_test("B_Vp_BFu15ll");
    static B_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu15ll)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu15ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "B_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "B_Vp_BFu15ll");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu15ll(Test_B_Vp_BFu15ll, "B_Vp_BFu15ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu15s  {
  bool v1;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 B_Vp_BFu15s) C1{ Fc Fp Fs:15}



static void Test_B_Vp_BFu15s()
{
  {
    init_simple_test("B_Vp_BFu15s");
    static B_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu15s)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu15s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "B_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "B_Vp_BFu15s");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu15s(Test_B_Vp_BFu15s, "B_Vp_BFu15s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu16i  {
  bool v1;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 B_Vp_BFu16i) C1{ Fc Fp Fi:16}



static void Test_B_Vp_BFu16i()
{
  {
    init_simple_test("B_Vp_BFu16i");
    static B_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu16i)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu16i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "B_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "B_Vp_BFu16i");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu16i(Test_B_Vp_BFu16i, "B_Vp_BFu16i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu16ll  {
  bool v1;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 B_Vp_BFu16ll) C1{ Fc Fp FL:16}



static void Test_B_Vp_BFu16ll()
{
  {
    init_simple_test("B_Vp_BFu16ll");
    static B_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu16ll)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu16ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "B_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "B_Vp_BFu16ll");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu16ll(Test_B_Vp_BFu16ll, "B_Vp_BFu16ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu16s  {
  bool v1;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 B_Vp_BFu16s) C1{ Fc Fp Fs:16}



static void Test_B_Vp_BFu16s()
{
  {
    init_simple_test("B_Vp_BFu16s");
    static B_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu16s)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu16s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "B_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "B_Vp_BFu16s");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu16s(Test_B_Vp_BFu16s, "B_Vp_BFu16s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu17i  {
  bool v1;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 B_Vp_BFu17i) C1{ Fc Fp Fi:17}



static void Test_B_Vp_BFu17i()
{
  {
    init_simple_test("B_Vp_BFu17i");
    static B_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu17i)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu17i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "B_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "B_Vp_BFu17i");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu17i(Test_B_Vp_BFu17i, "B_Vp_BFu17i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu17ll  {
  bool v1;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 B_Vp_BFu17ll) C1{ Fc Fp FL:17}



static void Test_B_Vp_BFu17ll()
{
  {
    init_simple_test("B_Vp_BFu17ll");
    static B_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu17ll)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu17ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "B_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "B_Vp_BFu17ll");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu17ll(Test_B_Vp_BFu17ll, "B_Vp_BFu17ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu1c  {
  bool v1;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 B_Vp_BFu1c) C1{ Fc Fp Fc:1}



static void Test_B_Vp_BFu1c()
{
  {
    init_simple_test("B_Vp_BFu1c");
    static B_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu1c)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu1c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "B_Vp_BFu1c");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu1c(Test_B_Vp_BFu1c, "B_Vp_BFu1c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu1i  {
  bool v1;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 B_Vp_BFu1i) C1{ Fc Fp Fi:1}



static void Test_B_Vp_BFu1i()
{
  {
    init_simple_test("B_Vp_BFu1i");
    static B_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu1i)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu1i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "B_Vp_BFu1i");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu1i(Test_B_Vp_BFu1i, "B_Vp_BFu1i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu1ll  {
  bool v1;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 B_Vp_BFu1ll) C1{ Fc Fp FL:1}



static void Test_B_Vp_BFu1ll()
{
  {
    init_simple_test("B_Vp_BFu1ll");
    static B_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu1ll)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu1ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "B_Vp_BFu1ll");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu1ll(Test_B_Vp_BFu1ll, "B_Vp_BFu1ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu1s  {
  bool v1;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 B_Vp_BFu1s) C1{ Fc Fp Fs:1}



static void Test_B_Vp_BFu1s()
{
  {
    init_simple_test("B_Vp_BFu1s");
    static B_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu1s)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu1s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "B_Vp_BFu1s");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu1s(Test_B_Vp_BFu1s, "B_Vp_BFu1s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu31i  {
  bool v1;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 B_Vp_BFu31i) C1{ Fc Fp Fi:31}



static void Test_B_Vp_BFu31i()
{
  {
    init_simple_test("B_Vp_BFu31i");
    static B_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu31i)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu31i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "B_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "B_Vp_BFu31i");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu31i(Test_B_Vp_BFu31i, "B_Vp_BFu31i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu31ll  {
  bool v1;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 B_Vp_BFu31ll) C1{ Fc Fp FL:31}



static void Test_B_Vp_BFu31ll()
{
  {
    init_simple_test("B_Vp_BFu31ll");
    static B_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu31ll)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu31ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "B_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "B_Vp_BFu31ll");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu31ll(Test_B_Vp_BFu31ll, "B_Vp_BFu31ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu32i  {
  bool v1;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 B_Vp_BFu32i) C1{ Fc Fp Fi:32}



static void Test_B_Vp_BFu32i()
{
  {
    init_simple_test("B_Vp_BFu32i");
    static B_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu32i)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu32i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "B_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "B_Vp_BFu32i");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu32i(Test_B_Vp_BFu32i, "B_Vp_BFu32i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu32ll  {
  bool v1;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 B_Vp_BFu32ll) C1{ Fc Fp FL:32}



static void Test_B_Vp_BFu32ll()
{
  {
    init_simple_test("B_Vp_BFu32ll");
    static B_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu32ll)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu32ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "B_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "B_Vp_BFu32ll");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu32ll(Test_B_Vp_BFu32ll, "B_Vp_BFu32ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu33  {
  bool v1;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 B_Vp_BFu33) C1{ Fc Fp FL:33}



static void Test_B_Vp_BFu33()
{
  {
    init_simple_test("B_Vp_BFu33");
    static B_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu33)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu33.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "B_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "B_Vp_BFu33");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu33(Test_B_Vp_BFu33, "B_Vp_BFu33", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu7c  {
  bool v1;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 B_Vp_BFu7c) C1{ Fc Fp Fc:7}



static void Test_B_Vp_BFu7c()
{
  {
    init_simple_test("B_Vp_BFu7c");
    static B_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu7c)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu7c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "B_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "B_Vp_BFu7c");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu7c(Test_B_Vp_BFu7c, "B_Vp_BFu7c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu7i  {
  bool v1;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 B_Vp_BFu7i) C1{ Fc Fp Fi:7}



static void Test_B_Vp_BFu7i()
{
  {
    init_simple_test("B_Vp_BFu7i");
    static B_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu7i)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu7i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "B_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "B_Vp_BFu7i");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu7i(Test_B_Vp_BFu7i, "B_Vp_BFu7i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu7ll  {
  bool v1;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 B_Vp_BFu7ll) C1{ Fc Fp FL:7}



static void Test_B_Vp_BFu7ll()
{
  {
    init_simple_test("B_Vp_BFu7ll");
    static B_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu7ll)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu7ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "B_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "B_Vp_BFu7ll");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu7ll(Test_B_Vp_BFu7ll, "B_Vp_BFu7ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu7s  {
  bool v1;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 B_Vp_BFu7s) C1{ Fc Fp Fs:7}



static void Test_B_Vp_BFu7s()
{
  {
    init_simple_test("B_Vp_BFu7s");
    static B_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu7s)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu7s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "B_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "B_Vp_BFu7s");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu7s(Test_B_Vp_BFu7s, "B_Vp_BFu7s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu8c  {
  bool v1;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 B_Vp_BFu8c) C1{ Fc Fp Fc:8}



static void Test_B_Vp_BFu8c()
{
  {
    init_simple_test("B_Vp_BFu8c");
    static B_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu8c)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu8c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "B_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "B_Vp_BFu8c");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu8c(Test_B_Vp_BFu8c, "B_Vp_BFu8c", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu8i  {
  bool v1;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 B_Vp_BFu8i) C1{ Fc Fp Fi:8}



static void Test_B_Vp_BFu8i()
{
  {
    init_simple_test("B_Vp_BFu8i");
    static B_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu8i)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu8i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "B_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "B_Vp_BFu8i");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu8i(Test_B_Vp_BFu8i, "B_Vp_BFu8i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu8ll  {
  bool v1;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 B_Vp_BFu8ll) C1{ Fc Fp FL:8}



static void Test_B_Vp_BFu8ll()
{
  {
    init_simple_test("B_Vp_BFu8ll");
    static B_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu8ll)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu8ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "B_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "B_Vp_BFu8ll");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu8ll(Test_B_Vp_BFu8ll, "B_Vp_BFu8ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu8s  {
  bool v1;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 B_Vp_BFu8s) C1{ Fc Fp Fs:8}



static void Test_B_Vp_BFu8s()
{
  {
    init_simple_test("B_Vp_BFu8s");
    static B_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu8s)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu8s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "B_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "B_Vp_BFu8s");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu8s(Test_B_Vp_BFu8s, "B_Vp_BFu8s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu9i  {
  bool v1;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 B_Vp_BFu9i) C1{ Fc Fp Fi:9}



static void Test_B_Vp_BFu9i()
{
  {
    init_simple_test("B_Vp_BFu9i");
    static B_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu9i)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu9i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "B_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "B_Vp_BFu9i");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu9i(Test_B_Vp_BFu9i, "B_Vp_BFu9i", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu9ll  {
  bool v1;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 B_Vp_BFu9ll) C1{ Fc Fp FL:9}



static void Test_B_Vp_BFu9ll()
{
  {
    init_simple_test("B_Vp_BFu9ll");
    static B_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu9ll)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu9ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "B_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "B_Vp_BFu9ll");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu9ll(Test_B_Vp_BFu9ll, "B_Vp_BFu9ll", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_BFu9s  {
  bool v1;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 B_Vp_BFu9s) C1{ Fc Fp Fs:9}



static void Test_B_Vp_BFu9s()
{
  {
    init_simple_test("B_Vp_BFu9s");
    static B_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_BFu9s)");
    check_field_offset(lv, v1, 0, "B_Vp_BFu9s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "B_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "B_Vp_BFu9s");
  }
}
static Arrange_To_Call_Me vB_Vp_BFu9s(Test_B_Vp_BFu9s, "B_Vp_BFu9s", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_C  {
  bool v1;
  void *v2;
  char v3;
};
//SIG(1 B_Vp_C) C1{ Fc Fp Fc}



static void Test_B_Vp_C()
{
  {
    init_simple_test("B_Vp_C");
    B_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_C)");
    check_field_offset(lv, v1, 0, "B_Vp_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_C.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_C(Test_B_Vp_C, "B_Vp_C", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_D  {
  bool v1;
  void *v2;
  double v3;
};
//SIG(1 B_Vp_D) C1{ Fc Fp FL}



static void Test_B_Vp_D()
{
  {
    init_simple_test("B_Vp_D");
    B_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_D)");
    check_field_offset(lv, v1, 0, "B_Vp_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_D.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_D(Test_B_Vp_D, "B_Vp_D", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_F  {
  bool v1;
  void *v2;
  float v3;
};
//SIG(1 B_Vp_F) C1{ Fc Fp Fi}



static void Test_B_Vp_F()
{
  {
    init_simple_test("B_Vp_F");
    B_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_F)");
    check_field_offset(lv, v1, 0, "B_Vp_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_F.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_F(Test_B_Vp_F, "B_Vp_F", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_I  {
  bool v1;
  void *v2;
  int v3;
};
//SIG(1 B_Vp_I) C1{ Fc Fp Fi}



static void Test_B_Vp_I()
{
  {
    init_simple_test("B_Vp_I");
    B_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_I)");
    check_field_offset(lv, v1, 0, "B_Vp_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_I.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_I(Test_B_Vp_I, "B_Vp_I", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_Ip  {
  bool v1;
  void *v2;
  int *v3;
};
//SIG(1 B_Vp_Ip) C1{ Fc Fp[2]}



static void Test_B_Vp_Ip()
{
  {
    init_simple_test("B_Vp_Ip");
    B_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_Ip)");
    check_field_offset(lv, v1, 0, "B_Vp_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_Ip.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_Ip(Test_B_Vp_Ip, "B_Vp_Ip", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_L  {
  bool v1;
  void *v2;
  __tsi64 v3;
};
//SIG(1 B_Vp_L) C1{ Fc Fp FL}



static void Test_B_Vp_L()
{
  {
    init_simple_test("B_Vp_L");
    B_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_L)");
    check_field_offset(lv, v1, 0, "B_Vp_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_L.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_L(Test_B_Vp_L, "B_Vp_L", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_S  {
  bool v1;
  void *v2;
  short v3;
};
//SIG(1 B_Vp_S) C1{ Fc Fp Fs}



static void Test_B_Vp_S()
{
  {
    init_simple_test("B_Vp_S");
    B_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_S)");
    check_field_offset(lv, v1, 0, "B_Vp_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_S.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_S(Test_B_Vp_S, "B_Vp_S", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_Uc  {
  bool v1;
  void *v2;
  unsigned char v3;
};
//SIG(1 B_Vp_Uc) C1{ Fc Fp Fc}



static void Test_B_Vp_Uc()
{
  {
    init_simple_test("B_Vp_Uc");
    B_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_Uc)");
    check_field_offset(lv, v1, 0, "B_Vp_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_Uc.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_Uc(Test_B_Vp_Uc, "B_Vp_Uc", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_Ui  {
  bool v1;
  void *v2;
  unsigned int v3;
};
//SIG(1 B_Vp_Ui) C1{ Fc Fp Fi}



static void Test_B_Vp_Ui()
{
  {
    init_simple_test("B_Vp_Ui");
    B_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_Ui)");
    check_field_offset(lv, v1, 0, "B_Vp_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_Ui.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_Ui(Test_B_Vp_Ui, "B_Vp_Ui", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_Ul  {
  bool v1;
  void *v2;
  __tsu64 v3;
};
//SIG(1 B_Vp_Ul) C1{ Fc Fp FL}



static void Test_B_Vp_Ul()
{
  {
    init_simple_test("B_Vp_Ul");
    B_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(B_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_Ul)");
    check_field_offset(lv, v1, 0, "B_Vp_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_Ul.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_Ul(Test_B_Vp_Ul, "B_Vp_Ul", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_Us  {
  bool v1;
  void *v2;
  unsigned short v3;
};
//SIG(1 B_Vp_Us) C1{ Fc Fp Fs}



static void Test_B_Vp_Us()
{
  {
    init_simple_test("B_Vp_Us");
    B_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_Us)");
    check_field_offset(lv, v1, 0, "B_Vp_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_Us.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_Us(Test_B_Vp_Us, "B_Vp_Us", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  B_Vp_Vp  {
  bool v1;
  void *v2;
  void *v3;
};
//SIG(1 B_Vp_Vp) C1{ Fc Fp[2]}



static void Test_B_Vp_Vp()
{
  {
    init_simple_test("B_Vp_Vp");
    B_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(B_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(B_Vp_Vp)");
    check_field_offset(lv, v1, 0, "B_Vp_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "B_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "B_Vp_Vp.v3");
  }
}
static Arrange_To_Call_Me vB_Vp_Vp(Test_B_Vp_Vp, "B_Vp_Vp", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B  {
  unsigned int v1:15;
  bool v2;
};
//SIG(1 BFu15i_B) C1{ Fi:15 Fc}



static void Test_BFu15i_B()
{
  {
    init_simple_test("BFu15i_B");
    static BFu15i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B");
    check_field_offset(lv, v2, 2, "BFu15i_B.v2");
  }
}
static Arrange_To_Call_Me vBFu15i_B(Test_BFu15i_B, "BFu15i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_B  {
  unsigned int v1:15;
  bool v2;
  bool v3;
};
//SIG(1 BFu15i_B_B) C1{ Fi:15 Fc[2]}



static void Test_BFu15i_B_B()
{
  {
    init_simple_test("BFu15i_B_B");
    static BFu15i_B_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_B");
    check_field_offset(lv, v2, 2, "BFu15i_B_B.v2");
    check_field_offset(lv, v3, 3, "BFu15i_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_B(Test_BFu15i_B_B, "BFu15i_B_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu15i  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_B_BFu15i) C1{ Fi:15 Fc Fi:15}



static void Test_BFu15i_B_BFu15i()
{
  {
    init_simple_test("BFu15i_B_BFu15i");
    static BFu15i_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu15i");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_B_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu15i(Test_BFu15i_B_BFu15i, "BFu15i_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu15ll  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_B_BFu15ll) C1{ Fi:15 Fc FL:15}



static void Test_BFu15i_B_BFu15ll()
{
  {
    init_simple_test("BFu15i_B_BFu15ll");
    static BFu15i_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu15i_B_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu15ll(Test_BFu15i_B_BFu15ll, "BFu15i_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu15s  {
  unsigned int v1:15;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_B_BFu15s) C1{ Fi:15 Fc Fs:15}



static void Test_BFu15i_B_BFu15s()
{
  {
    init_simple_test("BFu15i_B_BFu15s");
    static BFu15i_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu15s");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_B_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu15s(Test_BFu15i_B_BFu15s, "BFu15i_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu16i  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_B_BFu16i) C1{ Fi:15 Fc Fi:16}



static void Test_BFu15i_B_BFu16i()
{
  {
    init_simple_test("BFu15i_B_BFu16i");
    static BFu15i_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu16i");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_B_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu16i(Test_BFu15i_B_BFu16i, "BFu15i_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu16ll  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_B_BFu16ll) C1{ Fi:15 Fc FL:16}



static void Test_BFu15i_B_BFu16ll()
{
  {
    init_simple_test("BFu15i_B_BFu16ll");
    static BFu15i_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu15i_B_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu15i_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu16ll(Test_BFu15i_B_BFu16ll, "BFu15i_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu16s  {
  unsigned int v1:15;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_B_BFu16s) C1{ Fi:15 Fc Fs:16}



static void Test_BFu15i_B_BFu16s()
{
  {
    init_simple_test("BFu15i_B_BFu16s");
    static BFu15i_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu16s");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_B_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu16s(Test_BFu15i_B_BFu16s, "BFu15i_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu17i  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_B_BFu17i) C1{ Fi:15 Fc Fi:17}



static void Test_BFu15i_B_BFu17i()
{
  {
    init_simple_test("BFu15i_B_BFu17i");
    static BFu15i_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu17i");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu17i(Test_BFu15i_B_BFu17i, "BFu15i_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu17ll  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_B_BFu17ll) C1{ Fi:15 Fc FL:17}



static void Test_BFu15i_B_BFu17ll()
{
  {
    init_simple_test("BFu15i_B_BFu17ll");
    static BFu15i_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu15i_B_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu15i_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu17ll(Test_BFu15i_B_BFu17ll, "BFu15i_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu1c  {
  unsigned int v1:15;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_B_BFu1c) C1{ Fi:15 Fc Fc:1}



static void Test_BFu15i_B_BFu1c()
{
  {
    init_simple_test("BFu15i_B_BFu1c");
    static BFu15i_B_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu1c");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu1c(Test_BFu15i_B_BFu1c, "BFu15i_B_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu1i  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_B_BFu1i) C1{ Fi:15 Fc Fi:1}



static void Test_BFu15i_B_BFu1i()
{
  {
    init_simple_test("BFu15i_B_BFu1i");
    static BFu15i_B_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu1i");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu1i(Test_BFu15i_B_BFu1i, "BFu15i_B_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu1ll  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_B_BFu1ll) C1{ Fi:15 Fc FL:1}



static void Test_BFu15i_B_BFu1ll()
{
  {
    init_simple_test("BFu15i_B_BFu1ll");
    static BFu15i_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu1ll(Test_BFu15i_B_BFu1ll, "BFu15i_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu1s  {
  unsigned int v1:15;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_B_BFu1s) C1{ Fi:15 Fc Fs:1}



static void Test_BFu15i_B_BFu1s()
{
  {
    init_simple_test("BFu15i_B_BFu1s");
    static BFu15i_B_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu1s");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu1s(Test_BFu15i_B_BFu1s, "BFu15i_B_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu31i  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_B_BFu31i) C1{ Fi:15 Fc Fi:31}



static void Test_BFu15i_B_BFu31i()
{
  {
    init_simple_test("BFu15i_B_BFu31i");
    static BFu15i_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu31i");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu31i(Test_BFu15i_B_BFu31i, "BFu15i_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu31ll  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_B_BFu31ll) C1{ Fi:15 Fc FL:31}



static void Test_BFu15i_B_BFu31ll()
{
  {
    init_simple_test("BFu15i_B_BFu31ll");
    static BFu15i_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu15i_B_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu15i_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu31ll(Test_BFu15i_B_BFu31ll, "BFu15i_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu32i  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_B_BFu32i) C1{ Fi:15 Fc Fi:32}



static void Test_BFu15i_B_BFu32i()
{
  {
    init_simple_test("BFu15i_B_BFu32i");
    static BFu15i_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu32i");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu32i(Test_BFu15i_B_BFu32i, "BFu15i_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu32ll  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_B_BFu32ll) C1{ Fi:15 Fc FL:32}



static void Test_BFu15i_B_BFu32ll()
{
  {
    init_simple_test("BFu15i_B_BFu32ll");
    static BFu15i_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu15i_B_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu15i_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu32ll(Test_BFu15i_B_BFu32ll, "BFu15i_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu33  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_B_BFu33) C1{ Fi:15 Fc FL:33}



static void Test_BFu15i_B_BFu33()
{
  {
    init_simple_test("BFu15i_B_BFu33");
    static BFu15i_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu33");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu15i_B_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu15i_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu33(Test_BFu15i_B_BFu33, "BFu15i_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu7c  {
  unsigned int v1:15;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_B_BFu7c) C1{ Fi:15 Fc Fc:7}



static void Test_BFu15i_B_BFu7c()
{
  {
    init_simple_test("BFu15i_B_BFu7c");
    static BFu15i_B_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu7c");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_B_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu7c(Test_BFu15i_B_BFu7c, "BFu15i_B_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu7i  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_B_BFu7i) C1{ Fi:15 Fc Fi:7}



static void Test_BFu15i_B_BFu7i()
{
  {
    init_simple_test("BFu15i_B_BFu7i");
    static BFu15i_B_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu7i");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_B_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu7i(Test_BFu15i_B_BFu7i, "BFu15i_B_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu7ll  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_B_BFu7ll) C1{ Fi:15 Fc FL:7}



static void Test_BFu15i_B_BFu7ll()
{
  {
    init_simple_test("BFu15i_B_BFu7ll");
    static BFu15i_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_B_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu7ll(Test_BFu15i_B_BFu7ll, "BFu15i_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu7s  {
  unsigned int v1:15;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_B_BFu7s) C1{ Fi:15 Fc Fs:7}



static void Test_BFu15i_B_BFu7s()
{
  {
    init_simple_test("BFu15i_B_BFu7s");
    static BFu15i_B_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu7s");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_B_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu7s(Test_BFu15i_B_BFu7s, "BFu15i_B_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu8c  {
  unsigned int v1:15;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_B_BFu8c) C1{ Fi:15 Fc Fc:8}



static void Test_BFu15i_B_BFu8c()
{
  {
    init_simple_test("BFu15i_B_BFu8c");
    static BFu15i_B_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu8c");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_B_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu8c(Test_BFu15i_B_BFu8c, "BFu15i_B_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu8i  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_B_BFu8i) C1{ Fi:15 Fc Fi:8}



static void Test_BFu15i_B_BFu8i()
{
  {
    init_simple_test("BFu15i_B_BFu8i");
    static BFu15i_B_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu8i");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_B_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu8i(Test_BFu15i_B_BFu8i, "BFu15i_B_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu8ll  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_B_BFu8ll) C1{ Fi:15 Fc FL:8}



static void Test_BFu15i_B_BFu8ll()
{
  {
    init_simple_test("BFu15i_B_BFu8ll");
    static BFu15i_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_B_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu8ll(Test_BFu15i_B_BFu8ll, "BFu15i_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu8s  {
  unsigned int v1:15;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_B_BFu8s) C1{ Fi:15 Fc Fs:8}



static void Test_BFu15i_B_BFu8s()
{
  {
    init_simple_test("BFu15i_B_BFu8s");
    static BFu15i_B_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu8s");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_B_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu8s(Test_BFu15i_B_BFu8s, "BFu15i_B_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu9i  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_B_BFu9i) C1{ Fi:15 Fc Fi:9}



static void Test_BFu15i_B_BFu9i()
{
  {
    init_simple_test("BFu15i_B_BFu9i");
    static BFu15i_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu9i");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_B_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu9i(Test_BFu15i_B_BFu9i, "BFu15i_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu9ll  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_B_BFu9ll) C1{ Fi:15 Fc FL:9}



static void Test_BFu15i_B_BFu9ll()
{
  {
    init_simple_test("BFu15i_B_BFu9ll");
    static BFu15i_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu15i_B_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu15i_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu9ll(Test_BFu15i_B_BFu9ll, "BFu15i_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_BFu9s  {
  unsigned int v1:15;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_B_BFu9s) C1{ Fi:15 Fc Fs:9}



static void Test_BFu15i_B_BFu9s()
{
  {
    init_simple_test("BFu15i_B_BFu9s");
    static BFu15i_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_BFu9s");
    check_field_offset(lv, v2, 2, "BFu15i_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_B_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu15i_B_BFu9s(Test_BFu15i_B_BFu9s, "BFu15i_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_C  {
  unsigned int v1:15;
  bool v2;
  char v3;
};
//SIG(1 BFu15i_B_C) C1{ Fi:15 Fc[2]}



static void Test_BFu15i_B_C()
{
  {
    init_simple_test("BFu15i_B_C");
    static BFu15i_B_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_C");
    check_field_offset(lv, v2, 2, "BFu15i_B_C.v2");
    check_field_offset(lv, v3, 3, "BFu15i_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_C(Test_BFu15i_B_C, "BFu15i_B_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_D  {
  unsigned int v1:15;
  bool v2;
  double v3;
};
//SIG(1 BFu15i_B_D) C1{ Fi:15 Fc FL}



static void Test_BFu15i_B_D()
{
  {
    init_simple_test("BFu15i_B_D");
    static BFu15i_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_D");
    check_field_offset(lv, v2, 2, "BFu15i_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_D(Test_BFu15i_B_D, "BFu15i_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_F  {
  unsigned int v1:15;
  bool v2;
  float v3;
};
//SIG(1 BFu15i_B_F) C1{ Fi:15 Fc Fi}



static void Test_BFu15i_B_F()
{
  {
    init_simple_test("BFu15i_B_F");
    static BFu15i_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_F");
    check_field_offset(lv, v2, 2, "BFu15i_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu15i_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_F(Test_BFu15i_B_F, "BFu15i_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_I  {
  unsigned int v1:15;
  bool v2;
  int v3;
};
//SIG(1 BFu15i_B_I) C1{ Fi:15 Fc Fi}



static void Test_BFu15i_B_I()
{
  {
    init_simple_test("BFu15i_B_I");
    static BFu15i_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_I");
    check_field_offset(lv, v2, 2, "BFu15i_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu15i_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_I(Test_BFu15i_B_I, "BFu15i_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_Ip  {
  unsigned int v1:15;
  bool v2;
  int *v3;
};
//SIG(1 BFu15i_B_Ip) C1{ Fi:15 Fc Fp}



static void Test_BFu15i_B_Ip()
{
  {
    init_simple_test("BFu15i_B_Ip");
    static BFu15i_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_Ip");
    check_field_offset(lv, v2, 2, "BFu15i_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_Ip(Test_BFu15i_B_Ip, "BFu15i_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_L  {
  unsigned int v1:15;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_B_L) C1{ Fi:15 Fc FL}



static void Test_BFu15i_B_L()
{
  {
    init_simple_test("BFu15i_B_L");
    static BFu15i_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_L");
    check_field_offset(lv, v2, 2, "BFu15i_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_L(Test_BFu15i_B_L, "BFu15i_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_S  {
  unsigned int v1:15;
  bool v2;
  short v3;
};
//SIG(1 BFu15i_B_S) C1{ Fi:15 Fc Fs}



static void Test_BFu15i_B_S()
{
  {
    init_simple_test("BFu15i_B_S");
    static BFu15i_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_S");
    check_field_offset(lv, v2, 2, "BFu15i_B_S.v2");
    check_field_offset(lv, v3, 4, "BFu15i_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_S(Test_BFu15i_B_S, "BFu15i_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_Uc  {
  unsigned int v1:15;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu15i_B_Uc) C1{ Fi:15 Fc[2]}



static void Test_BFu15i_B_Uc()
{
  {
    init_simple_test("BFu15i_B_Uc");
    static BFu15i_B_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_B_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_Uc");
    check_field_offset(lv, v2, 2, "BFu15i_B_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu15i_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_Uc(Test_BFu15i_B_Uc, "BFu15i_B_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_Ui  {
  unsigned int v1:15;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu15i_B_Ui) C1{ Fi:15 Fc Fi}



static void Test_BFu15i_B_Ui()
{
  {
    init_simple_test("BFu15i_B_Ui");
    static BFu15i_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_Ui");
    check_field_offset(lv, v2, 2, "BFu15i_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu15i_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_Ui(Test_BFu15i_B_Ui, "BFu15i_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_Ul  {
  unsigned int v1:15;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_B_Ul) C1{ Fi:15 Fc FL}



static void Test_BFu15i_B_Ul()
{
  {
    init_simple_test("BFu15i_B_Ul");
    static BFu15i_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_Ul");
    check_field_offset(lv, v2, 2, "BFu15i_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_Ul(Test_BFu15i_B_Ul, "BFu15i_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_Us  {
  unsigned int v1:15;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu15i_B_Us) C1{ Fi:15 Fc Fs}



static void Test_BFu15i_B_Us()
{
  {
    init_simple_test("BFu15i_B_Us");
    static BFu15i_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_B_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_Us");
    check_field_offset(lv, v2, 2, "BFu15i_B_Us.v2");
    check_field_offset(lv, v3, 4, "BFu15i_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_Us(Test_BFu15i_B_Us, "BFu15i_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_B_Vp  {
  unsigned int v1:15;
  bool v2;
  void *v3;
};
//SIG(1 BFu15i_B_Vp) C1{ Fi:15 Fc Fp}



static void Test_BFu15i_B_Vp()
{
  {
    init_simple_test("BFu15i_B_Vp");
    static BFu15i_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_B_Vp");
    check_field_offset(lv, v2, 2, "BFu15i_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_B_Vp(Test_BFu15i_B_Vp, "BFu15i_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu15i_B  {
  unsigned int v1:15;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu15i_BFu15i_B) C1{ Fi:15 Fi:15 Fc}



static void Test_BFu15i_BFu15i_B()
{
  {
    init_simple_test("BFu15i_BFu15i_B");
    static BFu15i_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_B");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_B");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_B");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu15i_B(Test_BFu15i_BFu15i_B, "BFu15i_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu15ll_B  {
  unsigned int v1:15;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu15i_BFu15ll_B) C1{ Fi:15 FL:15 Fc}



static void Test_BFu15i_BFu15ll_B()
{
  {
    init_simple_test("BFu15i_BFu15ll_B");
    static BFu15i_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_B");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_B");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_B");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu15ll_B(Test_BFu15i_BFu15ll_B, "BFu15i_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu15s_B  {
  unsigned int v1:15;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu15i_BFu15s_B) C1{ Fi:15 Fs:15 Fc}



static void Test_BFu15i_BFu15s_B()
{
  {
    init_simple_test("BFu15i_BFu15s_B");
    static BFu15i_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_B");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu15s_B(Test_BFu15i_BFu15s_B, "BFu15i_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu16i_B  {
  unsigned int v1:15;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu15i_BFu16i_B) C1{ Fi:15 Fi:16 Fc}



static void Test_BFu15i_BFu16i_B()
{
  {
    init_simple_test("BFu15i_BFu16i_B");
    static BFu15i_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_B");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_B");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_B");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu16i_B(Test_BFu15i_BFu16i_B, "BFu15i_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu16ll_B  {
  unsigned int v1:15;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu15i_BFu16ll_B) C1{ Fi:15 FL:16 Fc}



static void Test_BFu15i_BFu16ll_B()
{
  {
    init_simple_test("BFu15i_BFu16ll_B");
    static BFu15i_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_B");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_B");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_B");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu16ll_B(Test_BFu15i_BFu16ll_B, "BFu15i_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu16s_B  {
  unsigned int v1:15;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu15i_BFu16s_B) C1{ Fi:15 Fs:16 Fc}



static void Test_BFu15i_BFu16s_B()
{
  {
    init_simple_test("BFu15i_BFu16s_B");
    static BFu15i_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu16s_B(Test_BFu15i_BFu16s_B, "BFu15i_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu17i_B  {
  unsigned int v1:15;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu15i_BFu17i_B) C1{ Fi:15 Fi:17 Fc}



static void Test_BFu15i_BFu17i_B()
{
  {
    init_simple_test("BFu15i_BFu17i_B");
    static BFu15i_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_B");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_B");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_B");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu17i_B(Test_BFu15i_BFu17i_B, "BFu15i_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu17ll_B  {
  unsigned int v1:15;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu15i_BFu17ll_B) C1{ Fi:15 FL:17 Fc}



static void Test_BFu15i_BFu17ll_B()
{
  {
    init_simple_test("BFu15i_BFu17ll_B");
    static BFu15i_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_B");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_B");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_B");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu17ll_B(Test_BFu15i_BFu17ll_B, "BFu15i_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu1c_B  {
  unsigned int v1:15;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu15i_BFu1c_B) C1{ Fi:15 Fc:1 Fc}



static void Test_BFu15i_BFu1c_B()
{
  {
    init_simple_test("BFu15i_BFu1c_B");
    static BFu15i_BFu1c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_B");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu1c_B(Test_BFu15i_BFu1c_B, "BFu15i_BFu1c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu1i_B  {
  unsigned int v1:15;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu15i_BFu1i_B) C1{ Fi:15 Fi:1 Fc}



static void Test_BFu15i_BFu1i_B()
{
  {
    init_simple_test("BFu15i_BFu1i_B");
    static BFu15i_BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_B");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu1i_B(Test_BFu15i_BFu1i_B, "BFu15i_BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu1ll_B  {
  unsigned int v1:15;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu15i_BFu1ll_B) C1{ Fi:15 FL:1 Fc}



static void Test_BFu15i_BFu1ll_B()
{
  {
    init_simple_test("BFu15i_BFu1ll_B");
    static BFu15i_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_B");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu1ll_B(Test_BFu15i_BFu1ll_B, "BFu15i_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu1s_B  {
  unsigned int v1:15;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu15i_BFu1s_B) C1{ Fi:15 Fs:1 Fc}



static void Test_BFu15i_BFu1s_B()
{
  {
    init_simple_test("BFu15i_BFu1s_B");
    static BFu15i_BFu1s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_B");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu1s_B(Test_BFu15i_BFu1s_B, "BFu15i_BFu1s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu31i_B  {
  unsigned int v1:15;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu15i_BFu31i_B) C1{ Fi:15 Fi:31 Fc}



static void Test_BFu15i_BFu31i_B()
{
  {
    init_simple_test("BFu15i_BFu31i_B");
    static BFu15i_BFu31i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu31i_B(Test_BFu15i_BFu31i_B, "BFu15i_BFu31i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu31ll_B  {
  unsigned int v1:15;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu15i_BFu31ll_B) C1{ Fi:15 FL:31 Fc}



static void Test_BFu15i_BFu31ll_B()
{
  {
    init_simple_test("BFu15i_BFu31ll_B");
    static BFu15i_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_B");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_B");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_B");
    check_field_offset(lv, v3, 6, "BFu15i_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu31ll_B(Test_BFu15i_BFu31ll_B, "BFu15i_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu32i_B  {
  unsigned int v1:15;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu15i_BFu32i_B) C1{ Fi:15 Fi:32 Fc}



static void Test_BFu15i_BFu32i_B()
{
  {
    init_simple_test("BFu15i_BFu32i_B");
    static BFu15i_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu32i_B(Test_BFu15i_BFu32i_B, "BFu15i_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu32ll_B  {
  unsigned int v1:15;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu15i_BFu32ll_B) C1{ Fi:15 FL:32 Fc}



static void Test_BFu15i_BFu32ll_B()
{
  {
    init_simple_test("BFu15i_BFu32ll_B");
    static BFu15i_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_B");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_B");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_B");
    check_field_offset(lv, v3, 6, "BFu15i_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu32ll_B(Test_BFu15i_BFu32ll_B, "BFu15i_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu33_B  {
  unsigned int v1:15;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu15i_BFu33_B) C1{ Fi:15 FL:33 Fc}



static void Test_BFu15i_BFu33_B()
{
  {
    init_simple_test("BFu15i_BFu33_B");
    static BFu15i_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_B");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_B");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_B");
    check_field_offset(lv, v3, 6, "BFu15i_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu33_B(Test_BFu15i_BFu33_B, "BFu15i_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu7c_B  {
  unsigned int v1:15;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu15i_BFu7c_B) C1{ Fi:15 Fc:7 Fc}



static void Test_BFu15i_BFu7c_B()
{
  {
    init_simple_test("BFu15i_BFu7c_B");
    static BFu15i_BFu7c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu7c_B(Test_BFu15i_BFu7c_B, "BFu15i_BFu7c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu7i_B  {
  unsigned int v1:15;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu15i_BFu7i_B) C1{ Fi:15 Fi:7 Fc}



static void Test_BFu15i_BFu7i_B()
{
  {
    init_simple_test("BFu15i_BFu7i_B");
    static BFu15i_BFu7i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_B");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_B");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu7i_B(Test_BFu15i_BFu7i_B, "BFu15i_BFu7i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu7ll_B  {
  unsigned int v1:15;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu15i_BFu7ll_B) C1{ Fi:15 FL:7 Fc}



static void Test_BFu15i_BFu7ll_B()
{
  {
    init_simple_test("BFu15i_BFu7ll_B");
    static BFu15i_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_B");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_B");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu7ll_B(Test_BFu15i_BFu7ll_B, "BFu15i_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu7s_B  {
  unsigned int v1:15;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu15i_BFu7s_B) C1{ Fi:15 Fs:7 Fc}



static void Test_BFu15i_BFu7s_B()
{
  {
    init_simple_test("BFu15i_BFu7s_B");
    static BFu15i_BFu7s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu7s_B(Test_BFu15i_BFu7s_B, "BFu15i_BFu7s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu8c_B  {
  unsigned int v1:15;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu15i_BFu8c_B) C1{ Fi:15 Fc:8 Fc}



static void Test_BFu15i_BFu8c_B()
{
  {
    init_simple_test("BFu15i_BFu8c_B");
    static BFu15i_BFu8c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu8c_B(Test_BFu15i_BFu8c_B, "BFu15i_BFu8c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu8i_B  {
  unsigned int v1:15;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu15i_BFu8i_B) C1{ Fi:15 Fi:8 Fc}



static void Test_BFu15i_BFu8i_B()
{
  {
    init_simple_test("BFu15i_BFu8i_B");
    static BFu15i_BFu8i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_B");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_B");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu8i_B(Test_BFu15i_BFu8i_B, "BFu15i_BFu8i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu8ll_B  {
  unsigned int v1:15;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu15i_BFu8ll_B) C1{ Fi:15 FL:8 Fc}



static void Test_BFu15i_BFu8ll_B()
{
  {
    init_simple_test("BFu15i_BFu8ll_B");
    static BFu15i_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_B");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_B");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu8ll_B(Test_BFu15i_BFu8ll_B, "BFu15i_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu8s_B  {
  unsigned int v1:15;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu15i_BFu8s_B) C1{ Fi:15 Fs:8 Fc}



static void Test_BFu15i_BFu8s_B()
{
  {
    init_simple_test("BFu15i_BFu8s_B");
    static BFu15i_BFu8s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu8s_B(Test_BFu15i_BFu8s_B, "BFu15i_BFu8s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu9i_B  {
  unsigned int v1:15;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu15i_BFu9i_B) C1{ Fi:15 Fi:9 Fc}



static void Test_BFu15i_BFu9i_B()
{
  {
    init_simple_test("BFu15i_BFu9i_B");
    static BFu15i_BFu9i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_B");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_B");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu9i_B(Test_BFu15i_BFu9i_B, "BFu15i_BFu9i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu9ll_B  {
  unsigned int v1:15;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu15i_BFu9ll_B) C1{ Fi:15 FL:9 Fc}



static void Test_BFu15i_BFu9ll_B()
{
  {
    init_simple_test("BFu15i_BFu9ll_B");
    static BFu15i_BFu9ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_B");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_B");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_B");
    check_field_offset(lv, v3, 3, "BFu15i_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu9ll_B(Test_BFu15i_BFu9ll_B, "BFu15i_BFu9ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_BFu9s_B  {
  unsigned int v1:15;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu15i_BFu9s_B) C1{ Fi:15 Fs:9 Fc}



static void Test_BFu15i_BFu9s_B()
{
  {
    init_simple_test("BFu15i_BFu9s_B");
    static BFu15i_BFu9s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_B");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_BFu9s_B(Test_BFu15i_BFu9s_B, "BFu15i_BFu9s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_C_B  {
  unsigned int v1:15;
  char v2;
  bool v3;
};
//SIG(1 BFu15i_C_B) C1{ Fi:15 Fc[2]}



static void Test_BFu15i_C_B()
{
  {
    init_simple_test("BFu15i_C_B");
    static BFu15i_C_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_B");
    check_field_offset(lv, v2, 2, "BFu15i_C_B.v2");
    check_field_offset(lv, v3, 3, "BFu15i_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_C_B(Test_BFu15i_C_B, "BFu15i_C_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_D_B  {
  unsigned int v1:15;
  double v2;
  bool v3;
};
//SIG(1 BFu15i_D_B) C1{ Fi:15 FL Fc}



static void Test_BFu15i_D_B()
{
  {
    init_simple_test("BFu15i_D_B");
    static BFu15i_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_D_B(Test_BFu15i_D_B, "BFu15i_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_F_B  {
  unsigned int v1:15;
  float v2;
  bool v3;
};
//SIG(1 BFu15i_F_B) C1{ Fi:15 Fi Fc}



static void Test_BFu15i_F_B()
{
  {
    init_simple_test("BFu15i_F_B");
    static BFu15i_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_B");
    check_field_offset(lv, v2, 4, "BFu15i_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_F_B(Test_BFu15i_F_B, "BFu15i_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_I_B  {
  unsigned int v1:15;
  int v2;
  bool v3;
};
//SIG(1 BFu15i_I_B) C1{ Fi:15 Fi Fc}



static void Test_BFu15i_I_B()
{
  {
    init_simple_test("BFu15i_I_B");
    static BFu15i_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_B");
    check_field_offset(lv, v2, 4, "BFu15i_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_I_B(Test_BFu15i_I_B, "BFu15i_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_Ip_B  {
  unsigned int v1:15;
  int *v2;
  bool v3;
};
//SIG(1 BFu15i_Ip_B) C1{ Fi:15 Fp Fc}



static void Test_BFu15i_Ip_B()
{
  {
    init_simple_test("BFu15i_Ip_B");
    static BFu15i_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_Ip_B(Test_BFu15i_Ip_B, "BFu15i_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_L_B  {
  unsigned int v1:15;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu15i_L_B) C1{ Fi:15 FL Fc}



static void Test_BFu15i_L_B()
{
  {
    init_simple_test("BFu15i_L_B");
    static BFu15i_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_L_B(Test_BFu15i_L_B, "BFu15i_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_S_B  {
  unsigned int v1:15;
  short v2;
  bool v3;
};
//SIG(1 BFu15i_S_B) C1{ Fi:15 Fs Fc}



static void Test_BFu15i_S_B()
{
  {
    init_simple_test("BFu15i_S_B");
    static BFu15i_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_B");
    check_field_offset(lv, v2, 2, "BFu15i_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu15i_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_S_B(Test_BFu15i_S_B, "BFu15i_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_Uc_B  {
  unsigned int v1:15;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu15i_Uc_B) C1{ Fi:15 Fc[2]}



static void Test_BFu15i_Uc_B()
{
  {
    init_simple_test("BFu15i_Uc_B");
    static BFu15i_Uc_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_B");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_B.v2");
    check_field_offset(lv, v3, 3, "BFu15i_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_Uc_B(Test_BFu15i_Uc_B, "BFu15i_Uc_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_Ui_B  {
  unsigned int v1:15;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu15i_Ui_B) C1{ Fi:15 Fi Fc}



static void Test_BFu15i_Ui_B()
{
  {
    init_simple_test("BFu15i_Ui_B");
    static BFu15i_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_B");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_Ui_B(Test_BFu15i_Ui_B, "BFu15i_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_Ul_B  {
  unsigned int v1:15;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu15i_Ul_B) C1{ Fi:15 FL Fc}



static void Test_BFu15i_Ul_B()
{
  {
    init_simple_test("BFu15i_Ul_B");
    static BFu15i_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_Ul_B(Test_BFu15i_Ul_B, "BFu15i_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_Us_B  {
  unsigned int v1:15;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu15i_Us_B) C1{ Fi:15 Fs Fc}



static void Test_BFu15i_Us_B()
{
  {
    init_simple_test("BFu15i_Us_B");
    static BFu15i_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_B");
    check_field_offset(lv, v2, 2, "BFu15i_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_Us_B(Test_BFu15i_Us_B, "BFu15i_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15i_Vp_B  {
  unsigned int v1:15;
  void *v2;
  bool v3;
};
//SIG(1 BFu15i_Vp_B) C1{ Fi:15 Fp Fc}



static void Test_BFu15i_Vp_B()
{
  {
    init_simple_test("BFu15i_Vp_B");
    static BFu15i_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15i_Vp_B(Test_BFu15i_Vp_B, "BFu15i_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B  {
  __tsu64 v1:15;
  bool v2;
};
//SIG(1 BFu15ll_B) C1{ FL:15 Fc}



static void Test_BFu15ll_B()
{
  {
    init_simple_test("BFu15ll_B");
    static BFu15ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B");
    check_field_offset(lv, v2, 2, "BFu15ll_B.v2");
  }
}
static Arrange_To_Call_Me vBFu15ll_B(Test_BFu15ll_B, "BFu15ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_B  {
  __tsu64 v1:15;
  bool v2;
  bool v3;
};
//SIG(1 BFu15ll_B_B) C1{ FL:15 Fc[2]}



static void Test_BFu15ll_B_B()
{
  {
    init_simple_test("BFu15ll_B_B");
    static BFu15ll_B_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_B");
    check_field_offset(lv, v2, 2, "BFu15ll_B_B.v2");
    check_field_offset(lv, v3, 3, "BFu15ll_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_B(Test_BFu15ll_B_B, "BFu15ll_B_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu15i  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu15ll_B_BFu15i) C1{ FL:15 Fc Fi:15}



static void Test_BFu15ll_B_BFu15i()
{
  {
    init_simple_test("BFu15ll_B_BFu15i");
    static BFu15ll_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu15i");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_B_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu15i(Test_BFu15ll_B_BFu15i, "BFu15ll_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu15ll  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15ll_B_BFu15ll) C1{ FL:15 Fc FL:15}



static void Test_BFu15ll_B_BFu15ll()
{
  {
    init_simple_test("BFu15ll_B_BFu15ll");
    static BFu15ll_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu15ll_B_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu15ll(Test_BFu15ll_B_BFu15ll, "BFu15ll_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu15s  {
  __tsu64 v1:15;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu15ll_B_BFu15s) C1{ FL:15 Fc Fs:15}



static void Test_BFu15ll_B_BFu15s()
{
  {
    init_simple_test("BFu15ll_B_BFu15s");
    static BFu15ll_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu15s");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_B_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu15s(Test_BFu15ll_B_BFu15s, "BFu15ll_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu16i  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu15ll_B_BFu16i) C1{ FL:15 Fc Fi:16}



static void Test_BFu15ll_B_BFu16i()
{
  {
    init_simple_test("BFu15ll_B_BFu16i");
    static BFu15ll_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu16i");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15ll_B_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15ll_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu16i(Test_BFu15ll_B_BFu16i, "BFu15ll_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu16ll  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15ll_B_BFu16ll) C1{ FL:15 Fc FL:16}



static void Test_BFu15ll_B_BFu16ll()
{
  {
    init_simple_test("BFu15ll_B_BFu16ll");
    static BFu15ll_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu15ll_B_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu15ll_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu16ll(Test_BFu15ll_B_BFu16ll, "BFu15ll_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu16s  {
  __tsu64 v1:15;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu15ll_B_BFu16s) C1{ FL:15 Fc Fs:16}



static void Test_BFu15ll_B_BFu16s()
{
  {
    init_simple_test("BFu15ll_B_BFu16s");
    static BFu15ll_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu16s");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15ll_B_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15ll_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu16s(Test_BFu15ll_B_BFu16s, "BFu15ll_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu17i  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu15ll_B_BFu17i) C1{ FL:15 Fc Fi:17}



static void Test_BFu15ll_B_BFu17i()
{
  {
    init_simple_test("BFu15ll_B_BFu17i");
    static BFu15ll_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu17i");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15ll_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15ll_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu17i(Test_BFu15ll_B_BFu17i, "BFu15ll_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu17ll  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15ll_B_BFu17ll) C1{ FL:15 Fc FL:17}



static void Test_BFu15ll_B_BFu17ll()
{
  {
    init_simple_test("BFu15ll_B_BFu17ll");
    static BFu15ll_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu15ll_B_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu15ll_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu17ll(Test_BFu15ll_B_BFu17ll, "BFu15ll_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu1c  {
  __tsu64 v1:15;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu15ll_B_BFu1c) C1{ FL:15 Fc Fc:1}



static void Test_BFu15ll_B_BFu1c()
{
  {
    init_simple_test("BFu15ll_B_BFu1c");
    static BFu15ll_B_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu1c");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15ll_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu1c(Test_BFu15ll_B_BFu1c, "BFu15ll_B_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu1i  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu15ll_B_BFu1i) C1{ FL:15 Fc Fi:1}



static void Test_BFu15ll_B_BFu1i()
{
  {
    init_simple_test("BFu15ll_B_BFu1i");
    static BFu15ll_B_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu1i");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15ll_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu1i(Test_BFu15ll_B_BFu1i, "BFu15ll_B_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu1ll  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15ll_B_BFu1ll) C1{ FL:15 Fc FL:1}



static void Test_BFu15ll_B_BFu1ll()
{
  {
    init_simple_test("BFu15ll_B_BFu1ll");
    static BFu15ll_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15ll_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu1ll(Test_BFu15ll_B_BFu1ll, "BFu15ll_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu1s  {
  __tsu64 v1:15;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu15ll_B_BFu1s) C1{ FL:15 Fc Fs:1}



static void Test_BFu15ll_B_BFu1s()
{
  {
    init_simple_test("BFu15ll_B_BFu1s");
    static BFu15ll_B_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu1s");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15ll_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu1s(Test_BFu15ll_B_BFu1s, "BFu15ll_B_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu31i  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu15ll_B_BFu31i) C1{ FL:15 Fc Fi:31}



static void Test_BFu15ll_B_BFu31i()
{
  {
    init_simple_test("BFu15ll_B_BFu31i");
    static BFu15ll_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu31i");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15ll_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15ll_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu31i(Test_BFu15ll_B_BFu31i, "BFu15ll_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu31ll  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15ll_B_BFu31ll) C1{ FL:15 Fc FL:31}



static void Test_BFu15ll_B_BFu31ll()
{
  {
    init_simple_test("BFu15ll_B_BFu31ll");
    static BFu15ll_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu15ll_B_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu15ll_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu31ll(Test_BFu15ll_B_BFu31ll, "BFu15ll_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu32i  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu15ll_B_BFu32i) C1{ FL:15 Fc Fi:32}



static void Test_BFu15ll_B_BFu32i()
{
  {
    init_simple_test("BFu15ll_B_BFu32i");
    static BFu15ll_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu32i");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15ll_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15ll_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu32i(Test_BFu15ll_B_BFu32i, "BFu15ll_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu32ll  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15ll_B_BFu32ll) C1{ FL:15 Fc FL:32}



static void Test_BFu15ll_B_BFu32ll()
{
  {
    init_simple_test("BFu15ll_B_BFu32ll");
    static BFu15ll_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu15ll_B_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu15ll_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu32ll(Test_BFu15ll_B_BFu32ll, "BFu15ll_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu33  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15ll_B_BFu33) C1{ FL:15 Fc FL:33}



static void Test_BFu15ll_B_BFu33()
{
  {
    init_simple_test("BFu15ll_B_BFu33");
    static BFu15ll_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu33");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu15ll_B_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu15ll_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu33(Test_BFu15ll_B_BFu33, "BFu15ll_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu7c  {
  __tsu64 v1:15;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu15ll_B_BFu7c) C1{ FL:15 Fc Fc:7}



static void Test_BFu15ll_B_BFu7c()
{
  {
    init_simple_test("BFu15ll_B_BFu7c");
    static BFu15ll_B_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu7c");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15ll_B_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15ll_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu7c(Test_BFu15ll_B_BFu7c, "BFu15ll_B_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu7i  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu15ll_B_BFu7i) C1{ FL:15 Fc Fi:7}



static void Test_BFu15ll_B_BFu7i()
{
  {
    init_simple_test("BFu15ll_B_BFu7i");
    static BFu15ll_B_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu7i");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15ll_B_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15ll_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu7i(Test_BFu15ll_B_BFu7i, "BFu15ll_B_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu7ll  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15ll_B_BFu7ll) C1{ FL:15 Fc FL:7}



static void Test_BFu15ll_B_BFu7ll()
{
  {
    init_simple_test("BFu15ll_B_BFu7ll");
    static BFu15ll_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15ll_B_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15ll_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu7ll(Test_BFu15ll_B_BFu7ll, "BFu15ll_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu7s  {
  __tsu64 v1:15;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu15ll_B_BFu7s) C1{ FL:15 Fc Fs:7}



static void Test_BFu15ll_B_BFu7s()
{
  {
    init_simple_test("BFu15ll_B_BFu7s");
    static BFu15ll_B_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu7s");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15ll_B_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15ll_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu7s(Test_BFu15ll_B_BFu7s, "BFu15ll_B_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu8c  {
  __tsu64 v1:15;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu15ll_B_BFu8c) C1{ FL:15 Fc Fc:8}



static void Test_BFu15ll_B_BFu8c()
{
  {
    init_simple_test("BFu15ll_B_BFu8c");
    static BFu15ll_B_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu8c");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15ll_B_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15ll_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu8c(Test_BFu15ll_B_BFu8c, "BFu15ll_B_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu8i  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu15ll_B_BFu8i) C1{ FL:15 Fc Fi:8}



static void Test_BFu15ll_B_BFu8i()
{
  {
    init_simple_test("BFu15ll_B_BFu8i");
    static BFu15ll_B_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu8i");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15ll_B_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15ll_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu8i(Test_BFu15ll_B_BFu8i, "BFu15ll_B_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu8ll  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15ll_B_BFu8ll) C1{ FL:15 Fc FL:8}



static void Test_BFu15ll_B_BFu8ll()
{
  {
    init_simple_test("BFu15ll_B_BFu8ll");
    static BFu15ll_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15ll_B_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15ll_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu8ll(Test_BFu15ll_B_BFu8ll, "BFu15ll_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu8s  {
  __tsu64 v1:15;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu15ll_B_BFu8s) C1{ FL:15 Fc Fs:8}



static void Test_BFu15ll_B_BFu8s()
{
  {
    init_simple_test("BFu15ll_B_BFu8s");
    static BFu15ll_B_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu8s");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15ll_B_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15ll_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu8s(Test_BFu15ll_B_BFu8s, "BFu15ll_B_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu9i  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu15ll_B_BFu9i) C1{ FL:15 Fc Fi:9}



static void Test_BFu15ll_B_BFu9i()
{
  {
    init_simple_test("BFu15ll_B_BFu9i");
    static BFu15ll_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu9i");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15ll_B_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15ll_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu9i(Test_BFu15ll_B_BFu9i, "BFu15ll_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu9ll  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15ll_B_BFu9ll) C1{ FL:15 Fc FL:9}



static void Test_BFu15ll_B_BFu9ll()
{
  {
    init_simple_test("BFu15ll_B_BFu9ll");
    static BFu15ll_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu15ll_B_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu15ll_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu9ll(Test_BFu15ll_B_BFu9ll, "BFu15ll_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_BFu9s  {
  __tsu64 v1:15;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu15ll_B_BFu9s) C1{ FL:15 Fc Fs:9}



static void Test_BFu15ll_B_BFu9s()
{
  {
    init_simple_test("BFu15ll_B_BFu9s");
    static BFu15ll_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_BFu9s");
    check_field_offset(lv, v2, 2, "BFu15ll_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15ll_B_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15ll_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_BFu9s(Test_BFu15ll_B_BFu9s, "BFu15ll_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_C  {
  __tsu64 v1:15;
  bool v2;
  char v3;
};
//SIG(1 BFu15ll_B_C) C1{ FL:15 Fc[2]}



static void Test_BFu15ll_B_C()
{
  {
    init_simple_test("BFu15ll_B_C");
    static BFu15ll_B_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_C");
    check_field_offset(lv, v2, 2, "BFu15ll_B_C.v2");
    check_field_offset(lv, v3, 3, "BFu15ll_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_C(Test_BFu15ll_B_C, "BFu15ll_B_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_D  {
  __tsu64 v1:15;
  bool v2;
  double v3;
};
//SIG(1 BFu15ll_B_D) C1{ FL:15 Fc FL}



static void Test_BFu15ll_B_D()
{
  {
    init_simple_test("BFu15ll_B_D");
    static BFu15ll_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_D");
    check_field_offset(lv, v2, 2, "BFu15ll_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_D(Test_BFu15ll_B_D, "BFu15ll_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_F  {
  __tsu64 v1:15;
  bool v2;
  float v3;
};
//SIG(1 BFu15ll_B_F) C1{ FL:15 Fc Fi}



static void Test_BFu15ll_B_F()
{
  {
    init_simple_test("BFu15ll_B_F");
    static BFu15ll_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_F");
    check_field_offset(lv, v2, 2, "BFu15ll_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu15ll_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_F(Test_BFu15ll_B_F, "BFu15ll_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_I  {
  __tsu64 v1:15;
  bool v2;
  int v3;
};
//SIG(1 BFu15ll_B_I) C1{ FL:15 Fc Fi}



static void Test_BFu15ll_B_I()
{
  {
    init_simple_test("BFu15ll_B_I");
    static BFu15ll_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_I");
    check_field_offset(lv, v2, 2, "BFu15ll_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu15ll_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_I(Test_BFu15ll_B_I, "BFu15ll_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_Ip  {
  __tsu64 v1:15;
  bool v2;
  int *v3;
};
//SIG(1 BFu15ll_B_Ip) C1{ FL:15 Fc Fp}



static void Test_BFu15ll_B_Ip()
{
  {
    init_simple_test("BFu15ll_B_Ip");
    static BFu15ll_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15ll_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_Ip");
    check_field_offset(lv, v2, 2, "BFu15ll_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_Ip(Test_BFu15ll_B_Ip, "BFu15ll_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_L  {
  __tsu64 v1:15;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu15ll_B_L) C1{ FL:15 Fc FL}



static void Test_BFu15ll_B_L()
{
  {
    init_simple_test("BFu15ll_B_L");
    static BFu15ll_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_L");
    check_field_offset(lv, v2, 2, "BFu15ll_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_L(Test_BFu15ll_B_L, "BFu15ll_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_S  {
  __tsu64 v1:15;
  bool v2;
  short v3;
};
//SIG(1 BFu15ll_B_S) C1{ FL:15 Fc Fs}



static void Test_BFu15ll_B_S()
{
  {
    init_simple_test("BFu15ll_B_S");
    static BFu15ll_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_S");
    check_field_offset(lv, v2, 2, "BFu15ll_B_S.v2");
    check_field_offset(lv, v3, 4, "BFu15ll_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_S(Test_BFu15ll_B_S, "BFu15ll_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_Uc  {
  __tsu64 v1:15;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu15ll_B_Uc) C1{ FL:15 Fc[2]}



static void Test_BFu15ll_B_Uc()
{
  {
    init_simple_test("BFu15ll_B_Uc");
    static BFu15ll_B_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_B_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_Uc");
    check_field_offset(lv, v2, 2, "BFu15ll_B_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu15ll_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_Uc(Test_BFu15ll_B_Uc, "BFu15ll_B_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_Ui  {
  __tsu64 v1:15;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu15ll_B_Ui) C1{ FL:15 Fc Fi}



static void Test_BFu15ll_B_Ui()
{
  {
    init_simple_test("BFu15ll_B_Ui");
    static BFu15ll_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_Ui");
    check_field_offset(lv, v2, 2, "BFu15ll_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu15ll_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_Ui(Test_BFu15ll_B_Ui, "BFu15ll_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_Ul  {
  __tsu64 v1:15;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu15ll_B_Ul) C1{ FL:15 Fc FL}



static void Test_BFu15ll_B_Ul()
{
  {
    init_simple_test("BFu15ll_B_Ul");
    static BFu15ll_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_Ul");
    check_field_offset(lv, v2, 2, "BFu15ll_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_Ul(Test_BFu15ll_B_Ul, "BFu15ll_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_Us  {
  __tsu64 v1:15;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu15ll_B_Us) C1{ FL:15 Fc Fs}



static void Test_BFu15ll_B_Us()
{
  {
    init_simple_test("BFu15ll_B_Us");
    static BFu15ll_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_B_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_Us");
    check_field_offset(lv, v2, 2, "BFu15ll_B_Us.v2");
    check_field_offset(lv, v3, 4, "BFu15ll_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_Us(Test_BFu15ll_B_Us, "BFu15ll_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_B_Vp  {
  __tsu64 v1:15;
  bool v2;
  void *v3;
};
//SIG(1 BFu15ll_B_Vp) C1{ FL:15 Fc Fp}



static void Test_BFu15ll_B_Vp()
{
  {
    init_simple_test("BFu15ll_B_Vp");
    static BFu15ll_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15ll_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_B_Vp");
    check_field_offset(lv, v2, 2, "BFu15ll_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_B_Vp(Test_BFu15ll_B_Vp, "BFu15ll_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu15i_B  {
  __tsu64 v1:15;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu15ll_BFu15i_B) C1{ FL:15 Fi:15 Fc}



static void Test_BFu15ll_BFu15i_B()
{
  {
    init_simple_test("BFu15ll_BFu15i_B");
    static BFu15ll_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_B");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_B");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_B");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu15i_B(Test_BFu15ll_BFu15i_B, "BFu15ll_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu15ll_B  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu15ll_BFu15ll_B) C1{ FL:15 FL:15 Fc}



static void Test_BFu15ll_BFu15ll_B()
{
  {
    init_simple_test("BFu15ll_BFu15ll_B");
    static BFu15ll_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_B");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu15ll_B(Test_BFu15ll_BFu15ll_B, "BFu15ll_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu15s_B  {
  __tsu64 v1:15;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu15ll_BFu15s_B) C1{ FL:15 Fs:15 Fc}



static void Test_BFu15ll_BFu15s_B()
{
  {
    init_simple_test("BFu15ll_BFu15s_B");
    static BFu15ll_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15s_B");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu15s_B(Test_BFu15ll_BFu15s_B, "BFu15ll_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu16i_B  {
  __tsu64 v1:15;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu15ll_BFu16i_B) C1{ FL:15 Fi:16 Fc}



static void Test_BFu15ll_BFu16i_B()
{
  {
    init_simple_test("BFu15ll_BFu16i_B");
    static BFu15ll_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu16i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu16i_B");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15ll_BFu16i_B");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15ll_BFu16i_B");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu16i_B(Test_BFu15ll_BFu16i_B, "BFu15ll_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu16ll_B  {
  __tsu64 v1:15;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu15ll_BFu16ll_B) C1{ FL:15 FL:16 Fc}



static void Test_BFu15ll_BFu16ll_B()
{
  {
    init_simple_test("BFu15ll_BFu16ll_B");
    static BFu15ll_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15ll_BFu16ll_B");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu16ll_B(Test_BFu15ll_BFu16ll_B, "BFu15ll_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu16s_B  {
  __tsu64 v1:15;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu15ll_BFu16s_B) C1{ FL:15 Fs:16 Fc}



static void Test_BFu15ll_BFu16s_B()
{
  {
    init_simple_test("BFu15ll_BFu16s_B");
    static BFu15ll_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu16s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15ll_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15ll_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu16s_B(Test_BFu15ll_BFu16s_B, "BFu15ll_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu17i_B  {
  __tsu64 v1:15;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu15ll_BFu17i_B) C1{ FL:15 Fi:17 Fc}



static void Test_BFu15ll_BFu17i_B()
{
  {
    init_simple_test("BFu15ll_BFu17i_B");
    static BFu15ll_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu17i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu17i_B");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15ll_BFu17i_B");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15ll_BFu17i_B");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu17i_B(Test_BFu15ll_BFu17i_B, "BFu15ll_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu17ll_B  {
  __tsu64 v1:15;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu15ll_BFu17ll_B) C1{ FL:15 FL:17 Fc}



static void Test_BFu15ll_BFu17ll_B()
{
  {
    init_simple_test("BFu15ll_BFu17ll_B");
    static BFu15ll_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15ll_BFu17ll_B");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu17ll_B(Test_BFu15ll_BFu17ll_B, "BFu15ll_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu1c_B  {
  __tsu64 v1:15;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu15ll_BFu1c_B) C1{ FL:15 Fc:1 Fc}



static void Test_BFu15ll_BFu1c_B()
{
  {
    init_simple_test("BFu15ll_BFu1c_B");
    static BFu15ll_BFu1c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu1c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu1c_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15ll_BFu1c_B");
    check_field_offset(lv, v3, 2, "BFu15ll_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu1c_B(Test_BFu15ll_BFu1c_B, "BFu15ll_BFu1c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu1i_B  {
  __tsu64 v1:15;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu15ll_BFu1i_B) C1{ FL:15 Fi:1 Fc}



static void Test_BFu15ll_BFu1i_B()
{
  {
    init_simple_test("BFu15ll_BFu1i_B");
    static BFu15ll_BFu1i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu1i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu1i_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15ll_BFu1i_B");
    check_field_offset(lv, v3, 2, "BFu15ll_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu1i_B(Test_BFu15ll_BFu1i_B, "BFu15ll_BFu1i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu1ll_B  {
  __tsu64 v1:15;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu15ll_BFu1ll_B) C1{ FL:15 FL:1 Fc}



static void Test_BFu15ll_BFu1ll_B()
{
  {
    init_simple_test("BFu15ll_BFu1ll_B");
    static BFu15ll_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu1ll_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15ll_BFu1ll_B");
    check_field_offset(lv, v3, 2, "BFu15ll_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu1ll_B(Test_BFu15ll_BFu1ll_B, "BFu15ll_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu1s_B  {
  __tsu64 v1:15;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu15ll_BFu1s_B) C1{ FL:15 Fs:1 Fc}



static void Test_BFu15ll_BFu1s_B()
{
  {
    init_simple_test("BFu15ll_BFu1s_B");
    static BFu15ll_BFu1s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu1s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu1s_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15ll_BFu1s_B");
    check_field_offset(lv, v3, 2, "BFu15ll_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu1s_B(Test_BFu15ll_BFu1s_B, "BFu15ll_BFu1s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu31i_B  {
  __tsu64 v1:15;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu15ll_BFu31i_B) C1{ FL:15 Fi:31 Fc}



static void Test_BFu15ll_BFu31i_B()
{
  {
    init_simple_test("BFu15ll_BFu31i_B");
    static BFu15ll_BFu31i_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_BFu31i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15ll_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15ll_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu15ll_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu31i_B(Test_BFu15ll_BFu31i_B, "BFu15ll_BFu31i_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu31ll_B  {
  __tsu64 v1:15;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu15ll_BFu31ll_B) C1{ FL:15 FL:31 Fc}



static void Test_BFu15ll_BFu31ll_B()
{
  {
    init_simple_test("BFu15ll_BFu31ll_B");
    static BFu15ll_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15ll_BFu31ll_B");
    check_field_offset(lv, v3, 6, "BFu15ll_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu31ll_B(Test_BFu15ll_BFu31ll_B, "BFu15ll_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu32i_B  {
  __tsu64 v1:15;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu15ll_BFu32i_B) C1{ FL:15 Fi:32 Fc}



static void Test_BFu15ll_BFu32i_B()
{
  {
    init_simple_test("BFu15ll_BFu32i_B");
    static BFu15ll_BFu32i_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_BFu32i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15ll_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu15ll_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu32i_B(Test_BFu15ll_BFu32i_B, "BFu15ll_BFu32i_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu32ll_B  {
  __tsu64 v1:15;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu15ll_BFu32ll_B) C1{ FL:15 FL:32 Fc}



static void Test_BFu15ll_BFu32ll_B()
{
  {
    init_simple_test("BFu15ll_BFu32ll_B");
    static BFu15ll_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15ll_BFu32ll_B");
    check_field_offset(lv, v3, 6, "BFu15ll_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu32ll_B(Test_BFu15ll_BFu32ll_B, "BFu15ll_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu33_B  {
  __tsu64 v1:15;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu15ll_BFu33_B) C1{ FL:15 FL:33 Fc}



static void Test_BFu15ll_BFu33_B()
{
  {
    init_simple_test("BFu15ll_BFu33_B");
    static BFu15ll_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu33_B");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15ll_BFu33_B");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15ll_BFu33_B");
    check_field_offset(lv, v3, 6, "BFu15ll_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu33_B(Test_BFu15ll_BFu33_B, "BFu15ll_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu7c_B  {
  __tsu64 v1:15;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu15ll_BFu7c_B) C1{ FL:15 Fc:7 Fc}



static void Test_BFu15ll_BFu7c_B()
{
  {
    init_simple_test("BFu15ll_BFu7c_B");
    static BFu15ll_BFu7c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu7c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15ll_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15ll_BFu7c_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu7c_B(Test_BFu15ll_BFu7c_B, "BFu15ll_BFu7c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu7i_B  {
  __tsu64 v1:15;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu15ll_BFu7i_B) C1{ FL:15 Fi:7 Fc}



static void Test_BFu15ll_BFu7i_B()
{
  {
    init_simple_test("BFu15ll_BFu7i_B");
    static BFu15ll_BFu7i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu7i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu7i_B");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15ll_BFu7i_B");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15ll_BFu7i_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu7i_B(Test_BFu15ll_BFu7i_B, "BFu15ll_BFu7i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu7ll_B  {
  __tsu64 v1:15;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu15ll_BFu7ll_B) C1{ FL:15 FL:7 Fc}



static void Test_BFu15ll_BFu7ll_B()
{
  {
    init_simple_test("BFu15ll_BFu7ll_B");
    static BFu15ll_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15ll_BFu7ll_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu7ll_B(Test_BFu15ll_BFu7ll_B, "BFu15ll_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu7s_B  {
  __tsu64 v1:15;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu15ll_BFu7s_B) C1{ FL:15 Fs:7 Fc}



static void Test_BFu15ll_BFu7s_B()
{
  {
    init_simple_test("BFu15ll_BFu7s_B");
    static BFu15ll_BFu7s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu7s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15ll_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15ll_BFu7s_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu7s_B(Test_BFu15ll_BFu7s_B, "BFu15ll_BFu7s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu8c_B  {
  __tsu64 v1:15;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu15ll_BFu8c_B) C1{ FL:15 Fc:8 Fc}



static void Test_BFu15ll_BFu8c_B()
{
  {
    init_simple_test("BFu15ll_BFu8c_B");
    static BFu15ll_BFu8c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu8c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15ll_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15ll_BFu8c_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu8c_B(Test_BFu15ll_BFu8c_B, "BFu15ll_BFu8c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu8i_B  {
  __tsu64 v1:15;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu15ll_BFu8i_B) C1{ FL:15 Fi:8 Fc}



static void Test_BFu15ll_BFu8i_B()
{
  {
    init_simple_test("BFu15ll_BFu8i_B");
    static BFu15ll_BFu8i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu8i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu8i_B");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15ll_BFu8i_B");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15ll_BFu8i_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu8i_B(Test_BFu15ll_BFu8i_B, "BFu15ll_BFu8i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu8ll_B  {
  __tsu64 v1:15;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu15ll_BFu8ll_B) C1{ FL:15 FL:8 Fc}



static void Test_BFu15ll_BFu8ll_B()
{
  {
    init_simple_test("BFu15ll_BFu8ll_B");
    static BFu15ll_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15ll_BFu8ll_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu8ll_B(Test_BFu15ll_BFu8ll_B, "BFu15ll_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu8s_B  {
  __tsu64 v1:15;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu15ll_BFu8s_B) C1{ FL:15 Fs:8 Fc}



static void Test_BFu15ll_BFu8s_B()
{
  {
    init_simple_test("BFu15ll_BFu8s_B");
    static BFu15ll_BFu8s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu8s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15ll_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15ll_BFu8s_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu8s_B(Test_BFu15ll_BFu8s_B, "BFu15ll_BFu8s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu9i_B  {
  __tsu64 v1:15;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu15ll_BFu9i_B) C1{ FL:15 Fi:9 Fc}



static void Test_BFu15ll_BFu9i_B()
{
  {
    init_simple_test("BFu15ll_BFu9i_B");
    static BFu15ll_BFu9i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu9i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu9i_B");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15ll_BFu9i_B");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15ll_BFu9i_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu9i_B(Test_BFu15ll_BFu9i_B, "BFu15ll_BFu9i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu9ll_B  {
  __tsu64 v1:15;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu15ll_BFu9ll_B) C1{ FL:15 FL:9 Fc}



static void Test_BFu15ll_BFu9ll_B()
{
  {
    init_simple_test("BFu15ll_BFu9ll_B");
    static BFu15ll_BFu9ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15ll_BFu9ll_B");
    check_field_offset(lv, v3, 3, "BFu15ll_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu9ll_B(Test_BFu15ll_BFu9ll_B, "BFu15ll_BFu9ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_BFu9s_B  {
  __tsu64 v1:15;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu15ll_BFu9s_B) C1{ FL:15 Fs:9 Fc}



static void Test_BFu15ll_BFu9s_B()
{
  {
    init_simple_test("BFu15ll_BFu9s_B");
    static BFu15ll_BFu9s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu9s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15ll_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15ll_BFu9s_B");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_BFu9s_B(Test_BFu15ll_BFu9s_B, "BFu15ll_BFu9s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_C_B  {
  __tsu64 v1:15;
  char v2;
  bool v3;
};
//SIG(1 BFu15ll_C_B) C1{ FL:15 Fc[2]}



static void Test_BFu15ll_C_B()
{
  {
    init_simple_test("BFu15ll_C_B");
    static BFu15ll_C_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_C_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_C_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_C_B");
    check_field_offset(lv, v2, 2, "BFu15ll_C_B.v2");
    check_field_offset(lv, v3, 3, "BFu15ll_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_C_B(Test_BFu15ll_C_B, "BFu15ll_C_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_D_B  {
  __tsu64 v1:15;
  double v2;
  bool v3;
};
//SIG(1 BFu15ll_D_B) C1{ FL:15 FL Fc}



static void Test_BFu15ll_D_B()
{
  {
    init_simple_test("BFu15ll_D_B");
    static BFu15ll_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15ll_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_D_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15ll_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15ll_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_D_B(Test_BFu15ll_D_B, "BFu15ll_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_F_B  {
  __tsu64 v1:15;
  float v2;
  bool v3;
};
//SIG(1 BFu15ll_F_B) C1{ FL:15 Fi Fc}



static void Test_BFu15ll_F_B()
{
  {
    init_simple_test("BFu15ll_F_B");
    static BFu15ll_F_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_F_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_F_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_F_B");
    check_field_offset(lv, v2, 4, "BFu15ll_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu15ll_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_F_B(Test_BFu15ll_F_B, "BFu15ll_F_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_I_B  {
  __tsu64 v1:15;
  int v2;
  bool v3;
};
//SIG(1 BFu15ll_I_B) C1{ FL:15 Fi Fc}



static void Test_BFu15ll_I_B()
{
  {
    init_simple_test("BFu15ll_I_B");
    static BFu15ll_I_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_I_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_I_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_I_B");
    check_field_offset(lv, v2, 4, "BFu15ll_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu15ll_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_I_B(Test_BFu15ll_I_B, "BFu15ll_I_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_Ip_B  {
  __tsu64 v1:15;
  int *v2;
  bool v3;
};
//SIG(1 BFu15ll_Ip_B) C1{ FL:15 Fp Fc}



static void Test_BFu15ll_Ip_B()
{
  {
    init_simple_test("BFu15ll_Ip_B");
    static BFu15ll_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15ll_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15ll_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15ll_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_Ip_B(Test_BFu15ll_Ip_B, "BFu15ll_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_L_B  {
  __tsu64 v1:15;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu15ll_L_B) C1{ FL:15 FL Fc}



static void Test_BFu15ll_L_B()
{
  {
    init_simple_test("BFu15ll_L_B");
    static BFu15ll_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15ll_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_L_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15ll_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15ll_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_L_B(Test_BFu15ll_L_B, "BFu15ll_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_S_B  {
  __tsu64 v1:15;
  short v2;
  bool v3;
};
//SIG(1 BFu15ll_S_B) C1{ FL:15 Fs Fc}



static void Test_BFu15ll_S_B()
{
  {
    init_simple_test("BFu15ll_S_B");
    static BFu15ll_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_S_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_S_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_S_B");
    check_field_offset(lv, v2, 2, "BFu15ll_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu15ll_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_S_B(Test_BFu15ll_S_B, "BFu15ll_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_Uc_B  {
  __tsu64 v1:15;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu15ll_Uc_B) C1{ FL:15 Fc[2]}



static void Test_BFu15ll_Uc_B()
{
  {
    init_simple_test("BFu15ll_Uc_B");
    static BFu15ll_Uc_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_Uc_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_Uc_B");
    check_field_offset(lv, v2, 2, "BFu15ll_Uc_B.v2");
    check_field_offset(lv, v3, 3, "BFu15ll_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_Uc_B(Test_BFu15ll_Uc_B, "BFu15ll_Uc_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_Ui_B  {
  __tsu64 v1:15;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu15ll_Ui_B) C1{ FL:15 Fi Fc}



static void Test_BFu15ll_Ui_B()
{
  {
    init_simple_test("BFu15ll_Ui_B");
    static BFu15ll_Ui_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_Ui_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_Ui_B");
    check_field_offset(lv, v2, 4, "BFu15ll_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu15ll_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_Ui_B(Test_BFu15ll_Ui_B, "BFu15ll_Ui_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_Ul_B  {
  __tsu64 v1:15;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu15ll_Ul_B) C1{ FL:15 FL Fc}



static void Test_BFu15ll_Ul_B()
{
  {
    init_simple_test("BFu15ll_Ul_B");
    static BFu15ll_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15ll_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15ll_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15ll_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_Ul_B(Test_BFu15ll_Ul_B, "BFu15ll_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_Us_B  {
  __tsu64 v1:15;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu15ll_Us_B) C1{ FL:15 Fs Fc}



static void Test_BFu15ll_Us_B()
{
  {
    init_simple_test("BFu15ll_Us_B");
    static BFu15ll_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_Us_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_Us_B");
    check_field_offset(lv, v2, 2, "BFu15ll_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu15ll_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_Us_B(Test_BFu15ll_Us_B, "BFu15ll_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15ll_Vp_B  {
  __tsu64 v1:15;
  void *v2;
  bool v3;
};
//SIG(1 BFu15ll_Vp_B) C1{ FL:15 Fp Fc}



static void Test_BFu15ll_Vp_B()
{
  {
    init_simple_test("BFu15ll_Vp_B");
    static BFu15ll_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15ll_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15ll_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15ll_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15ll_Vp_B(Test_BFu15ll_Vp_B, "BFu15ll_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B  {
  unsigned short v1:15;
  bool v2;
};
//SIG(1 BFu15s_B) C1{ Fs:15 Fc}



static void Test_BFu15s_B()
{
  {
    init_simple_test("BFu15s_B");
    static BFu15s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B");
    check_field_offset(lv, v2, 2, "BFu15s_B.v2");
  }
}
static Arrange_To_Call_Me vBFu15s_B(Test_BFu15s_B, "BFu15s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_B  {
  unsigned short v1:15;
  bool v2;
  bool v3;
};
//SIG(1 BFu15s_B_B) C1{ Fs:15 Fc[2]}



static void Test_BFu15s_B_B()
{
  {
    init_simple_test("BFu15s_B_B");
    static BFu15s_B_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_B");
    check_field_offset(lv, v2, 2, "BFu15s_B_B.v2");
    check_field_offset(lv, v3, 3, "BFu15s_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_B(Test_BFu15s_B_B, "BFu15s_B_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu15i  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu15s_B_BFu15i) C1{ Fs:15 Fc Fi:15}



static void Test_BFu15s_B_BFu15i()
{
  {
    init_simple_test("BFu15s_B_BFu15i");
    static BFu15s_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu15i");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15s_B_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu15i(Test_BFu15s_B_BFu15i, "BFu15s_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu15ll  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15s_B_BFu15ll) C1{ Fs:15 Fc FL:15}



static void Test_BFu15s_B_BFu15ll()
{
  {
    init_simple_test("BFu15s_B_BFu15ll");
    static BFu15s_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu15s_B_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu15ll(Test_BFu15s_B_BFu15ll, "BFu15s_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu15s  {
  unsigned short v1:15;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu15s_B_BFu15s) C1{ Fs:15 Fc Fs:15}



static void Test_BFu15s_B_BFu15s()
{
  {
    init_simple_test("BFu15s_B_BFu15s");
    static BFu15s_B_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_B_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu15s");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15s_B_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu15s(Test_BFu15s_B_BFu15s, "BFu15s_B_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu16i  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu15s_B_BFu16i) C1{ Fs:15 Fc Fi:16}



static void Test_BFu15s_B_BFu16i()
{
  {
    init_simple_test("BFu15s_B_BFu16i");
    static BFu15s_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu16i");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15s_B_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15s_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu16i(Test_BFu15s_B_BFu16i, "BFu15s_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu16ll  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15s_B_BFu16ll) C1{ Fs:15 Fc FL:16}



static void Test_BFu15s_B_BFu16ll()
{
  {
    init_simple_test("BFu15s_B_BFu16ll");
    static BFu15s_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu15s_B_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu15s_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu16ll(Test_BFu15s_B_BFu16ll, "BFu15s_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu16s  {
  unsigned short v1:15;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu15s_B_BFu16s) C1{ Fs:15 Fc Fs:16}



static void Test_BFu15s_B_BFu16s()
{
  {
    init_simple_test("BFu15s_B_BFu16s");
    static BFu15s_B_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_B_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu16s");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15s_B_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15s_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu16s(Test_BFu15s_B_BFu16s, "BFu15s_B_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu17i  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu15s_B_BFu17i) C1{ Fs:15 Fc Fi:17}



static void Test_BFu15s_B_BFu17i()
{
  {
    init_simple_test("BFu15s_B_BFu17i");
    static BFu15s_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu17i");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15s_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15s_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu17i(Test_BFu15s_B_BFu17i, "BFu15s_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu17ll  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15s_B_BFu17ll) C1{ Fs:15 Fc FL:17}



static void Test_BFu15s_B_BFu17ll()
{
  {
    init_simple_test("BFu15s_B_BFu17ll");
    static BFu15s_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu15s_B_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu15s_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu17ll(Test_BFu15s_B_BFu17ll, "BFu15s_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu1c  {
  unsigned short v1:15;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu15s_B_BFu1c) C1{ Fs:15 Fc Fc:1}



static void Test_BFu15s_B_BFu1c()
{
  {
    init_simple_test("BFu15s_B_BFu1c");
    static BFu15s_B_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu1c");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15s_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu1c(Test_BFu15s_B_BFu1c, "BFu15s_B_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu1i  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu15s_B_BFu1i) C1{ Fs:15 Fc Fi:1}



static void Test_BFu15s_B_BFu1i()
{
  {
    init_simple_test("BFu15s_B_BFu1i");
    static BFu15s_B_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu1i");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15s_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu1i(Test_BFu15s_B_BFu1i, "BFu15s_B_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu1ll  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15s_B_BFu1ll) C1{ Fs:15 Fc FL:1}



static void Test_BFu15s_B_BFu1ll()
{
  {
    init_simple_test("BFu15s_B_BFu1ll");
    static BFu15s_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15s_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15s_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu1ll(Test_BFu15s_B_BFu1ll, "BFu15s_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu1s  {
  unsigned short v1:15;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu15s_B_BFu1s) C1{ Fs:15 Fc Fs:1}



static void Test_BFu15s_B_BFu1s()
{
  {
    init_simple_test("BFu15s_B_BFu1s");
    static BFu15s_B_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu1s");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15s_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu1s(Test_BFu15s_B_BFu1s, "BFu15s_B_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu31i  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu15s_B_BFu31i) C1{ Fs:15 Fc Fi:31}



static void Test_BFu15s_B_BFu31i()
{
  {
    init_simple_test("BFu15s_B_BFu31i");
    static BFu15s_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu31i");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15s_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15s_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu31i(Test_BFu15s_B_BFu31i, "BFu15s_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu31ll  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15s_B_BFu31ll) C1{ Fs:15 Fc FL:31}



static void Test_BFu15s_B_BFu31ll()
{
  {
    init_simple_test("BFu15s_B_BFu31ll");
    static BFu15s_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu15s_B_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu15s_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu31ll(Test_BFu15s_B_BFu31ll, "BFu15s_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu32i  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu15s_B_BFu32i) C1{ Fs:15 Fc Fi:32}



static void Test_BFu15s_B_BFu32i()
{
  {
    init_simple_test("BFu15s_B_BFu32i");
    static BFu15s_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu32i");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15s_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15s_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu32i(Test_BFu15s_B_BFu32i, "BFu15s_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu32ll  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15s_B_BFu32ll) C1{ Fs:15 Fc FL:32}



static void Test_BFu15s_B_BFu32ll()
{
  {
    init_simple_test("BFu15s_B_BFu32ll");
    static BFu15s_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu15s_B_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu15s_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu32ll(Test_BFu15s_B_BFu32ll, "BFu15s_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu33  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15s_B_BFu33) C1{ Fs:15 Fc FL:33}



static void Test_BFu15s_B_BFu33()
{
  {
    init_simple_test("BFu15s_B_BFu33");
    static BFu15s_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu33");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu15s_B_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu15s_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu33(Test_BFu15s_B_BFu33, "BFu15s_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu7c  {
  unsigned short v1:15;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu15s_B_BFu7c) C1{ Fs:15 Fc Fc:7}



static void Test_BFu15s_B_BFu7c()
{
  {
    init_simple_test("BFu15s_B_BFu7c");
    static BFu15s_B_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu7c");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15s_B_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15s_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu7c(Test_BFu15s_B_BFu7c, "BFu15s_B_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu7i  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu15s_B_BFu7i) C1{ Fs:15 Fc Fi:7}



static void Test_BFu15s_B_BFu7i()
{
  {
    init_simple_test("BFu15s_B_BFu7i");
    static BFu15s_B_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu7i");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15s_B_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15s_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu7i(Test_BFu15s_B_BFu7i, "BFu15s_B_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu7ll  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15s_B_BFu7ll) C1{ Fs:15 Fc FL:7}



static void Test_BFu15s_B_BFu7ll()
{
  {
    init_simple_test("BFu15s_B_BFu7ll");
    static BFu15s_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15s_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15s_B_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15s_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu7ll(Test_BFu15s_B_BFu7ll, "BFu15s_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu7s  {
  unsigned short v1:15;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu15s_B_BFu7s) C1{ Fs:15 Fc Fs:7}



static void Test_BFu15s_B_BFu7s()
{
  {
    init_simple_test("BFu15s_B_BFu7s");
    static BFu15s_B_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu7s");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15s_B_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15s_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu7s(Test_BFu15s_B_BFu7s, "BFu15s_B_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu8c  {
  unsigned short v1:15;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu15s_B_BFu8c) C1{ Fs:15 Fc Fc:8}



static void Test_BFu15s_B_BFu8c()
{
  {
    init_simple_test("BFu15s_B_BFu8c");
    static BFu15s_B_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu8c");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15s_B_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15s_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu8c(Test_BFu15s_B_BFu8c, "BFu15s_B_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu8i  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu15s_B_BFu8i) C1{ Fs:15 Fc Fi:8}



static void Test_BFu15s_B_BFu8i()
{
  {
    init_simple_test("BFu15s_B_BFu8i");
    static BFu15s_B_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu8i");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15s_B_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15s_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu8i(Test_BFu15s_B_BFu8i, "BFu15s_B_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu8ll  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15s_B_BFu8ll) C1{ Fs:15 Fc FL:8}



static void Test_BFu15s_B_BFu8ll()
{
  {
    init_simple_test("BFu15s_B_BFu8ll");
    static BFu15s_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15s_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15s_B_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15s_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu8ll(Test_BFu15s_B_BFu8ll, "BFu15s_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu8s  {
  unsigned short v1:15;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu15s_B_BFu8s) C1{ Fs:15 Fc Fs:8}



static void Test_BFu15s_B_BFu8s()
{
  {
    init_simple_test("BFu15s_B_BFu8s");
    static BFu15s_B_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu8s");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15s_B_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15s_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu8s(Test_BFu15s_B_BFu8s, "BFu15s_B_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu9i  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu15s_B_BFu9i) C1{ Fs:15 Fc Fi:9}



static void Test_BFu15s_B_BFu9i()
{
  {
    init_simple_test("BFu15s_B_BFu9i");
    static BFu15s_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu9i");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15s_B_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15s_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu9i(Test_BFu15s_B_BFu9i, "BFu15s_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu9ll  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15s_B_BFu9ll) C1{ Fs:15 Fc FL:9}



static void Test_BFu15s_B_BFu9ll()
{
  {
    init_simple_test("BFu15s_B_BFu9ll");
    static BFu15s_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu15s_B_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu15s_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu9ll(Test_BFu15s_B_BFu9ll, "BFu15s_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_BFu9s  {
  unsigned short v1:15;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu15s_B_BFu9s) C1{ Fs:15 Fc Fs:9}



static void Test_BFu15s_B_BFu9s()
{
  {
    init_simple_test("BFu15s_B_BFu9s");
    static BFu15s_B_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_B_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_BFu9s");
    check_field_offset(lv, v2, 2, "BFu15s_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15s_B_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15s_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu15s_B_BFu9s(Test_BFu15s_B_BFu9s, "BFu15s_B_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_C  {
  unsigned short v1:15;
  bool v2;
  char v3;
};
//SIG(1 BFu15s_B_C) C1{ Fs:15 Fc[2]}



static void Test_BFu15s_B_C()
{
  {
    init_simple_test("BFu15s_B_C");
    static BFu15s_B_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_C");
    check_field_offset(lv, v2, 2, "BFu15s_B_C.v2");
    check_field_offset(lv, v3, 3, "BFu15s_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_C(Test_BFu15s_B_C, "BFu15s_B_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_D  {
  unsigned short v1:15;
  bool v2;
  double v3;
};
//SIG(1 BFu15s_B_D) C1{ Fs:15 Fc FL}



static void Test_BFu15s_B_D()
{
  {
    init_simple_test("BFu15s_B_D");
    static BFu15s_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15s_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_D");
    check_field_offset(lv, v2, 2, "BFu15s_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15s_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_D(Test_BFu15s_B_D, "BFu15s_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_F  {
  unsigned short v1:15;
  bool v2;
  float v3;
};
//SIG(1 BFu15s_B_F) C1{ Fs:15 Fc Fi}



static void Test_BFu15s_B_F()
{
  {
    init_simple_test("BFu15s_B_F");
    static BFu15s_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_F");
    check_field_offset(lv, v2, 2, "BFu15s_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu15s_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_F(Test_BFu15s_B_F, "BFu15s_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_I  {
  unsigned short v1:15;
  bool v2;
  int v3;
};
//SIG(1 BFu15s_B_I) C1{ Fs:15 Fc Fi}



static void Test_BFu15s_B_I()
{
  {
    init_simple_test("BFu15s_B_I");
    static BFu15s_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_I");
    check_field_offset(lv, v2, 2, "BFu15s_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu15s_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_I(Test_BFu15s_B_I, "BFu15s_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_Ip  {
  unsigned short v1:15;
  bool v2;
  int *v3;
};
//SIG(1 BFu15s_B_Ip) C1{ Fs:15 Fc Fp}



static void Test_BFu15s_B_Ip()
{
  {
    init_simple_test("BFu15s_B_Ip");
    static BFu15s_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15s_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_Ip");
    check_field_offset(lv, v2, 2, "BFu15s_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15s_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_Ip(Test_BFu15s_B_Ip, "BFu15s_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_L  {
  unsigned short v1:15;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu15s_B_L) C1{ Fs:15 Fc FL}



static void Test_BFu15s_B_L()
{
  {
    init_simple_test("BFu15s_B_L");
    static BFu15s_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15s_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_L");
    check_field_offset(lv, v2, 2, "BFu15s_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15s_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_L(Test_BFu15s_B_L, "BFu15s_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_S  {
  unsigned short v1:15;
  bool v2;
  short v3;
};
//SIG(1 BFu15s_B_S) C1{ Fs:15 Fc Fs}



static void Test_BFu15s_B_S()
{
  {
    init_simple_test("BFu15s_B_S");
    static BFu15s_B_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_B_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_S");
    check_field_offset(lv, v2, 2, "BFu15s_B_S.v2");
    check_field_offset(lv, v3, 4, "BFu15s_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_S(Test_BFu15s_B_S, "BFu15s_B_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_Uc  {
  unsigned short v1:15;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu15s_B_Uc) C1{ Fs:15 Fc[2]}



static void Test_BFu15s_B_Uc()
{
  {
    init_simple_test("BFu15s_B_Uc");
    static BFu15s_B_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_B_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_Uc");
    check_field_offset(lv, v2, 2, "BFu15s_B_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu15s_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_Uc(Test_BFu15s_B_Uc, "BFu15s_B_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_Ui  {
  unsigned short v1:15;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu15s_B_Ui) C1{ Fs:15 Fc Fi}



static void Test_BFu15s_B_Ui()
{
  {
    init_simple_test("BFu15s_B_Ui");
    static BFu15s_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_Ui");
    check_field_offset(lv, v2, 2, "BFu15s_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu15s_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_Ui(Test_BFu15s_B_Ui, "BFu15s_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_Ul  {
  unsigned short v1:15;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu15s_B_Ul) C1{ Fs:15 Fc FL}



static void Test_BFu15s_B_Ul()
{
  {
    init_simple_test("BFu15s_B_Ul");
    static BFu15s_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15s_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_Ul");
    check_field_offset(lv, v2, 2, "BFu15s_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15s_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_Ul(Test_BFu15s_B_Ul, "BFu15s_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_Us  {
  unsigned short v1:15;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu15s_B_Us) C1{ Fs:15 Fc Fs}



static void Test_BFu15s_B_Us()
{
  {
    init_simple_test("BFu15s_B_Us");
    static BFu15s_B_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_B_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_Us");
    check_field_offset(lv, v2, 2, "BFu15s_B_Us.v2");
    check_field_offset(lv, v3, 4, "BFu15s_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_Us(Test_BFu15s_B_Us, "BFu15s_B_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_B_Vp  {
  unsigned short v1:15;
  bool v2;
  void *v3;
};
//SIG(1 BFu15s_B_Vp) C1{ Fs:15 Fc Fp}



static void Test_BFu15s_B_Vp()
{
  {
    init_simple_test("BFu15s_B_Vp");
    static BFu15s_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15s_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_B_Vp");
    check_field_offset(lv, v2, 2, "BFu15s_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15s_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_B_Vp(Test_BFu15s_B_Vp, "BFu15s_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu15i_B  {
  unsigned short v1:15;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu15s_BFu15i_B) C1{ Fs:15 Fi:15 Fc}



static void Test_BFu15s_BFu15i_B()
{
  {
    init_simple_test("BFu15s_BFu15i_B");
    static BFu15s_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu15i_B");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15s_BFu15i_B");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15s_BFu15i_B");
    check_field_offset(lv, v3, 4, "BFu15s_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu15i_B(Test_BFu15s_BFu15i_B, "BFu15s_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu15ll_B  {
  unsigned short v1:15;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu15s_BFu15ll_B) C1{ Fs:15 FL:15 Fc}



static void Test_BFu15s_BFu15ll_B()
{
  {
    init_simple_test("BFu15s_BFu15ll_B");
    static BFu15s_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu15ll_B");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15s_BFu15ll_B");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15s_BFu15ll_B");
    check_field_offset(lv, v3, 4, "BFu15s_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu15ll_B(Test_BFu15s_BFu15ll_B, "BFu15s_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu15s_B  {
  unsigned short v1:15;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu15s_BFu15s_B) C1{ Fs:15 Fs:15 Fc}



static void Test_BFu15s_BFu15s_B()
{
  {
    init_simple_test("BFu15s_BFu15s_B");
    static BFu15s_BFu15s_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_BFu15s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15s_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu15s_B");
    check_field_offset(lv, v3, 4, "BFu15s_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu15s_B(Test_BFu15s_BFu15s_B, "BFu15s_BFu15s_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu16i_B  {
  unsigned short v1:15;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu15s_BFu16i_B) C1{ Fs:15 Fi:16 Fc}



static void Test_BFu15s_BFu16i_B()
{
  {
    init_simple_test("BFu15s_BFu16i_B");
    static BFu15s_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu16i_B");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15s_BFu16i_B");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15s_BFu16i_B");
    check_field_offset(lv, v3, 4, "BFu15s_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu16i_B(Test_BFu15s_BFu16i_B, "BFu15s_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu16ll_B  {
  unsigned short v1:15;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu15s_BFu16ll_B) C1{ Fs:15 FL:16 Fc}



static void Test_BFu15s_BFu16ll_B()
{
  {
    init_simple_test("BFu15s_BFu16ll_B");
    static BFu15s_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu16ll_B");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15s_BFu16ll_B");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15s_BFu16ll_B");
    check_field_offset(lv, v3, 4, "BFu15s_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu16ll_B(Test_BFu15s_BFu16ll_B, "BFu15s_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu16s_B  {
  unsigned short v1:15;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu15s_BFu16s_B) C1{ Fs:15 Fs:16 Fc}



static void Test_BFu15s_BFu16s_B()
{
  {
    init_simple_test("BFu15s_BFu16s_B");
    static BFu15s_BFu16s_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_BFu16s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15s_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15s_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu15s_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu16s_B(Test_BFu15s_BFu16s_B, "BFu15s_BFu16s_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu17i_B  {
  unsigned short v1:15;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu15s_BFu17i_B) C1{ Fs:15 Fi:17 Fc}



static void Test_BFu15s_BFu17i_B()
{
  {
    init_simple_test("BFu15s_BFu17i_B");
    static BFu15s_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu17i_B");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15s_BFu17i_B");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15s_BFu17i_B");
    check_field_offset(lv, v3, 4, "BFu15s_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu17i_B(Test_BFu15s_BFu17i_B, "BFu15s_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu17ll_B  {
  unsigned short v1:15;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu15s_BFu17ll_B) C1{ Fs:15 FL:17 Fc}



static void Test_BFu15s_BFu17ll_B()
{
  {
    init_simple_test("BFu15s_BFu17ll_B");
    static BFu15s_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu17ll_B");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15s_BFu17ll_B");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15s_BFu17ll_B");
    check_field_offset(lv, v3, 4, "BFu15s_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu17ll_B(Test_BFu15s_BFu17ll_B, "BFu15s_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu1c_B  {
  unsigned short v1:15;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu15s_BFu1c_B) C1{ Fs:15 Fc:1 Fc}



static void Test_BFu15s_BFu1c_B()
{
  {
    init_simple_test("BFu15s_BFu1c_B");
    static BFu15s_BFu1c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu1c_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu1c_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15s_BFu1c_B");
    check_field_offset(lv, v3, 2, "BFu15s_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu1c_B(Test_BFu15s_BFu1c_B, "BFu15s_BFu1c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu1i_B  {
  unsigned short v1:15;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu15s_BFu1i_B) C1{ Fs:15 Fi:1 Fc}



static void Test_BFu15s_BFu1i_B()
{
  {
    init_simple_test("BFu15s_BFu1i_B");
    static BFu15s_BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu1i_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15s_BFu1i_B");
    check_field_offset(lv, v3, 2, "BFu15s_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu1i_B(Test_BFu15s_BFu1i_B, "BFu15s_BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu1ll_B  {
  unsigned short v1:15;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu15s_BFu1ll_B) C1{ Fs:15 FL:1 Fc}



static void Test_BFu15s_BFu1ll_B()
{
  {
    init_simple_test("BFu15s_BFu1ll_B");
    static BFu15s_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15s_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu1ll_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15s_BFu1ll_B");
    check_field_offset(lv, v3, 2, "BFu15s_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu1ll_B(Test_BFu15s_BFu1ll_B, "BFu15s_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu1s_B  {
  unsigned short v1:15;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu15s_BFu1s_B) C1{ Fs:15 Fs:1 Fc}



static void Test_BFu15s_BFu1s_B()
{
  {
    init_simple_test("BFu15s_BFu1s_B");
    static BFu15s_BFu1s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu1s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu1s_B");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15s_BFu1s_B");
    check_field_offset(lv, v3, 2, "BFu15s_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu1s_B(Test_BFu15s_BFu1s_B, "BFu15s_BFu1s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu31i_B  {
  unsigned short v1:15;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu15s_BFu31i_B) C1{ Fs:15 Fi:31 Fc}



static void Test_BFu15s_BFu31i_B()
{
  {
    init_simple_test("BFu15s_BFu31i_B");
    static BFu15s_BFu31i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15s_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15s_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15s_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu15s_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu31i_B(Test_BFu15s_BFu31i_B, "BFu15s_BFu31i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu31ll_B  {
  unsigned short v1:15;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu15s_BFu31ll_B) C1{ Fs:15 FL:31 Fc}



static void Test_BFu15s_BFu31ll_B()
{
  {
    init_simple_test("BFu15s_BFu31ll_B");
    static BFu15s_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu31ll_B");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15s_BFu31ll_B");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15s_BFu31ll_B");
    check_field_offset(lv, v3, 6, "BFu15s_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu31ll_B(Test_BFu15s_BFu31ll_B, "BFu15s_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu32i_B  {
  unsigned short v1:15;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu15s_BFu32i_B) C1{ Fs:15 Fi:32 Fc}



static void Test_BFu15s_BFu32i_B()
{
  {
    init_simple_test("BFu15s_BFu32i_B");
    static BFu15s_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15s_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15s_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15s_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu15s_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu32i_B(Test_BFu15s_BFu32i_B, "BFu15s_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu32ll_B  {
  unsigned short v1:15;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu15s_BFu32ll_B) C1{ Fs:15 FL:32 Fc}



static void Test_BFu15s_BFu32ll_B()
{
  {
    init_simple_test("BFu15s_BFu32ll_B");
    static BFu15s_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu32ll_B");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15s_BFu32ll_B");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15s_BFu32ll_B");
    check_field_offset(lv, v3, 6, "BFu15s_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu32ll_B(Test_BFu15s_BFu32ll_B, "BFu15s_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu33_B  {
  unsigned short v1:15;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu15s_BFu33_B) C1{ Fs:15 FL:33 Fc}



static void Test_BFu15s_BFu33_B()
{
  {
    init_simple_test("BFu15s_BFu33_B");
    static BFu15s_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu15s_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu33_B");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15s_BFu33_B");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15s_BFu33_B");
    check_field_offset(lv, v3, 6, "BFu15s_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu33_B(Test_BFu15s_BFu33_B, "BFu15s_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu7c_B  {
  unsigned short v1:15;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu15s_BFu7c_B) C1{ Fs:15 Fc:7 Fc}



static void Test_BFu15s_BFu7c_B()
{
  {
    init_simple_test("BFu15s_BFu7c_B");
    static BFu15s_BFu7c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu7c_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15s_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15s_BFu7c_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu7c_B(Test_BFu15s_BFu7c_B, "BFu15s_BFu7c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu7i_B  {
  unsigned short v1:15;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu15s_BFu7i_B) C1{ Fs:15 Fi:7 Fc}



static void Test_BFu15s_BFu7i_B()
{
  {
    init_simple_test("BFu15s_BFu7i_B");
    static BFu15s_BFu7i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu7i_B");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15s_BFu7i_B");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15s_BFu7i_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu7i_B(Test_BFu15s_BFu7i_B, "BFu15s_BFu7i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu7ll_B  {
  unsigned short v1:15;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu15s_BFu7ll_B) C1{ Fs:15 FL:7 Fc}



static void Test_BFu15s_BFu7ll_B()
{
  {
    init_simple_test("BFu15s_BFu7ll_B");
    static BFu15s_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15s_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu7ll_B");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15s_BFu7ll_B");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15s_BFu7ll_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu7ll_B(Test_BFu15s_BFu7ll_B, "BFu15s_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu7s_B  {
  unsigned short v1:15;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu15s_BFu7s_B) C1{ Fs:15 Fs:7 Fc}



static void Test_BFu15s_BFu7s_B()
{
  {
    init_simple_test("BFu15s_BFu7s_B");
    static BFu15s_BFu7s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu7s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15s_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15s_BFu7s_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu7s_B(Test_BFu15s_BFu7s_B, "BFu15s_BFu7s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu8c_B  {
  unsigned short v1:15;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu15s_BFu8c_B) C1{ Fs:15 Fc:8 Fc}



static void Test_BFu15s_BFu8c_B()
{
  {
    init_simple_test("BFu15s_BFu8c_B");
    static BFu15s_BFu8c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu8c_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15s_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15s_BFu8c_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu8c_B(Test_BFu15s_BFu8c_B, "BFu15s_BFu8c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu8i_B  {
  unsigned short v1:15;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu15s_BFu8i_B) C1{ Fs:15 Fi:8 Fc}



static void Test_BFu15s_BFu8i_B()
{
  {
    init_simple_test("BFu15s_BFu8i_B");
    static BFu15s_BFu8i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu8i_B");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15s_BFu8i_B");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15s_BFu8i_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu8i_B(Test_BFu15s_BFu8i_B, "BFu15s_BFu8i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu8ll_B  {
  unsigned short v1:15;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu15s_BFu8ll_B) C1{ Fs:15 FL:8 Fc}



static void Test_BFu15s_BFu8ll_B()
{
  {
    init_simple_test("BFu15s_BFu8ll_B");
    static BFu15s_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15s_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu8ll_B");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15s_BFu8ll_B");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15s_BFu8ll_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu8ll_B(Test_BFu15s_BFu8ll_B, "BFu15s_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu8s_B  {
  unsigned short v1:15;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu15s_BFu8s_B) C1{ Fs:15 Fs:8 Fc}



static void Test_BFu15s_BFu8s_B()
{
  {
    init_simple_test("BFu15s_BFu8s_B");
    static BFu15s_BFu8s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu8s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15s_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15s_BFu8s_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu8s_B(Test_BFu15s_BFu8s_B, "BFu15s_BFu8s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu9i_B  {
  unsigned short v1:15;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu15s_BFu9i_B) C1{ Fs:15 Fi:9 Fc}



static void Test_BFu15s_BFu9i_B()
{
  {
    init_simple_test("BFu15s_BFu9i_B");
    static BFu15s_BFu9i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu9i_B");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15s_BFu9i_B");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15s_BFu9i_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu9i_B(Test_BFu15s_BFu9i_B, "BFu15s_BFu9i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu9ll_B  {
  unsigned short v1:15;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu15s_BFu9ll_B) C1{ Fs:15 FL:9 Fc}



static void Test_BFu15s_BFu9ll_B()
{
  {
    init_simple_test("BFu15s_BFu9ll_B");
    static BFu15s_BFu9ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15s_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu9ll_B");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15s_BFu9ll_B");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15s_BFu9ll_B");
    check_field_offset(lv, v3, 3, "BFu15s_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu9ll_B(Test_BFu15s_BFu9ll_B, "BFu15s_BFu9ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_BFu9s_B  {
  unsigned short v1:15;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu15s_BFu9s_B) C1{ Fs:15 Fs:9 Fc}



static void Test_BFu15s_BFu9s_B()
{
  {
    init_simple_test("BFu15s_BFu9s_B");
    static BFu15s_BFu9s_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_BFu9s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15s_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15s_BFu9s_B");
    check_field_offset(lv, v3, 4, "BFu15s_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_BFu9s_B(Test_BFu15s_BFu9s_B, "BFu15s_BFu9s_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_C_B  {
  unsigned short v1:15;
  char v2;
  bool v3;
};
//SIG(1 BFu15s_C_B) C1{ Fs:15 Fc[2]}



static void Test_BFu15s_C_B()
{
  {
    init_simple_test("BFu15s_C_B");
    static BFu15s_C_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_C_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_C_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_C_B");
    check_field_offset(lv, v2, 2, "BFu15s_C_B.v2");
    check_field_offset(lv, v3, 3, "BFu15s_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_C_B(Test_BFu15s_C_B, "BFu15s_C_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_D_B  {
  unsigned short v1:15;
  double v2;
  bool v3;
};
//SIG(1 BFu15s_D_B) C1{ Fs:15 FL Fc}



static void Test_BFu15s_D_B()
{
  {
    init_simple_test("BFu15s_D_B");
    static BFu15s_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15s_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_D_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15s_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15s_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_D_B(Test_BFu15s_D_B, "BFu15s_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_F_B  {
  unsigned short v1:15;
  float v2;
  bool v3;
};
//SIG(1 BFu15s_F_B) C1{ Fs:15 Fi Fc}



static void Test_BFu15s_F_B()
{
  {
    init_simple_test("BFu15s_F_B");
    static BFu15s_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15s_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_F_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_F_B");
    check_field_offset(lv, v2, 4, "BFu15s_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu15s_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_F_B(Test_BFu15s_F_B, "BFu15s_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_I_B  {
  unsigned short v1:15;
  int v2;
  bool v3;
};
//SIG(1 BFu15s_I_B) C1{ Fs:15 Fi Fc}



static void Test_BFu15s_I_B()
{
  {
    init_simple_test("BFu15s_I_B");
    static BFu15s_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15s_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_I_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_I_B");
    check_field_offset(lv, v2, 4, "BFu15s_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu15s_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_I_B(Test_BFu15s_I_B, "BFu15s_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_Ip_B  {
  unsigned short v1:15;
  int *v2;
  bool v3;
};
//SIG(1 BFu15s_Ip_B) C1{ Fs:15 Fp Fc}



static void Test_BFu15s_Ip_B()
{
  {
    init_simple_test("BFu15s_Ip_B");
    static BFu15s_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15s_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15s_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15s_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_Ip_B(Test_BFu15s_Ip_B, "BFu15s_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_L_B  {
  unsigned short v1:15;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu15s_L_B) C1{ Fs:15 FL Fc}



static void Test_BFu15s_L_B()
{
  {
    init_simple_test("BFu15s_L_B");
    static BFu15s_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15s_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_L_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15s_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15s_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_L_B(Test_BFu15s_L_B, "BFu15s_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_S_B  {
  unsigned short v1:15;
  short v2;
  bool v3;
};
//SIG(1 BFu15s_S_B) C1{ Fs:15 Fs Fc}



static void Test_BFu15s_S_B()
{
  {
    init_simple_test("BFu15s_S_B");
    static BFu15s_S_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_S_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_S_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_S_B");
    check_field_offset(lv, v2, 2, "BFu15s_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu15s_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_S_B(Test_BFu15s_S_B, "BFu15s_S_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_Uc_B  {
  unsigned short v1:15;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu15s_Uc_B) C1{ Fs:15 Fc[2]}



static void Test_BFu15s_Uc_B()
{
  {
    init_simple_test("BFu15s_Uc_B");
    static BFu15s_Uc_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu15s_Uc_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_Uc_B");
    check_field_offset(lv, v2, 2, "BFu15s_Uc_B.v2");
    check_field_offset(lv, v3, 3, "BFu15s_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_Uc_B(Test_BFu15s_Uc_B, "BFu15s_Uc_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_Ui_B  {
  unsigned short v1:15;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu15s_Ui_B) C1{ Fs:15 Fi Fc}



static void Test_BFu15s_Ui_B()
{
  {
    init_simple_test("BFu15s_Ui_B");
    static BFu15s_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu15s_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15s_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_Ui_B");
    check_field_offset(lv, v2, 4, "BFu15s_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu15s_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_Ui_B(Test_BFu15s_Ui_B, "BFu15s_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_Ul_B  {
  unsigned short v1:15;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu15s_Ul_B) C1{ Fs:15 FL Fc}



static void Test_BFu15s_Ul_B()
{
  {
    init_simple_test("BFu15s_Ul_B");
    static BFu15s_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15s_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15s_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15s_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_Ul_B(Test_BFu15s_Ul_B, "BFu15s_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_Us_B  {
  unsigned short v1:15;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu15s_Us_B) C1{ Fs:15 Fs Fc}



static void Test_BFu15s_Us_B()
{
  {
    init_simple_test("BFu15s_Us_B");
    static BFu15s_Us_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu15s_Us_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu15s_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_Us_B");
    check_field_offset(lv, v2, 2, "BFu15s_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu15s_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_Us_B(Test_BFu15s_Us_B, "BFu15s_Us_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu15s_Vp_B  {
  unsigned short v1:15;
  void *v2;
  bool v3;
};
//SIG(1 BFu15s_Vp_B) C1{ Fs:15 Fp Fc}



static void Test_BFu15s_Vp_B()
{
  {
    init_simple_test("BFu15s_Vp_B");
    static BFu15s_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15s_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15s_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15s_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15s_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15s_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15s_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu15s_Vp_B(Test_BFu15s_Vp_B, "BFu15s_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B  {
  unsigned int v1:16;
  bool v2;
};
//SIG(1 BFu16i_B) C1{ Fi:16 Fc}



static void Test_BFu16i_B()
{
  {
    init_simple_test("BFu16i_B");
    static BFu16i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B");
    check_field_offset(lv, v2, 2, "BFu16i_B.v2");
  }
}
static Arrange_To_Call_Me vBFu16i_B(Test_BFu16i_B, "BFu16i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_B  {
  unsigned int v1:16;
  bool v2;
  bool v3;
};
//SIG(1 BFu16i_B_B) C1{ Fi:16 Fc[2]}



static void Test_BFu16i_B_B()
{
  {
    init_simple_test("BFu16i_B_B");
    static BFu16i_B_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_B");
    check_field_offset(lv, v2, 2, "BFu16i_B_B.v2");
    check_field_offset(lv, v3, 3, "BFu16i_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_B(Test_BFu16i_B_B, "BFu16i_B_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu15i  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu16i_B_BFu15i) C1{ Fi:16 Fc Fi:15}



static void Test_BFu16i_B_BFu15i()
{
  {
    init_simple_test("BFu16i_B_BFu15i");
    static BFu16i_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16i_B_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16i_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu15i(Test_BFu16i_B_BFu15i, "BFu16i_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu15ll  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16i_B_BFu15ll) C1{ Fi:16 Fc FL:15}



static void Test_BFu16i_B_BFu15ll()
{
  {
    init_simple_test("BFu16i_B_BFu15ll");
    static BFu16i_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16i_B_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16i_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu15ll(Test_BFu16i_B_BFu15ll, "BFu16i_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu15s  {
  unsigned int v1:16;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu16i_B_BFu15s) C1{ Fi:16 Fc Fs:15}



static void Test_BFu16i_B_BFu15s()
{
  {
    init_simple_test("BFu16i_B_BFu15s");
    static BFu16i_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16i_B_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16i_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu15s(Test_BFu16i_B_BFu15s, "BFu16i_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu16i  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu16i_B_BFu16i) C1{ Fi:16 Fc Fi:16}



static void Test_BFu16i_B_BFu16i()
{
  {
    init_simple_test("BFu16i_B_BFu16i");
    static BFu16i_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16i_B_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu16i(Test_BFu16i_B_BFu16i, "BFu16i_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu16ll  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16i_B_BFu16ll) C1{ Fi:16 Fc FL:16}



static void Test_BFu16i_B_BFu16ll()
{
  {
    init_simple_test("BFu16i_B_BFu16ll");
    static BFu16i_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16i_B_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu16ll(Test_BFu16i_B_BFu16ll, "BFu16i_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu16s  {
  unsigned int v1:16;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu16i_B_BFu16s) C1{ Fi:16 Fc Fs:16}



static void Test_BFu16i_B_BFu16s()
{
  {
    init_simple_test("BFu16i_B_BFu16s");
    static BFu16i_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16i_B_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu16s(Test_BFu16i_B_BFu16s, "BFu16i_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu17i  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu16i_B_BFu17i) C1{ Fi:16 Fc Fi:17}



static void Test_BFu16i_B_BFu17i()
{
  {
    init_simple_test("BFu16i_B_BFu17i");
    static BFu16i_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16i_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16i_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu17i(Test_BFu16i_B_BFu17i, "BFu16i_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu17ll  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16i_B_BFu17ll) C1{ Fi:16 Fc FL:17}



static void Test_BFu16i_B_BFu17ll()
{
  {
    init_simple_test("BFu16i_B_BFu17ll");
    static BFu16i_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16i_B_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16i_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu17ll(Test_BFu16i_B_BFu17ll, "BFu16i_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu1c  {
  unsigned int v1:16;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu16i_B_BFu1c) C1{ Fi:16 Fc Fc:1}



static void Test_BFu16i_B_BFu1c()
{
  {
    init_simple_test("BFu16i_B_BFu1c");
    static BFu16i_B_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16i_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu1c(Test_BFu16i_B_BFu1c, "BFu16i_B_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu1i  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu16i_B_BFu1i) C1{ Fi:16 Fc Fi:1}



static void Test_BFu16i_B_BFu1i()
{
  {
    init_simple_test("BFu16i_B_BFu1i");
    static BFu16i_B_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16i_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu1i(Test_BFu16i_B_BFu1i, "BFu16i_B_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu1ll  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16i_B_BFu1ll) C1{ Fi:16 Fc FL:1}



static void Test_BFu16i_B_BFu1ll()
{
  {
    init_simple_test("BFu16i_B_BFu1ll");
    static BFu16i_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16i_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16i_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu1ll(Test_BFu16i_B_BFu1ll, "BFu16i_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu1s  {
  unsigned int v1:16;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu16i_B_BFu1s) C1{ Fi:16 Fc Fs:1}



static void Test_BFu16i_B_BFu1s()
{
  {
    init_simple_test("BFu16i_B_BFu1s");
    static BFu16i_B_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16i_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu1s(Test_BFu16i_B_BFu1s, "BFu16i_B_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu31i  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu16i_B_BFu31i) C1{ Fi:16 Fc Fi:31}



static void Test_BFu16i_B_BFu31i()
{
  {
    init_simple_test("BFu16i_B_BFu31i");
    static BFu16i_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16i_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16i_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu31i(Test_BFu16i_B_BFu31i, "BFu16i_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu31ll  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16i_B_BFu31ll) C1{ Fi:16 Fc FL:31}



static void Test_BFu16i_B_BFu31ll()
{
  {
    init_simple_test("BFu16i_B_BFu31ll");
    static BFu16i_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16i_B_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16i_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu31ll(Test_BFu16i_B_BFu31ll, "BFu16i_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu32i  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu16i_B_BFu32i) C1{ Fi:16 Fc Fi:32}



static void Test_BFu16i_B_BFu32i()
{
  {
    init_simple_test("BFu16i_B_BFu32i");
    static BFu16i_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16i_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16i_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu32i(Test_BFu16i_B_BFu32i, "BFu16i_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu32ll  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16i_B_BFu32ll) C1{ Fi:16 Fc FL:32}



static void Test_BFu16i_B_BFu32ll()
{
  {
    init_simple_test("BFu16i_B_BFu32ll");
    static BFu16i_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16i_B_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16i_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu32ll(Test_BFu16i_B_BFu32ll, "BFu16i_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu33  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16i_B_BFu33) C1{ Fi:16 Fc FL:33}



static void Test_BFu16i_B_BFu33()
{
  {
    init_simple_test("BFu16i_B_BFu33");
    static BFu16i_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu33");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16i_B_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16i_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu33(Test_BFu16i_B_BFu33, "BFu16i_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu7c  {
  unsigned int v1:16;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu16i_B_BFu7c) C1{ Fi:16 Fc Fc:7}



static void Test_BFu16i_B_BFu7c()
{
  {
    init_simple_test("BFu16i_B_BFu7c");
    static BFu16i_B_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16i_B_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16i_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu7c(Test_BFu16i_B_BFu7c, "BFu16i_B_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu7i  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu16i_B_BFu7i) C1{ Fi:16 Fc Fi:7}



static void Test_BFu16i_B_BFu7i()
{
  {
    init_simple_test("BFu16i_B_BFu7i");
    static BFu16i_B_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16i_B_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16i_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu7i(Test_BFu16i_B_BFu7i, "BFu16i_B_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu7ll  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16i_B_BFu7ll) C1{ Fi:16 Fc FL:7}



static void Test_BFu16i_B_BFu7ll()
{
  {
    init_simple_test("BFu16i_B_BFu7ll");
    static BFu16i_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16i_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16i_B_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16i_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu7ll(Test_BFu16i_B_BFu7ll, "BFu16i_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu7s  {
  unsigned int v1:16;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu16i_B_BFu7s) C1{ Fi:16 Fc Fs:7}



static void Test_BFu16i_B_BFu7s()
{
  {
    init_simple_test("BFu16i_B_BFu7s");
    static BFu16i_B_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16i_B_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16i_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu7s(Test_BFu16i_B_BFu7s, "BFu16i_B_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu8c  {
  unsigned int v1:16;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu16i_B_BFu8c) C1{ Fi:16 Fc Fc:8}



static void Test_BFu16i_B_BFu8c()
{
  {
    init_simple_test("BFu16i_B_BFu8c");
    static BFu16i_B_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16i_B_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16i_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu8c(Test_BFu16i_B_BFu8c, "BFu16i_B_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu8i  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu16i_B_BFu8i) C1{ Fi:16 Fc Fi:8}



static void Test_BFu16i_B_BFu8i()
{
  {
    init_simple_test("BFu16i_B_BFu8i");
    static BFu16i_B_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16i_B_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16i_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu8i(Test_BFu16i_B_BFu8i, "BFu16i_B_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu8ll  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16i_B_BFu8ll) C1{ Fi:16 Fc FL:8}



static void Test_BFu16i_B_BFu8ll()
{
  {
    init_simple_test("BFu16i_B_BFu8ll");
    static BFu16i_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16i_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16i_B_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16i_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu8ll(Test_BFu16i_B_BFu8ll, "BFu16i_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu8s  {
  unsigned int v1:16;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu16i_B_BFu8s) C1{ Fi:16 Fc Fs:8}



static void Test_BFu16i_B_BFu8s()
{
  {
    init_simple_test("BFu16i_B_BFu8s");
    static BFu16i_B_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16i_B_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16i_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu8s(Test_BFu16i_B_BFu8s, "BFu16i_B_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu9i  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu16i_B_BFu9i) C1{ Fi:16 Fc Fi:9}



static void Test_BFu16i_B_BFu9i()
{
  {
    init_simple_test("BFu16i_B_BFu9i");
    static BFu16i_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16i_B_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16i_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu9i(Test_BFu16i_B_BFu9i, "BFu16i_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu9ll  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16i_B_BFu9ll) C1{ Fi:16 Fc FL:9}



static void Test_BFu16i_B_BFu9ll()
{
  {
    init_simple_test("BFu16i_B_BFu9ll");
    static BFu16i_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16i_B_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16i_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu9ll(Test_BFu16i_B_BFu9ll, "BFu16i_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_BFu9s  {
  unsigned int v1:16;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu16i_B_BFu9s) C1{ Fi:16 Fc Fs:9}



static void Test_BFu16i_B_BFu9s()
{
  {
    init_simple_test("BFu16i_B_BFu9s");
    static BFu16i_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16i_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16i_B_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16i_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu16i_B_BFu9s(Test_BFu16i_B_BFu9s, "BFu16i_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_C  {
  unsigned int v1:16;
  bool v2;
  char v3;
};
//SIG(1 BFu16i_B_C) C1{ Fi:16 Fc[2]}



static void Test_BFu16i_B_C()
{
  {
    init_simple_test("BFu16i_B_C");
    static BFu16i_B_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_C");
    check_field_offset(lv, v2, 2, "BFu16i_B_C.v2");
    check_field_offset(lv, v3, 3, "BFu16i_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_C(Test_BFu16i_B_C, "BFu16i_B_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_D  {
  unsigned int v1:16;
  bool v2;
  double v3;
};
//SIG(1 BFu16i_B_D) C1{ Fi:16 Fc FL}



static void Test_BFu16i_B_D()
{
  {
    init_simple_test("BFu16i_B_D");
    static BFu16i_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16i_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_D");
    check_field_offset(lv, v2, 2, "BFu16i_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16i_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_D(Test_BFu16i_B_D, "BFu16i_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_F  {
  unsigned int v1:16;
  bool v2;
  float v3;
};
//SIG(1 BFu16i_B_F) C1{ Fi:16 Fc Fi}



static void Test_BFu16i_B_F()
{
  {
    init_simple_test("BFu16i_B_F");
    static BFu16i_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_F");
    check_field_offset(lv, v2, 2, "BFu16i_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu16i_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_F(Test_BFu16i_B_F, "BFu16i_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_I  {
  unsigned int v1:16;
  bool v2;
  int v3;
};
//SIG(1 BFu16i_B_I) C1{ Fi:16 Fc Fi}



static void Test_BFu16i_B_I()
{
  {
    init_simple_test("BFu16i_B_I");
    static BFu16i_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_I");
    check_field_offset(lv, v2, 2, "BFu16i_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu16i_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_I(Test_BFu16i_B_I, "BFu16i_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_Ip  {
  unsigned int v1:16;
  bool v2;
  int *v3;
};
//SIG(1 BFu16i_B_Ip) C1{ Fi:16 Fc Fp}



static void Test_BFu16i_B_Ip()
{
  {
    init_simple_test("BFu16i_B_Ip");
    static BFu16i_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16i_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_Ip");
    check_field_offset(lv, v2, 2, "BFu16i_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16i_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_Ip(Test_BFu16i_B_Ip, "BFu16i_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_L  {
  unsigned int v1:16;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu16i_B_L) C1{ Fi:16 Fc FL}



static void Test_BFu16i_B_L()
{
  {
    init_simple_test("BFu16i_B_L");
    static BFu16i_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16i_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_L");
    check_field_offset(lv, v2, 2, "BFu16i_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16i_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_L(Test_BFu16i_B_L, "BFu16i_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_S  {
  unsigned int v1:16;
  bool v2;
  short v3;
};
//SIG(1 BFu16i_B_S) C1{ Fi:16 Fc Fs}



static void Test_BFu16i_B_S()
{
  {
    init_simple_test("BFu16i_B_S");
    static BFu16i_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_S");
    check_field_offset(lv, v2, 2, "BFu16i_B_S.v2");
    check_field_offset(lv, v3, 4, "BFu16i_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_S(Test_BFu16i_B_S, "BFu16i_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_Uc  {
  unsigned int v1:16;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu16i_B_Uc) C1{ Fi:16 Fc[2]}



static void Test_BFu16i_B_Uc()
{
  {
    init_simple_test("BFu16i_B_Uc");
    static BFu16i_B_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_B_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_Uc");
    check_field_offset(lv, v2, 2, "BFu16i_B_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu16i_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_Uc(Test_BFu16i_B_Uc, "BFu16i_B_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_Ui  {
  unsigned int v1:16;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu16i_B_Ui) C1{ Fi:16 Fc Fi}



static void Test_BFu16i_B_Ui()
{
  {
    init_simple_test("BFu16i_B_Ui");
    static BFu16i_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_Ui");
    check_field_offset(lv, v2, 2, "BFu16i_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16i_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_Ui(Test_BFu16i_B_Ui, "BFu16i_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_Ul  {
  unsigned int v1:16;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu16i_B_Ul) C1{ Fi:16 Fc FL}



static void Test_BFu16i_B_Ul()
{
  {
    init_simple_test("BFu16i_B_Ul");
    static BFu16i_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16i_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_Ul");
    check_field_offset(lv, v2, 2, "BFu16i_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16i_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_Ul(Test_BFu16i_B_Ul, "BFu16i_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_Us  {
  unsigned int v1:16;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu16i_B_Us) C1{ Fi:16 Fc Fs}



static void Test_BFu16i_B_Us()
{
  {
    init_simple_test("BFu16i_B_Us");
    static BFu16i_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_B_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_Us");
    check_field_offset(lv, v2, 2, "BFu16i_B_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16i_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_Us(Test_BFu16i_B_Us, "BFu16i_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_B_Vp  {
  unsigned int v1:16;
  bool v2;
  void *v3;
};
//SIG(1 BFu16i_B_Vp) C1{ Fi:16 Fc Fp}



static void Test_BFu16i_B_Vp()
{
  {
    init_simple_test("BFu16i_B_Vp");
    static BFu16i_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16i_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_B_Vp");
    check_field_offset(lv, v2, 2, "BFu16i_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16i_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_B_Vp(Test_BFu16i_B_Vp, "BFu16i_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu15i_B  {
  unsigned int v1:16;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu16i_BFu15i_B) C1{ Fi:16 Fi:15 Fc}



static void Test_BFu16i_BFu15i_B()
{
  {
    init_simple_test("BFu16i_BFu15i_B");
    static BFu16i_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16i_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16i_BFu15i_B");
    check_field_offset(lv, v3, 4, "BFu16i_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu15i_B(Test_BFu16i_BFu15i_B, "BFu16i_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu15ll_B  {
  unsigned int v1:16;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu16i_BFu15ll_B) C1{ Fi:16 FL:15 Fc}



static void Test_BFu16i_BFu15ll_B()
{
  {
    init_simple_test("BFu16i_BFu15ll_B");
    static BFu16i_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16i_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16i_BFu15ll_B");
    check_field_offset(lv, v3, 4, "BFu16i_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu15ll_B(Test_BFu16i_BFu15ll_B, "BFu16i_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu15s_B  {
  unsigned int v1:16;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu16i_BFu15s_B) C1{ Fi:16 Fs:15 Fc}



static void Test_BFu16i_BFu15s_B()
{
  {
    init_simple_test("BFu16i_BFu15s_B");
    static BFu16i_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu15s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16i_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16i_BFu15s_B");
    check_field_offset(lv, v3, 4, "BFu16i_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu15s_B(Test_BFu16i_BFu15s_B, "BFu16i_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu16i_B  {
  unsigned int v1:16;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu16i_BFu16i_B) C1{ Fi:16 Fi:16 Fc}



static void Test_BFu16i_BFu16i_B()
{
  {
    init_simple_test("BFu16i_BFu16i_B");
    static BFu16i_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu16i_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16i_BFu16i_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu16i_B");
    check_field_offset(lv, v3, 4, "BFu16i_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu16i_B(Test_BFu16i_BFu16i_B, "BFu16i_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu16ll_B  {
  unsigned int v1:16;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu16i_BFu16ll_B) C1{ Fi:16 FL:16 Fc}



static void Test_BFu16i_BFu16ll_B()
{
  {
    init_simple_test("BFu16i_BFu16ll_B");
    static BFu16i_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16i_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu16ll_B");
    check_field_offset(lv, v3, 4, "BFu16i_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu16ll_B(Test_BFu16i_BFu16ll_B, "BFu16i_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu16s_B  {
  unsigned int v1:16;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu16i_BFu16s_B) C1{ Fi:16 Fs:16 Fc}



static void Test_BFu16i_BFu16s_B()
{
  {
    init_simple_test("BFu16i_BFu16s_B");
    static BFu16i_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu16s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16i_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu16i_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu16s_B(Test_BFu16i_BFu16s_B, "BFu16i_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu17i_B  {
  unsigned int v1:16;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu16i_BFu17i_B) C1{ Fi:16 Fi:17 Fc}



static void Test_BFu16i_BFu17i_B()
{
  {
    init_simple_test("BFu16i_BFu17i_B");
    static BFu16i_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16i_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16i_BFu17i_B");
    check_field_offset(lv, v3, 7, "BFu16i_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu17i_B(Test_BFu16i_BFu17i_B, "BFu16i_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu17ll_B  {
  unsigned int v1:16;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu16i_BFu17ll_B) C1{ Fi:16 FL:17 Fc}



static void Test_BFu16i_BFu17ll_B()
{
  {
    init_simple_test("BFu16i_BFu17ll_B");
    static BFu16i_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16i_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16i_BFu17ll_B");
    check_field_offset(lv, v3, 5, "BFu16i_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu17ll_B(Test_BFu16i_BFu17ll_B, "BFu16i_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu1c_B  {
  unsigned int v1:16;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu16i_BFu1c_B) C1{ Fi:16 Fc:1 Fc}



static void Test_BFu16i_BFu1c_B()
{
  {
    init_simple_test("BFu16i_BFu1c_B");
    static BFu16i_BFu1c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_BFu1c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu1c_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16i_BFu1c_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu1c_B(Test_BFu16i_BFu1c_B, "BFu16i_BFu1c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu1i_B  {
  unsigned int v1:16;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu16i_BFu1i_B) C1{ Fi:16 Fi:1 Fc}



static void Test_BFu16i_BFu1i_B()
{
  {
    init_simple_test("BFu16i_BFu1i_B");
    static BFu16i_BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu1i_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16i_BFu1i_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu1i_B(Test_BFu16i_BFu1i_B, "BFu16i_BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu1ll_B  {
  unsigned int v1:16;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu16i_BFu1ll_B) C1{ Fi:16 FL:1 Fc}



static void Test_BFu16i_BFu1ll_B()
{
  {
    init_simple_test("BFu16i_BFu1ll_B");
    static BFu16i_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16i_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu1ll_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16i_BFu1ll_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu1ll_B(Test_BFu16i_BFu1ll_B, "BFu16i_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu1s_B  {
  unsigned int v1:16;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu16i_BFu1s_B) C1{ Fi:16 Fs:1 Fc}



static void Test_BFu16i_BFu1s_B()
{
  {
    init_simple_test("BFu16i_BFu1s_B");
    static BFu16i_BFu1s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_BFu1s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu1s_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16i_BFu1s_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu1s_B(Test_BFu16i_BFu1s_B, "BFu16i_BFu1s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu31i_B  {
  unsigned int v1:16;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu16i_BFu31i_B) C1{ Fi:16 Fi:31 Fc}



static void Test_BFu16i_BFu31i_B()
{
  {
    init_simple_test("BFu16i_BFu31i_B");
    static BFu16i_BFu31i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16i_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16i_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu16i_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu31i_B(Test_BFu16i_BFu31i_B, "BFu16i_BFu31i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu31ll_B  {
  unsigned int v1:16;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu16i_BFu31ll_B) C1{ Fi:16 FL:31 Fc}



static void Test_BFu16i_BFu31ll_B()
{
  {
    init_simple_test("BFu16i_BFu31ll_B");
    static BFu16i_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16i_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16i_BFu31ll_B");
    check_field_offset(lv, v3, 6, "BFu16i_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu31ll_B(Test_BFu16i_BFu31ll_B, "BFu16i_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu32i_B  {
  unsigned int v1:16;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu16i_BFu32i_B) C1{ Fi:16 Fi:32 Fc}



static void Test_BFu16i_BFu32i_B()
{
  {
    init_simple_test("BFu16i_BFu32i_B");
    static BFu16i_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16i_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16i_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu16i_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu32i_B(Test_BFu16i_BFu32i_B, "BFu16i_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu32ll_B  {
  unsigned int v1:16;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu16i_BFu32ll_B) C1{ Fi:16 FL:32 Fc}



static void Test_BFu16i_BFu32ll_B()
{
  {
    init_simple_test("BFu16i_BFu32ll_B");
    static BFu16i_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16i_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16i_BFu32ll_B");
    check_field_offset(lv, v3, 6, "BFu16i_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu32ll_B(Test_BFu16i_BFu32ll_B, "BFu16i_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu33_B  {
  unsigned int v1:16;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu16i_BFu33_B) C1{ Fi:16 FL:33 Fc}



static void Test_BFu16i_BFu33_B()
{
  {
    init_simple_test("BFu16i_BFu33_B");
    static BFu16i_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu33_B");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16i_BFu33_B");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16i_BFu33_B");
    check_field_offset(lv, v3, 7, "BFu16i_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu33_B(Test_BFu16i_BFu33_B, "BFu16i_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu7c_B  {
  unsigned int v1:16;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu16i_BFu7c_B) C1{ Fi:16 Fc:7 Fc}



static void Test_BFu16i_BFu7c_B()
{
  {
    init_simple_test("BFu16i_BFu7c_B");
    static BFu16i_BFu7c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_BFu7c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16i_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16i_BFu7c_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu7c_B(Test_BFu16i_BFu7c_B, "BFu16i_BFu7c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu7i_B  {
  unsigned int v1:16;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu16i_BFu7i_B) C1{ Fi:16 Fi:7 Fc}



static void Test_BFu16i_BFu7i_B()
{
  {
    init_simple_test("BFu16i_BFu7i_B");
    static BFu16i_BFu7i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16i_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16i_BFu7i_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu7i_B(Test_BFu16i_BFu7i_B, "BFu16i_BFu7i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu7ll_B  {
  unsigned int v1:16;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu16i_BFu7ll_B) C1{ Fi:16 FL:7 Fc}



static void Test_BFu16i_BFu7ll_B()
{
  {
    init_simple_test("BFu16i_BFu7ll_B");
    static BFu16i_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16i_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16i_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16i_BFu7ll_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu7ll_B(Test_BFu16i_BFu7ll_B, "BFu16i_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu7s_B  {
  unsigned int v1:16;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu16i_BFu7s_B) C1{ Fi:16 Fs:7 Fc}



static void Test_BFu16i_BFu7s_B()
{
  {
    init_simple_test("BFu16i_BFu7s_B");
    static BFu16i_BFu7s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_BFu7s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16i_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16i_BFu7s_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu7s_B(Test_BFu16i_BFu7s_B, "BFu16i_BFu7s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu8c_B  {
  unsigned int v1:16;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu16i_BFu8c_B) C1{ Fi:16 Fc:8 Fc}



static void Test_BFu16i_BFu8c_B()
{
  {
    init_simple_test("BFu16i_BFu8c_B");
    static BFu16i_BFu8c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_BFu8c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16i_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16i_BFu8c_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu8c_B(Test_BFu16i_BFu8c_B, "BFu16i_BFu8c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu8i_B  {
  unsigned int v1:16;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu16i_BFu8i_B) C1{ Fi:16 Fi:8 Fc}



static void Test_BFu16i_BFu8i_B()
{
  {
    init_simple_test("BFu16i_BFu8i_B");
    static BFu16i_BFu8i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16i_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16i_BFu8i_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu8i_B(Test_BFu16i_BFu8i_B, "BFu16i_BFu8i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu8ll_B  {
  unsigned int v1:16;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu16i_BFu8ll_B) C1{ Fi:16 FL:8 Fc}



static void Test_BFu16i_BFu8ll_B()
{
  {
    init_simple_test("BFu16i_BFu8ll_B");
    static BFu16i_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16i_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16i_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16i_BFu8ll_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu8ll_B(Test_BFu16i_BFu8ll_B, "BFu16i_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu8s_B  {
  unsigned int v1:16;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu16i_BFu8s_B) C1{ Fi:16 Fs:8 Fc}



static void Test_BFu16i_BFu8s_B()
{
  {
    init_simple_test("BFu16i_BFu8s_B");
    static BFu16i_BFu8s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_BFu8s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16i_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16i_BFu8s_B");
    check_field_offset(lv, v3, 3, "BFu16i_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu8s_B(Test_BFu16i_BFu8s_B, "BFu16i_BFu8s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu9i_B  {
  unsigned int v1:16;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu16i_BFu9i_B) C1{ Fi:16 Fi:9 Fc}



static void Test_BFu16i_BFu9i_B()
{
  {
    init_simple_test("BFu16i_BFu9i_B");
    static BFu16i_BFu9i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16i_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16i_BFu9i_B");
    check_field_offset(lv, v3, 4, "BFu16i_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu9i_B(Test_BFu16i_BFu9i_B, "BFu16i_BFu9i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu9ll_B  {
  unsigned int v1:16;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu16i_BFu9ll_B) C1{ Fi:16 FL:9 Fc}



static void Test_BFu16i_BFu9ll_B()
{
  {
    init_simple_test("BFu16i_BFu9ll_B");
    static BFu16i_BFu9ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16i_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16i_BFu9ll_B");
    check_field_offset(lv, v3, 4, "BFu16i_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu9ll_B(Test_BFu16i_BFu9ll_B, "BFu16i_BFu9ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_BFu9s_B  {
  unsigned int v1:16;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu16i_BFu9s_B) C1{ Fi:16 Fs:9 Fc}



static void Test_BFu16i_BFu9s_B()
{
  {
    init_simple_test("BFu16i_BFu9s_B");
    static BFu16i_BFu9s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_BFu9s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16i_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16i_BFu9s_B");
    check_field_offset(lv, v3, 4, "BFu16i_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_BFu9s_B(Test_BFu16i_BFu9s_B, "BFu16i_BFu9s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_C_B  {
  unsigned int v1:16;
  char v2;
  bool v3;
};
//SIG(1 BFu16i_C_B) C1{ Fi:16 Fc[2]}



static void Test_BFu16i_C_B()
{
  {
    init_simple_test("BFu16i_C_B");
    static BFu16i_C_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_C_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_C_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_C_B");
    check_field_offset(lv, v2, 2, "BFu16i_C_B.v2");
    check_field_offset(lv, v3, 3, "BFu16i_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_C_B(Test_BFu16i_C_B, "BFu16i_C_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_D_B  {
  unsigned int v1:16;
  double v2;
  bool v3;
};
//SIG(1 BFu16i_D_B) C1{ Fi:16 FL Fc}



static void Test_BFu16i_D_B()
{
  {
    init_simple_test("BFu16i_D_B");
    static BFu16i_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16i_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_D_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16i_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16i_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_D_B(Test_BFu16i_D_B, "BFu16i_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_F_B  {
  unsigned int v1:16;
  float v2;
  bool v3;
};
//SIG(1 BFu16i_F_B) C1{ Fi:16 Fi Fc}



static void Test_BFu16i_F_B()
{
  {
    init_simple_test("BFu16i_F_B");
    static BFu16i_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16i_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_F_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_F_B");
    check_field_offset(lv, v2, 4, "BFu16i_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu16i_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_F_B(Test_BFu16i_F_B, "BFu16i_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_I_B  {
  unsigned int v1:16;
  int v2;
  bool v3;
};
//SIG(1 BFu16i_I_B) C1{ Fi:16 Fi Fc}



static void Test_BFu16i_I_B()
{
  {
    init_simple_test("BFu16i_I_B");
    static BFu16i_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16i_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_I_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_I_B");
    check_field_offset(lv, v2, 4, "BFu16i_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu16i_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_I_B(Test_BFu16i_I_B, "BFu16i_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_Ip_B  {
  unsigned int v1:16;
  int *v2;
  bool v3;
};
//SIG(1 BFu16i_Ip_B) C1{ Fi:16 Fp Fc}



static void Test_BFu16i_Ip_B()
{
  {
    init_simple_test("BFu16i_Ip_B");
    static BFu16i_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16i_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16i_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16i_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_Ip_B(Test_BFu16i_Ip_B, "BFu16i_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_L_B  {
  unsigned int v1:16;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu16i_L_B) C1{ Fi:16 FL Fc}



static void Test_BFu16i_L_B()
{
  {
    init_simple_test("BFu16i_L_B");
    static BFu16i_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16i_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_L_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16i_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16i_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_L_B(Test_BFu16i_L_B, "BFu16i_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_S_B  {
  unsigned int v1:16;
  short v2;
  bool v3;
};
//SIG(1 BFu16i_S_B) C1{ Fi:16 Fs Fc}



static void Test_BFu16i_S_B()
{
  {
    init_simple_test("BFu16i_S_B");
    static BFu16i_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_S_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_S_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_S_B");
    check_field_offset(lv, v2, 2, "BFu16i_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu16i_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_S_B(Test_BFu16i_S_B, "BFu16i_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_Uc_B  {
  unsigned int v1:16;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu16i_Uc_B) C1{ Fi:16 Fc[2]}



static void Test_BFu16i_Uc_B()
{
  {
    init_simple_test("BFu16i_Uc_B");
    static BFu16i_Uc_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16i_Uc_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_Uc_B");
    check_field_offset(lv, v2, 2, "BFu16i_Uc_B.v2");
    check_field_offset(lv, v3, 3, "BFu16i_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_Uc_B(Test_BFu16i_Uc_B, "BFu16i_Uc_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_Ui_B  {
  unsigned int v1:16;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu16i_Ui_B) C1{ Fi:16 Fi Fc}



static void Test_BFu16i_Ui_B()
{
  {
    init_simple_test("BFu16i_Ui_B");
    static BFu16i_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16i_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_Ui_B");
    check_field_offset(lv, v2, 4, "BFu16i_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu16i_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_Ui_B(Test_BFu16i_Ui_B, "BFu16i_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_Ul_B  {
  unsigned int v1:16;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu16i_Ul_B) C1{ Fi:16 FL Fc}



static void Test_BFu16i_Ul_B()
{
  {
    init_simple_test("BFu16i_Ul_B");
    static BFu16i_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16i_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16i_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16i_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_Ul_B(Test_BFu16i_Ul_B, "BFu16i_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_Us_B  {
  unsigned int v1:16;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu16i_Us_B) C1{ Fi:16 Fs Fc}



static void Test_BFu16i_Us_B()
{
  {
    init_simple_test("BFu16i_Us_B");
    static BFu16i_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16i_Us_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16i_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_Us_B");
    check_field_offset(lv, v2, 2, "BFu16i_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu16i_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_Us_B(Test_BFu16i_Us_B, "BFu16i_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16i_Vp_B  {
  unsigned int v1:16;
  void *v2;
  bool v3;
};
//SIG(1 BFu16i_Vp_B) C1{ Fi:16 Fp Fc}



static void Test_BFu16i_Vp_B()
{
  {
    init_simple_test("BFu16i_Vp_B");
    static BFu16i_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16i_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16i_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16i_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16i_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16i_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16i_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16i_Vp_B(Test_BFu16i_Vp_B, "BFu16i_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B  {
  __tsu64 v1:16;
  bool v2;
};
//SIG(1 BFu16ll_B) C1{ FL:16 Fc}



static void Test_BFu16ll_B()
{
  {
    init_simple_test("BFu16ll_B");
    static BFu16ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B");
    check_field_offset(lv, v2, 2, "BFu16ll_B.v2");
  }
}
static Arrange_To_Call_Me vBFu16ll_B(Test_BFu16ll_B, "BFu16ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_B  {
  __tsu64 v1:16;
  bool v2;
  bool v3;
};
//SIG(1 BFu16ll_B_B) C1{ FL:16 Fc[2]}



static void Test_BFu16ll_B_B()
{
  {
    init_simple_test("BFu16ll_B_B");
    static BFu16ll_B_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_B");
    check_field_offset(lv, v2, 2, "BFu16ll_B_B.v2");
    check_field_offset(lv, v3, 3, "BFu16ll_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_B(Test_BFu16ll_B_B, "BFu16ll_B_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu15i  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu16ll_B_BFu15i) C1{ FL:16 Fc Fi:15}



static void Test_BFu16ll_B_BFu15i()
{
  {
    init_simple_test("BFu16ll_B_BFu15i");
    static BFu16ll_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_B_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu15i(Test_BFu16ll_B_BFu15i, "BFu16ll_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu15ll  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16ll_B_BFu15ll) C1{ FL:16 Fc FL:15}



static void Test_BFu16ll_B_BFu15ll()
{
  {
    init_simple_test("BFu16ll_B_BFu15ll");
    static BFu16ll_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16ll_B_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16ll_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu15ll(Test_BFu16ll_B_BFu15ll, "BFu16ll_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu15s  {
  __tsu64 v1:16;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu16ll_B_BFu15s) C1{ FL:16 Fc Fs:15}



static void Test_BFu16ll_B_BFu15s()
{
  {
    init_simple_test("BFu16ll_B_BFu15s");
    static BFu16ll_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16ll_B_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16ll_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu15s(Test_BFu16ll_B_BFu15s, "BFu16ll_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu16i  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu16ll_B_BFu16i) C1{ FL:16 Fc Fi:16}



static void Test_BFu16ll_B_BFu16i()
{
  {
    init_simple_test("BFu16ll_B_BFu16i");
    static BFu16ll_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_B_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu16i(Test_BFu16ll_B_BFu16i, "BFu16ll_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu16ll  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16ll_B_BFu16ll) C1{ FL:16 Fc FL:16}



static void Test_BFu16ll_B_BFu16ll()
{
  {
    init_simple_test("BFu16ll_B_BFu16ll");
    static BFu16ll_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16ll_B_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu16ll(Test_BFu16ll_B_BFu16ll, "BFu16ll_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu16s  {
  __tsu64 v1:16;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu16ll_B_BFu16s) C1{ FL:16 Fc Fs:16}



static void Test_BFu16ll_B_BFu16s()
{
  {
    init_simple_test("BFu16ll_B_BFu16s");
    static BFu16ll_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16ll_B_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu16s(Test_BFu16ll_B_BFu16s, "BFu16ll_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu17i  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu16ll_B_BFu17i) C1{ FL:16 Fc Fi:17}



static void Test_BFu16ll_B_BFu17i()
{
  {
    init_simple_test("BFu16ll_B_BFu17i");
    static BFu16ll_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16ll_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu17i(Test_BFu16ll_B_BFu17i, "BFu16ll_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu17ll  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16ll_B_BFu17ll) C1{ FL:16 Fc FL:17}



static void Test_BFu16ll_B_BFu17ll()
{
  {
    init_simple_test("BFu16ll_B_BFu17ll");
    static BFu16ll_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16ll_B_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16ll_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu17ll(Test_BFu16ll_B_BFu17ll, "BFu16ll_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu1c  {
  __tsu64 v1:16;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu16ll_B_BFu1c) C1{ FL:16 Fc Fc:1}



static void Test_BFu16ll_B_BFu1c()
{
  {
    init_simple_test("BFu16ll_B_BFu1c");
    static BFu16ll_B_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu1c(Test_BFu16ll_B_BFu1c, "BFu16ll_B_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu1i  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu16ll_B_BFu1i) C1{ FL:16 Fc Fi:1}



static void Test_BFu16ll_B_BFu1i()
{
  {
    init_simple_test("BFu16ll_B_BFu1i");
    static BFu16ll_B_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu1i(Test_BFu16ll_B_BFu1i, "BFu16ll_B_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu1ll  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16ll_B_BFu1ll) C1{ FL:16 Fc FL:1}



static void Test_BFu16ll_B_BFu1ll()
{
  {
    init_simple_test("BFu16ll_B_BFu1ll");
    static BFu16ll_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu1ll(Test_BFu16ll_B_BFu1ll, "BFu16ll_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu1s  {
  __tsu64 v1:16;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu16ll_B_BFu1s) C1{ FL:16 Fc Fs:1}



static void Test_BFu16ll_B_BFu1s()
{
  {
    init_simple_test("BFu16ll_B_BFu1s");
    static BFu16ll_B_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16ll_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu1s(Test_BFu16ll_B_BFu1s, "BFu16ll_B_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu31i  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu16ll_B_BFu31i) C1{ FL:16 Fc Fi:31}



static void Test_BFu16ll_B_BFu31i()
{
  {
    init_simple_test("BFu16ll_B_BFu31i");
    static BFu16ll_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16ll_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu31i(Test_BFu16ll_B_BFu31i, "BFu16ll_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu31ll  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16ll_B_BFu31ll) C1{ FL:16 Fc FL:31}



static void Test_BFu16ll_B_BFu31ll()
{
  {
    init_simple_test("BFu16ll_B_BFu31ll");
    static BFu16ll_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16ll_B_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16ll_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu31ll(Test_BFu16ll_B_BFu31ll, "BFu16ll_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu32i  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu16ll_B_BFu32i) C1{ FL:16 Fc Fi:32}



static void Test_BFu16ll_B_BFu32i()
{
  {
    init_simple_test("BFu16ll_B_BFu32i");
    static BFu16ll_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16ll_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu32i(Test_BFu16ll_B_BFu32i, "BFu16ll_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu32ll  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16ll_B_BFu32ll) C1{ FL:16 Fc FL:32}



static void Test_BFu16ll_B_BFu32ll()
{
  {
    init_simple_test("BFu16ll_B_BFu32ll");
    static BFu16ll_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16ll_B_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16ll_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu32ll(Test_BFu16ll_B_BFu32ll, "BFu16ll_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu33  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16ll_B_BFu33) C1{ FL:16 Fc FL:33}



static void Test_BFu16ll_B_BFu33()
{
  {
    init_simple_test("BFu16ll_B_BFu33");
    static BFu16ll_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu33");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16ll_B_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16ll_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu33(Test_BFu16ll_B_BFu33, "BFu16ll_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu7c  {
  __tsu64 v1:16;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu16ll_B_BFu7c) C1{ FL:16 Fc Fc:7}



static void Test_BFu16ll_B_BFu7c()
{
  {
    init_simple_test("BFu16ll_B_BFu7c");
    static BFu16ll_B_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_B_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu7c(Test_BFu16ll_B_BFu7c, "BFu16ll_B_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu7i  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu16ll_B_BFu7i) C1{ FL:16 Fc Fi:7}



static void Test_BFu16ll_B_BFu7i()
{
  {
    init_simple_test("BFu16ll_B_BFu7i");
    static BFu16ll_B_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_B_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu7i(Test_BFu16ll_B_BFu7i, "BFu16ll_B_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu7ll  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16ll_B_BFu7ll) C1{ FL:16 Fc FL:7}



static void Test_BFu16ll_B_BFu7ll()
{
  {
    init_simple_test("BFu16ll_B_BFu7ll");
    static BFu16ll_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_B_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu7ll(Test_BFu16ll_B_BFu7ll, "BFu16ll_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu7s  {
  __tsu64 v1:16;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu16ll_B_BFu7s) C1{ FL:16 Fc Fs:7}



static void Test_BFu16ll_B_BFu7s()
{
  {
    init_simple_test("BFu16ll_B_BFu7s");
    static BFu16ll_B_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16ll_B_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16ll_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu7s(Test_BFu16ll_B_BFu7s, "BFu16ll_B_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu8c  {
  __tsu64 v1:16;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu16ll_B_BFu8c) C1{ FL:16 Fc Fc:8}



static void Test_BFu16ll_B_BFu8c()
{
  {
    init_simple_test("BFu16ll_B_BFu8c");
    static BFu16ll_B_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_B_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu8c(Test_BFu16ll_B_BFu8c, "BFu16ll_B_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu8i  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu16ll_B_BFu8i) C1{ FL:16 Fc Fi:8}



static void Test_BFu16ll_B_BFu8i()
{
  {
    init_simple_test("BFu16ll_B_BFu8i");
    static BFu16ll_B_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_B_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu8i(Test_BFu16ll_B_BFu8i, "BFu16ll_B_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu8ll  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16ll_B_BFu8ll) C1{ FL:16 Fc FL:8}



static void Test_BFu16ll_B_BFu8ll()
{
  {
    init_simple_test("BFu16ll_B_BFu8ll");
    static BFu16ll_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_B_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu8ll(Test_BFu16ll_B_BFu8ll, "BFu16ll_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu8s  {
  __tsu64 v1:16;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu16ll_B_BFu8s) C1{ FL:16 Fc Fs:8}



static void Test_BFu16ll_B_BFu8s()
{
  {
    init_simple_test("BFu16ll_B_BFu8s");
    static BFu16ll_B_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16ll_B_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16ll_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu8s(Test_BFu16ll_B_BFu8s, "BFu16ll_B_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu9i  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu16ll_B_BFu9i) C1{ FL:16 Fc Fi:9}



static void Test_BFu16ll_B_BFu9i()
{
  {
    init_simple_test("BFu16ll_B_BFu9i");
    static BFu16ll_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_B_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu9i(Test_BFu16ll_B_BFu9i, "BFu16ll_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu9ll  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16ll_B_BFu9ll) C1{ FL:16 Fc FL:9}



static void Test_BFu16ll_B_BFu9ll()
{
  {
    init_simple_test("BFu16ll_B_BFu9ll");
    static BFu16ll_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16ll_B_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16ll_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu9ll(Test_BFu16ll_B_BFu9ll, "BFu16ll_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_BFu9s  {
  __tsu64 v1:16;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu16ll_B_BFu9s) C1{ FL:16 Fc Fs:9}



static void Test_BFu16ll_B_BFu9s()
{
  {
    init_simple_test("BFu16ll_B_BFu9s");
    static BFu16ll_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16ll_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16ll_B_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16ll_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_BFu9s(Test_BFu16ll_B_BFu9s, "BFu16ll_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_C  {
  __tsu64 v1:16;
  bool v2;
  char v3;
};
//SIG(1 BFu16ll_B_C) C1{ FL:16 Fc[2]}



static void Test_BFu16ll_B_C()
{
  {
    init_simple_test("BFu16ll_B_C");
    static BFu16ll_B_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_C");
    check_field_offset(lv, v2, 2, "BFu16ll_B_C.v2");
    check_field_offset(lv, v3, 3, "BFu16ll_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_C(Test_BFu16ll_B_C, "BFu16ll_B_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_D  {
  __tsu64 v1:16;
  bool v2;
  double v3;
};
//SIG(1 BFu16ll_B_D) C1{ FL:16 Fc FL}



static void Test_BFu16ll_B_D()
{
  {
    init_simple_test("BFu16ll_B_D");
    static BFu16ll_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_D");
    check_field_offset(lv, v2, 2, "BFu16ll_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_D(Test_BFu16ll_B_D, "BFu16ll_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_F  {
  __tsu64 v1:16;
  bool v2;
  float v3;
};
//SIG(1 BFu16ll_B_F) C1{ FL:16 Fc Fi}



static void Test_BFu16ll_B_F()
{
  {
    init_simple_test("BFu16ll_B_F");
    static BFu16ll_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_F");
    check_field_offset(lv, v2, 2, "BFu16ll_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_F(Test_BFu16ll_B_F, "BFu16ll_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_I  {
  __tsu64 v1:16;
  bool v2;
  int v3;
};
//SIG(1 BFu16ll_B_I) C1{ FL:16 Fc Fi}



static void Test_BFu16ll_B_I()
{
  {
    init_simple_test("BFu16ll_B_I");
    static BFu16ll_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_I");
    check_field_offset(lv, v2, 2, "BFu16ll_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_I(Test_BFu16ll_B_I, "BFu16ll_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_Ip  {
  __tsu64 v1:16;
  bool v2;
  int *v3;
};
//SIG(1 BFu16ll_B_Ip) C1{ FL:16 Fc Fp}



static void Test_BFu16ll_B_Ip()
{
  {
    init_simple_test("BFu16ll_B_Ip");
    static BFu16ll_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_Ip");
    check_field_offset(lv, v2, 2, "BFu16ll_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_Ip(Test_BFu16ll_B_Ip, "BFu16ll_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_L  {
  __tsu64 v1:16;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu16ll_B_L) C1{ FL:16 Fc FL}



static void Test_BFu16ll_B_L()
{
  {
    init_simple_test("BFu16ll_B_L");
    static BFu16ll_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_L");
    check_field_offset(lv, v2, 2, "BFu16ll_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_L(Test_BFu16ll_B_L, "BFu16ll_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_S  {
  __tsu64 v1:16;
  bool v2;
  short v3;
};
//SIG(1 BFu16ll_B_S) C1{ FL:16 Fc Fs}



static void Test_BFu16ll_B_S()
{
  {
    init_simple_test("BFu16ll_B_S");
    static BFu16ll_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_S");
    check_field_offset(lv, v2, 2, "BFu16ll_B_S.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_S(Test_BFu16ll_B_S, "BFu16ll_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_Uc  {
  __tsu64 v1:16;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu16ll_B_Uc) C1{ FL:16 Fc[2]}



static void Test_BFu16ll_B_Uc()
{
  {
    init_simple_test("BFu16ll_B_Uc");
    static BFu16ll_B_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_B_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_Uc");
    check_field_offset(lv, v2, 2, "BFu16ll_B_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu16ll_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_Uc(Test_BFu16ll_B_Uc, "BFu16ll_B_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_Ui  {
  __tsu64 v1:16;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu16ll_B_Ui) C1{ FL:16 Fc Fi}



static void Test_BFu16ll_B_Ui()
{
  {
    init_simple_test("BFu16ll_B_Ui");
    static BFu16ll_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_Ui");
    check_field_offset(lv, v2, 2, "BFu16ll_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_Ui(Test_BFu16ll_B_Ui, "BFu16ll_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_Ul  {
  __tsu64 v1:16;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu16ll_B_Ul) C1{ FL:16 Fc FL}



static void Test_BFu16ll_B_Ul()
{
  {
    init_simple_test("BFu16ll_B_Ul");
    static BFu16ll_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_Ul");
    check_field_offset(lv, v2, 2, "BFu16ll_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_Ul(Test_BFu16ll_B_Ul, "BFu16ll_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_Us  {
  __tsu64 v1:16;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu16ll_B_Us) C1{ FL:16 Fc Fs}



static void Test_BFu16ll_B_Us()
{
  {
    init_simple_test("BFu16ll_B_Us");
    static BFu16ll_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_B_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_Us");
    check_field_offset(lv, v2, 2, "BFu16ll_B_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_Us(Test_BFu16ll_B_Us, "BFu16ll_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_B_Vp  {
  __tsu64 v1:16;
  bool v2;
  void *v3;
};
//SIG(1 BFu16ll_B_Vp) C1{ FL:16 Fc Fp}



static void Test_BFu16ll_B_Vp()
{
  {
    init_simple_test("BFu16ll_B_Vp");
    static BFu16ll_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16ll_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_B_Vp");
    check_field_offset(lv, v2, 2, "BFu16ll_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16ll_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_B_Vp(Test_BFu16ll_B_Vp, "BFu16ll_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu15i_B  {
  __tsu64 v1:16;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu16ll_BFu15i_B) C1{ FL:16 Fi:15 Fc}



static void Test_BFu16ll_BFu15i_B()
{
  {
    init_simple_test("BFu16ll_BFu15i_B");
    static BFu16ll_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu15i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16ll_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu15i_B");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu15i_B(Test_BFu16ll_BFu15i_B, "BFu16ll_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu15ll_B  {
  __tsu64 v1:16;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu16ll_BFu15ll_B) C1{ FL:16 FL:15 Fc}



static void Test_BFu16ll_BFu15ll_B()
{
  {
    init_simple_test("BFu16ll_BFu15ll_B");
    static BFu16ll_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu15ll_B");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu15ll_B(Test_BFu16ll_BFu15ll_B, "BFu16ll_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu15s_B  {
  __tsu64 v1:16;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu16ll_BFu15s_B) C1{ FL:16 Fs:15 Fc}



static void Test_BFu16ll_BFu15s_B()
{
  {
    init_simple_test("BFu16ll_BFu15s_B");
    static BFu16ll_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu15s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16ll_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16ll_BFu15s_B");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu15s_B(Test_BFu16ll_BFu15s_B, "BFu16ll_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu16i_B  {
  __tsu64 v1:16;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu16ll_BFu16i_B) C1{ FL:16 Fi:16 Fc}



static void Test_BFu16ll_BFu16i_B()
{
  {
    init_simple_test("BFu16ll_BFu16i_B");
    static BFu16ll_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu16i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu16i_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16ll_BFu16i_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu16i_B");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu16i_B(Test_BFu16ll_BFu16i_B, "BFu16ll_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu16ll_B  {
  __tsu64 v1:16;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu16ll_BFu16ll_B) C1{ FL:16 FL:16 Fc}



static void Test_BFu16ll_BFu16ll_B()
{
  {
    init_simple_test("BFu16ll_BFu16ll_B");
    static BFu16ll_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu16ll_B");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu16ll_B(Test_BFu16ll_BFu16ll_B, "BFu16ll_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu16s_B  {
  __tsu64 v1:16;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu16ll_BFu16s_B) C1{ FL:16 Fs:16 Fc}



static void Test_BFu16ll_BFu16s_B()
{
  {
    init_simple_test("BFu16ll_BFu16s_B");
    static BFu16ll_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu16s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16ll_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu16s_B(Test_BFu16ll_BFu16s_B, "BFu16ll_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu17i_B  {
  __tsu64 v1:16;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu16ll_BFu17i_B) C1{ FL:16 Fi:17 Fc}



static void Test_BFu16ll_BFu17i_B()
{
  {
    init_simple_test("BFu16ll_BFu17i_B");
    static BFu16ll_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu17i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16ll_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu17i_B");
    check_field_offset(lv, v3, 7, "BFu16ll_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu17i_B(Test_BFu16ll_BFu17i_B, "BFu16ll_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu17ll_B  {
  __tsu64 v1:16;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu16ll_BFu17ll_B) C1{ FL:16 FL:17 Fc}



static void Test_BFu16ll_BFu17ll_B()
{
  {
    init_simple_test("BFu16ll_BFu17ll_B");
    static BFu16ll_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16ll_BFu17ll_B");
    check_field_offset(lv, v3, 5, "BFu16ll_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu17ll_B(Test_BFu16ll_BFu17ll_B, "BFu16ll_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu1c_B  {
  __tsu64 v1:16;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu16ll_BFu1c_B) C1{ FL:16 Fc:1 Fc}



static void Test_BFu16ll_BFu1c_B()
{
  {
    init_simple_test("BFu16ll_BFu1c_B");
    static BFu16ll_BFu1c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1c_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1c_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu1c_B(Test_BFu16ll_BFu1c_B, "BFu16ll_BFu1c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu1i_B  {
  __tsu64 v1:16;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu16ll_BFu1i_B) C1{ FL:16 Fi:1 Fc}



static void Test_BFu16ll_BFu1i_B()
{
  {
    init_simple_test("BFu16ll_BFu1i_B");
    static BFu16ll_BFu1i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1i_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1i_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu1i_B(Test_BFu16ll_BFu1i_B, "BFu16ll_BFu1i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu1ll_B  {
  __tsu64 v1:16;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu16ll_BFu1ll_B) C1{ FL:16 FL:1 Fc}



static void Test_BFu16ll_BFu1ll_B()
{
  {
    init_simple_test("BFu16ll_BFu1ll_B");
    static BFu16ll_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1ll_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1ll_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu1ll_B(Test_BFu16ll_BFu1ll_B, "BFu16ll_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu1s_B  {
  __tsu64 v1:16;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu16ll_BFu1s_B) C1{ FL:16 Fs:1 Fc}



static void Test_BFu16ll_BFu1s_B()
{
  {
    init_simple_test("BFu16ll_BFu1s_B");
    static BFu16ll_BFu1s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu1s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu1s_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16ll_BFu1s_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu1s_B(Test_BFu16ll_BFu1s_B, "BFu16ll_BFu1s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu31i_B  {
  __tsu64 v1:16;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu16ll_BFu31i_B) C1{ FL:16 Fi:31 Fc}



static void Test_BFu16ll_BFu31i_B()
{
  {
    init_simple_test("BFu16ll_BFu31i_B");
    static BFu16ll_BFu31i_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu31i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16ll_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu31i_B(Test_BFu16ll_BFu31i_B, "BFu16ll_BFu31i_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu31ll_B  {
  __tsu64 v1:16;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu16ll_BFu31ll_B) C1{ FL:16 FL:31 Fc}



static void Test_BFu16ll_BFu31ll_B()
{
  {
    init_simple_test("BFu16ll_BFu31ll_B");
    static BFu16ll_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16ll_BFu31ll_B");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu31ll_B(Test_BFu16ll_BFu31ll_B, "BFu16ll_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu32i_B  {
  __tsu64 v1:16;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu16ll_BFu32i_B) C1{ FL:16 Fi:32 Fc}



static void Test_BFu16ll_BFu32i_B()
{
  {
    init_simple_test("BFu16ll_BFu32i_B");
    static BFu16ll_BFu32i_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_BFu32i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu16ll_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu32i_B(Test_BFu16ll_BFu32i_B, "BFu16ll_BFu32i_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu32ll_B  {
  __tsu64 v1:16;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu16ll_BFu32ll_B) C1{ FL:16 FL:32 Fc}



static void Test_BFu16ll_BFu32ll_B()
{
  {
    init_simple_test("BFu16ll_BFu32ll_B");
    static BFu16ll_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16ll_BFu32ll_B");
    check_field_offset(lv, v3, 6, "BFu16ll_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu32ll_B(Test_BFu16ll_BFu32ll_B, "BFu16ll_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu33_B  {
  __tsu64 v1:16;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu16ll_BFu33_B) C1{ FL:16 FL:33 Fc}



static void Test_BFu16ll_BFu33_B()
{
  {
    init_simple_test("BFu16ll_BFu33_B");
    static BFu16ll_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu33_B");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16ll_BFu33_B");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16ll_BFu33_B");
    check_field_offset(lv, v3, 7, "BFu16ll_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu33_B(Test_BFu16ll_BFu33_B, "BFu16ll_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu7c_B  {
  __tsu64 v1:16;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu16ll_BFu7c_B) C1{ FL:16 Fc:7 Fc}



static void Test_BFu16ll_BFu7c_B()
{
  {
    init_simple_test("BFu16ll_BFu7c_B");
    static BFu16ll_BFu7c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7c_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu7c_B(Test_BFu16ll_BFu7c_B, "BFu16ll_BFu7c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu7i_B  {
  __tsu64 v1:16;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu16ll_BFu7i_B) C1{ FL:16 Fi:7 Fc}



static void Test_BFu16ll_BFu7i_B()
{
  {
    init_simple_test("BFu16ll_BFu7i_B");
    static BFu16ll_BFu7i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7i_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu7i_B(Test_BFu16ll_BFu7i_B, "BFu16ll_BFu7i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu7ll_B  {
  __tsu64 v1:16;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu16ll_BFu7ll_B) C1{ FL:16 FL:7 Fc}



static void Test_BFu16ll_BFu7ll_B()
{
  {
    init_simple_test("BFu16ll_BFu7ll_B");
    static BFu16ll_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7ll_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu7ll_B(Test_BFu16ll_BFu7ll_B, "BFu16ll_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu7s_B  {
  __tsu64 v1:16;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu16ll_BFu7s_B) C1{ FL:16 Fs:7 Fc}



static void Test_BFu16ll_BFu7s_B()
{
  {
    init_simple_test("BFu16ll_BFu7s_B");
    static BFu16ll_BFu7s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu7s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16ll_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16ll_BFu7s_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu7s_B(Test_BFu16ll_BFu7s_B, "BFu16ll_BFu7s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu8c_B  {
  __tsu64 v1:16;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu16ll_BFu8c_B) C1{ FL:16 Fc:8 Fc}



static void Test_BFu16ll_BFu8c_B()
{
  {
    init_simple_test("BFu16ll_BFu8c_B");
    static BFu16ll_BFu8c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8c_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu8c_B(Test_BFu16ll_BFu8c_B, "BFu16ll_BFu8c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu8i_B  {
  __tsu64 v1:16;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu16ll_BFu8i_B) C1{ FL:16 Fi:8 Fc}



static void Test_BFu16ll_BFu8i_B()
{
  {
    init_simple_test("BFu16ll_BFu8i_B");
    static BFu16ll_BFu8i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8i_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu8i_B(Test_BFu16ll_BFu8i_B, "BFu16ll_BFu8i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu8ll_B  {
  __tsu64 v1:16;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu16ll_BFu8ll_B) C1{ FL:16 FL:8 Fc}



static void Test_BFu16ll_BFu8ll_B()
{
  {
    init_simple_test("BFu16ll_BFu8ll_B");
    static BFu16ll_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8ll_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu8ll_B(Test_BFu16ll_BFu8ll_B, "BFu16ll_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu8s_B  {
  __tsu64 v1:16;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu16ll_BFu8s_B) C1{ FL:16 Fs:8 Fc}



static void Test_BFu16ll_BFu8s_B()
{
  {
    init_simple_test("BFu16ll_BFu8s_B");
    static BFu16ll_BFu8s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_BFu8s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16ll_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16ll_BFu8s_B");
    check_field_offset(lv, v3, 3, "BFu16ll_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu8s_B(Test_BFu16ll_BFu8s_B, "BFu16ll_BFu8s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu9i_B  {
  __tsu64 v1:16;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu16ll_BFu9i_B) C1{ FL:16 Fi:9 Fc}



static void Test_BFu16ll_BFu9i_B()
{
  {
    init_simple_test("BFu16ll_BFu9i_B");
    static BFu16ll_BFu9i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9i_B");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu9i_B(Test_BFu16ll_BFu9i_B, "BFu16ll_BFu9i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu9ll_B  {
  __tsu64 v1:16;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu16ll_BFu9ll_B) C1{ FL:16 FL:9 Fc}



static void Test_BFu16ll_BFu9ll_B()
{
  {
    init_simple_test("BFu16ll_BFu9ll_B");
    static BFu16ll_BFu9ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9ll_B");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu9ll_B(Test_BFu16ll_BFu9ll_B, "BFu16ll_BFu9ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_BFu9s_B  {
  __tsu64 v1:16;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu16ll_BFu9s_B) C1{ FL:16 Fs:9 Fc}



static void Test_BFu16ll_BFu9s_B()
{
  {
    init_simple_test("BFu16ll_BFu9s_B");
    static BFu16ll_BFu9s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_BFu9s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16ll_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16ll_BFu9s_B");
    check_field_offset(lv, v3, 4, "BFu16ll_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_BFu9s_B(Test_BFu16ll_BFu9s_B, "BFu16ll_BFu9s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_C_B  {
  __tsu64 v1:16;
  char v2;
  bool v3;
};
//SIG(1 BFu16ll_C_B) C1{ FL:16 Fc[2]}



static void Test_BFu16ll_C_B()
{
  {
    init_simple_test("BFu16ll_C_B");
    static BFu16ll_C_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_C_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_C_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_C_B");
    check_field_offset(lv, v2, 2, "BFu16ll_C_B.v2");
    check_field_offset(lv, v3, 3, "BFu16ll_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_C_B(Test_BFu16ll_C_B, "BFu16ll_C_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_D_B  {
  __tsu64 v1:16;
  double v2;
  bool v3;
};
//SIG(1 BFu16ll_D_B) C1{ FL:16 FL Fc}



static void Test_BFu16ll_D_B()
{
  {
    init_simple_test("BFu16ll_D_B");
    static BFu16ll_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_D_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_D_B(Test_BFu16ll_D_B, "BFu16ll_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_F_B  {
  __tsu64 v1:16;
  float v2;
  bool v3;
};
//SIG(1 BFu16ll_F_B) C1{ FL:16 Fi Fc}



static void Test_BFu16ll_F_B()
{
  {
    init_simple_test("BFu16ll_F_B");
    static BFu16ll_F_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_F_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_F_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_F_B");
    check_field_offset(lv, v2, 4, "BFu16ll_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_F_B(Test_BFu16ll_F_B, "BFu16ll_F_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_I_B  {
  __tsu64 v1:16;
  int v2;
  bool v3;
};
//SIG(1 BFu16ll_I_B) C1{ FL:16 Fi Fc}



static void Test_BFu16ll_I_B()
{
  {
    init_simple_test("BFu16ll_I_B");
    static BFu16ll_I_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_I_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_I_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_I_B");
    check_field_offset(lv, v2, 4, "BFu16ll_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_I_B(Test_BFu16ll_I_B, "BFu16ll_I_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_Ip_B  {
  __tsu64 v1:16;
  int *v2;
  bool v3;
};
//SIG(1 BFu16ll_Ip_B) C1{ FL:16 Fp Fc}



static void Test_BFu16ll_Ip_B()
{
  {
    init_simple_test("BFu16ll_Ip_B");
    static BFu16ll_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_Ip_B(Test_BFu16ll_Ip_B, "BFu16ll_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_L_B  {
  __tsu64 v1:16;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu16ll_L_B) C1{ FL:16 FL Fc}



static void Test_BFu16ll_L_B()
{
  {
    init_simple_test("BFu16ll_L_B");
    static BFu16ll_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_L_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_L_B(Test_BFu16ll_L_B, "BFu16ll_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_S_B  {
  __tsu64 v1:16;
  short v2;
  bool v3;
};
//SIG(1 BFu16ll_S_B) C1{ FL:16 Fs Fc}



static void Test_BFu16ll_S_B()
{
  {
    init_simple_test("BFu16ll_S_B");
    static BFu16ll_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_S_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_S_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_S_B");
    check_field_offset(lv, v2, 2, "BFu16ll_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_S_B(Test_BFu16ll_S_B, "BFu16ll_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_Uc_B  {
  __tsu64 v1:16;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu16ll_Uc_B) C1{ FL:16 Fc[2]}



static void Test_BFu16ll_Uc_B()
{
  {
    init_simple_test("BFu16ll_Uc_B");
    static BFu16ll_Uc_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16ll_Uc_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Uc_B");
    check_field_offset(lv, v2, 2, "BFu16ll_Uc_B.v2");
    check_field_offset(lv, v3, 3, "BFu16ll_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_Uc_B(Test_BFu16ll_Uc_B, "BFu16ll_Uc_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_Ui_B  {
  __tsu64 v1:16;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu16ll_Ui_B) C1{ FL:16 Fi Fc}



static void Test_BFu16ll_Ui_B()
{
  {
    init_simple_test("BFu16ll_Ui_B");
    static BFu16ll_Ui_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16ll_Ui_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ui_B");
    check_field_offset(lv, v2, 4, "BFu16ll_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu16ll_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_Ui_B(Test_BFu16ll_Ui_B, "BFu16ll_Ui_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_Ul_B  {
  __tsu64 v1:16;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu16ll_Ul_B) C1{ FL:16 FL Fc}



static void Test_BFu16ll_Ul_B()
{
  {
    init_simple_test("BFu16ll_Ul_B");
    static BFu16ll_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16ll_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16ll_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_Ul_B(Test_BFu16ll_Ul_B, "BFu16ll_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_Us_B  {
  __tsu64 v1:16;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu16ll_Us_B) C1{ FL:16 Fs Fc}



static void Test_BFu16ll_Us_B()
{
  {
    init_simple_test("BFu16ll_Us_B");
    static BFu16ll_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16ll_Us_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Us_B");
    check_field_offset(lv, v2, 2, "BFu16ll_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu16ll_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_Us_B(Test_BFu16ll_Us_B, "BFu16ll_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16ll_Vp_B  {
  __tsu64 v1:16;
  void *v2;
  bool v3;
};
//SIG(1 BFu16ll_Vp_B) C1{ FL:16 Fp Fc}



static void Test_BFu16ll_Vp_B()
{
  {
    init_simple_test("BFu16ll_Vp_B");
    static BFu16ll_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16ll_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16ll_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16ll_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16ll_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16ll_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16ll_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16ll_Vp_B(Test_BFu16ll_Vp_B, "BFu16ll_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B  {
  unsigned short v1:16;
  bool v2;
};
//SIG(1 BFu16s_B) C1{ Fs:16 Fc}



static void Test_BFu16s_B()
{
  {
    init_simple_test("BFu16s_B");
    static BFu16s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B");
    check_field_offset(lv, v2, 2, "BFu16s_B.v2");
  }
}
static Arrange_To_Call_Me vBFu16s_B(Test_BFu16s_B, "BFu16s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_B  {
  unsigned short v1:16;
  bool v2;
  bool v3;
};
//SIG(1 BFu16s_B_B) C1{ Fs:16 Fc[2]}



static void Test_BFu16s_B_B()
{
  {
    init_simple_test("BFu16s_B_B");
    static BFu16s_B_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_B");
    check_field_offset(lv, v2, 2, "BFu16s_B_B.v2");
    check_field_offset(lv, v3, 3, "BFu16s_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_B(Test_BFu16s_B_B, "BFu16s_B_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu15i  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu16s_B_BFu15i) C1{ Fs:16 Fc Fi:15}



static void Test_BFu16s_B_BFu15i()
{
  {
    init_simple_test("BFu16s_B_BFu15i");
    static BFu16s_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu15i");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_B_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu15i(Test_BFu16s_B_BFu15i, "BFu16s_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu15ll  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu16s_B_BFu15ll) C1{ Fs:16 Fc FL:15}



static void Test_BFu16s_B_BFu15ll()
{
  {
    init_simple_test("BFu16s_B_BFu15ll");
    static BFu16s_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu16s_B_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu16s_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu15ll(Test_BFu16s_B_BFu15ll, "BFu16s_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu15s  {
  unsigned short v1:16;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu16s_B_BFu15s) C1{ Fs:16 Fc Fs:15}



static void Test_BFu16s_B_BFu15s()
{
  {
    init_simple_test("BFu16s_B_BFu15s");
    static BFu16s_B_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_B_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu15s");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu16s_B_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu16s_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu15s(Test_BFu16s_B_BFu15s, "BFu16s_B_BFu15s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu16i  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu16s_B_BFu16i) C1{ Fs:16 Fc Fi:16}



static void Test_BFu16s_B_BFu16i()
{
  {
    init_simple_test("BFu16s_B_BFu16i");
    static BFu16s_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu16i");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_B_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu16i(Test_BFu16s_B_BFu16i, "BFu16s_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu16ll  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu16s_B_BFu16ll) C1{ Fs:16 Fc FL:16}



static void Test_BFu16s_B_BFu16ll()
{
  {
    init_simple_test("BFu16s_B_BFu16ll");
    static BFu16s_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu16s_B_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu16ll(Test_BFu16s_B_BFu16ll, "BFu16s_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu16s  {
  unsigned short v1:16;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu16s_B_BFu16s) C1{ Fs:16 Fc Fs:16}



static void Test_BFu16s_B_BFu16s()
{
  {
    init_simple_test("BFu16s_B_BFu16s");
    static BFu16s_B_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_B_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu16s");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu16s_B_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu16s(Test_BFu16s_B_BFu16s, "BFu16s_B_BFu16s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu17i  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu16s_B_BFu17i) C1{ Fs:16 Fc Fi:17}



static void Test_BFu16s_B_BFu17i()
{
  {
    init_simple_test("BFu16s_B_BFu17i");
    static BFu16s_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu17i");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu16s_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu17i(Test_BFu16s_B_BFu17i, "BFu16s_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu17ll  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu16s_B_BFu17ll) C1{ Fs:16 Fc FL:17}



static void Test_BFu16s_B_BFu17ll()
{
  {
    init_simple_test("BFu16s_B_BFu17ll");
    static BFu16s_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu16s_B_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu16s_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu17ll(Test_BFu16s_B_BFu17ll, "BFu16s_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu1c  {
  unsigned short v1:16;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu16s_B_BFu1c) C1{ Fs:16 Fc Fc:1}



static void Test_BFu16s_B_BFu1c()
{
  {
    init_simple_test("BFu16s_B_BFu1c");
    static BFu16s_B_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu1c");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu1c(Test_BFu16s_B_BFu1c, "BFu16s_B_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu1i  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu16s_B_BFu1i) C1{ Fs:16 Fc Fi:1}



static void Test_BFu16s_B_BFu1i()
{
  {
    init_simple_test("BFu16s_B_BFu1i");
    static BFu16s_B_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu1i");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu1i(Test_BFu16s_B_BFu1i, "BFu16s_B_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu1ll  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu16s_B_BFu1ll) C1{ Fs:16 Fc FL:1}



static void Test_BFu16s_B_BFu1ll()
{
  {
    init_simple_test("BFu16s_B_BFu1ll");
    static BFu16s_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu1ll(Test_BFu16s_B_BFu1ll, "BFu16s_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu1s  {
  unsigned short v1:16;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu16s_B_BFu1s) C1{ Fs:16 Fc Fs:1}



static void Test_BFu16s_B_BFu1s()
{
  {
    init_simple_test("BFu16s_B_BFu1s");
    static BFu16s_B_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu1s");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu16s_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu1s(Test_BFu16s_B_BFu1s, "BFu16s_B_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu31i  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu16s_B_BFu31i) C1{ Fs:16 Fc Fi:31}



static void Test_BFu16s_B_BFu31i()
{
  {
    init_simple_test("BFu16s_B_BFu31i");
    static BFu16s_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu31i");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu16s_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu31i(Test_BFu16s_B_BFu31i, "BFu16s_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu31ll  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu16s_B_BFu31ll) C1{ Fs:16 Fc FL:31}



static void Test_BFu16s_B_BFu31ll()
{
  {
    init_simple_test("BFu16s_B_BFu31ll");
    static BFu16s_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu16s_B_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu16s_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu31ll(Test_BFu16s_B_BFu31ll, "BFu16s_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu32i  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu16s_B_BFu32i) C1{ Fs:16 Fc Fi:32}



static void Test_BFu16s_B_BFu32i()
{
  {
    init_simple_test("BFu16s_B_BFu32i");
    static BFu16s_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu32i");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu16s_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu32i(Test_BFu16s_B_BFu32i, "BFu16s_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu32ll  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu16s_B_BFu32ll) C1{ Fs:16 Fc FL:32}



static void Test_BFu16s_B_BFu32ll()
{
  {
    init_simple_test("BFu16s_B_BFu32ll");
    static BFu16s_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu16s_B_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu16s_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu32ll(Test_BFu16s_B_BFu32ll, "BFu16s_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu33  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu16s_B_BFu33) C1{ Fs:16 Fc FL:33}



static void Test_BFu16s_B_BFu33()
{
  {
    init_simple_test("BFu16s_B_BFu33");
    static BFu16s_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu33");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu16s_B_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu16s_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu33(Test_BFu16s_B_BFu33, "BFu16s_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu7c  {
  unsigned short v1:16;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu16s_B_BFu7c) C1{ Fs:16 Fc Fc:7}



static void Test_BFu16s_B_BFu7c()
{
  {
    init_simple_test("BFu16s_B_BFu7c");
    static BFu16s_B_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu7c");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_B_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu7c(Test_BFu16s_B_BFu7c, "BFu16s_B_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu7i  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu16s_B_BFu7i) C1{ Fs:16 Fc Fi:7}



static void Test_BFu16s_B_BFu7i()
{
  {
    init_simple_test("BFu16s_B_BFu7i");
    static BFu16s_B_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu7i");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_B_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu7i(Test_BFu16s_B_BFu7i, "BFu16s_B_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu7ll  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu16s_B_BFu7ll) C1{ Fs:16 Fc FL:7}



static void Test_BFu16s_B_BFu7ll()
{
  {
    init_simple_test("BFu16s_B_BFu7ll");
    static BFu16s_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_B_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu7ll(Test_BFu16s_B_BFu7ll, "BFu16s_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu7s  {
  unsigned short v1:16;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu16s_B_BFu7s) C1{ Fs:16 Fc Fs:7}



static void Test_BFu16s_B_BFu7s()
{
  {
    init_simple_test("BFu16s_B_BFu7s");
    static BFu16s_B_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu7s");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu16s_B_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu16s_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu7s(Test_BFu16s_B_BFu7s, "BFu16s_B_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu8c  {
  unsigned short v1:16;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu16s_B_BFu8c) C1{ Fs:16 Fc Fc:8}



static void Test_BFu16s_B_BFu8c()
{
  {
    init_simple_test("BFu16s_B_BFu8c");
    static BFu16s_B_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu8c");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_B_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu8c(Test_BFu16s_B_BFu8c, "BFu16s_B_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu8i  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu16s_B_BFu8i) C1{ Fs:16 Fc Fi:8}



static void Test_BFu16s_B_BFu8i()
{
  {
    init_simple_test("BFu16s_B_BFu8i");
    static BFu16s_B_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu8i");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_B_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu8i(Test_BFu16s_B_BFu8i, "BFu16s_B_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu8ll  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu16s_B_BFu8ll) C1{ Fs:16 Fc FL:8}



static void Test_BFu16s_B_BFu8ll()
{
  {
    init_simple_test("BFu16s_B_BFu8ll");
    static BFu16s_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_B_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu8ll(Test_BFu16s_B_BFu8ll, "BFu16s_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu8s  {
  unsigned short v1:16;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu16s_B_BFu8s) C1{ Fs:16 Fc Fs:8}



static void Test_BFu16s_B_BFu8s()
{
  {
    init_simple_test("BFu16s_B_BFu8s");
    static BFu16s_B_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu8s");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu16s_B_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu16s_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu8s(Test_BFu16s_B_BFu8s, "BFu16s_B_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu9i  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu16s_B_BFu9i) C1{ Fs:16 Fc Fi:9}



static void Test_BFu16s_B_BFu9i()
{
  {
    init_simple_test("BFu16s_B_BFu9i");
    static BFu16s_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu9i");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_B_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu9i(Test_BFu16s_B_BFu9i, "BFu16s_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu9ll  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu16s_B_BFu9ll) C1{ Fs:16 Fc FL:9}



static void Test_BFu16s_B_BFu9ll()
{
  {
    init_simple_test("BFu16s_B_BFu9ll");
    static BFu16s_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu16s_B_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu16s_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu9ll(Test_BFu16s_B_BFu9ll, "BFu16s_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_BFu9s  {
  unsigned short v1:16;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu16s_B_BFu9s) C1{ Fs:16 Fc Fs:9}



static void Test_BFu16s_B_BFu9s()
{
  {
    init_simple_test("BFu16s_B_BFu9s");
    static BFu16s_B_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_B_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_BFu9s");
    check_field_offset(lv, v2, 2, "BFu16s_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu16s_B_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu16s_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu16s_B_BFu9s(Test_BFu16s_B_BFu9s, "BFu16s_B_BFu9s", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_C  {
  unsigned short v1:16;
  bool v2;
  char v3;
};
//SIG(1 BFu16s_B_C) C1{ Fs:16 Fc[2]}



static void Test_BFu16s_B_C()
{
  {
    init_simple_test("BFu16s_B_C");
    static BFu16s_B_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_C");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_C");
    check_field_offset(lv, v2, 2, "BFu16s_B_C.v2");
    check_field_offset(lv, v3, 3, "BFu16s_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_C(Test_BFu16s_B_C, "BFu16s_B_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_D  {
  unsigned short v1:16;
  bool v2;
  double v3;
};
//SIG(1 BFu16s_B_D) C1{ Fs:16 Fc FL}



static void Test_BFu16s_B_D()
{
  {
    init_simple_test("BFu16s_B_D");
    static BFu16s_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_D");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_D");
    check_field_offset(lv, v2, 2, "BFu16s_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_D(Test_BFu16s_B_D, "BFu16s_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_F  {
  unsigned short v1:16;
  bool v2;
  float v3;
};
//SIG(1 BFu16s_B_F) C1{ Fs:16 Fc Fi}



static void Test_BFu16s_B_F()
{
  {
    init_simple_test("BFu16s_B_F");
    static BFu16s_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_F");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_F");
    check_field_offset(lv, v2, 2, "BFu16s_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu16s_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_F(Test_BFu16s_B_F, "BFu16s_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_I  {
  unsigned short v1:16;
  bool v2;
  int v3;
};
//SIG(1 BFu16s_B_I) C1{ Fs:16 Fc Fi}



static void Test_BFu16s_B_I()
{
  {
    init_simple_test("BFu16s_B_I");
    static BFu16s_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_I");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_I");
    check_field_offset(lv, v2, 2, "BFu16s_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu16s_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_I(Test_BFu16s_B_I, "BFu16s_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_Ip  {
  unsigned short v1:16;
  bool v2;
  int *v3;
};
//SIG(1 BFu16s_B_Ip) C1{ Fs:16 Fc Fp}



static void Test_BFu16s_B_Ip()
{
  {
    init_simple_test("BFu16s_B_Ip");
    static BFu16s_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_Ip");
    check_field_offset(lv, v2, 2, "BFu16s_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_Ip(Test_BFu16s_B_Ip, "BFu16s_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_L  {
  unsigned short v1:16;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu16s_B_L) C1{ Fs:16 Fc FL}



static void Test_BFu16s_B_L()
{
  {
    init_simple_test("BFu16s_B_L");
    static BFu16s_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_L");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_L");
    check_field_offset(lv, v2, 2, "BFu16s_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_L(Test_BFu16s_B_L, "BFu16s_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_S  {
  unsigned short v1:16;
  bool v2;
  short v3;
};
//SIG(1 BFu16s_B_S) C1{ Fs:16 Fc Fs}



static void Test_BFu16s_B_S()
{
  {
    init_simple_test("BFu16s_B_S");
    static BFu16s_B_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_B_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_S");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_S");
    check_field_offset(lv, v2, 2, "BFu16s_B_S.v2");
    check_field_offset(lv, v3, 4, "BFu16s_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_S(Test_BFu16s_B_S, "BFu16s_B_S", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_Uc  {
  unsigned short v1:16;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu16s_B_Uc) C1{ Fs:16 Fc[2]}



static void Test_BFu16s_B_Uc()
{
  {
    init_simple_test("BFu16s_B_Uc");
    static BFu16s_B_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_B_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_Uc");
    check_field_offset(lv, v2, 2, "BFu16s_B_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu16s_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_Uc(Test_BFu16s_B_Uc, "BFu16s_B_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_Ui  {
  unsigned short v1:16;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu16s_B_Ui) C1{ Fs:16 Fc Fi}



static void Test_BFu16s_B_Ui()
{
  {
    init_simple_test("BFu16s_B_Ui");
    static BFu16s_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_Ui");
    check_field_offset(lv, v2, 2, "BFu16s_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu16s_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_Ui(Test_BFu16s_B_Ui, "BFu16s_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_Ul  {
  unsigned short v1:16;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu16s_B_Ul) C1{ Fs:16 Fc FL}



static void Test_BFu16s_B_Ul()
{
  {
    init_simple_test("BFu16s_B_Ul");
    static BFu16s_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu16s_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_Ul");
    check_field_offset(lv, v2, 2, "BFu16s_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_Ul(Test_BFu16s_B_Ul, "BFu16s_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_Us  {
  unsigned short v1:16;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu16s_B_Us) C1{ Fs:16 Fc Fs}



static void Test_BFu16s_B_Us()
{
  {
    init_simple_test("BFu16s_B_Us");
    static BFu16s_B_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_B_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_Us");
    check_field_offset(lv, v2, 2, "BFu16s_B_Us.v2");
    check_field_offset(lv, v3, 4, "BFu16s_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_Us(Test_BFu16s_B_Us, "BFu16s_B_Us", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_B_Vp  {
  unsigned short v1:16;
  bool v2;
  void *v3;
};
//SIG(1 BFu16s_B_Vp) C1{ Fs:16 Fc Fp}



static void Test_BFu16s_B_Vp()
{
  {
    init_simple_test("BFu16s_B_Vp");
    static BFu16s_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu16s_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_B_Vp");
    check_field_offset(lv, v2, 2, "BFu16s_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu16s_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_B_Vp(Test_BFu16s_B_Vp, "BFu16s_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu15i_B  {
  unsigned short v1:16;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu16s_BFu15i_B) C1{ Fs:16 Fi:15 Fc}



static void Test_BFu16s_BFu15i_B()
{
  {
    init_simple_test("BFu16s_BFu15i_B");
    static BFu16s_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15i_B");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu15i_B(Test_BFu16s_BFu15i_B, "BFu16s_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu15ll_B  {
  unsigned short v1:16;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu16s_BFu15ll_B) C1{ Fs:16 FL:15 Fc}



static void Test_BFu16s_BFu15ll_B()
{
  {
    init_simple_test("BFu16s_BFu15ll_B");
    static BFu16s_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15ll_B");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu15ll_B(Test_BFu16s_BFu15ll_B, "BFu16s_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu15s_B  {
  unsigned short v1:16;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu16s_BFu15s_B) C1{ Fs:16 Fs:15 Fc}



static void Test_BFu16s_BFu15s_B()
{
  {
    init_simple_test("BFu16s_BFu15s_B");
    static BFu16s_BFu15s_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu15s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu16s_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu16s_BFu15s_B");
    check_field_offset(lv, v3, 4, "BFu16s_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu15s_B(Test_BFu16s_BFu15s_B, "BFu16s_BFu15s_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu16i_B  {
  unsigned short v1:16;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu16s_BFu16i_B) C1{ Fs:16 Fi:16 Fc}



static void Test_BFu16s_BFu16i_B()
{
  {
    init_simple_test("BFu16s_BFu16i_B");
    static BFu16s_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16i_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16i_B");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu16i_B(Test_BFu16s_BFu16i_B, "BFu16s_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu16ll_B  {
  unsigned short v1:16;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu16s_BFu16ll_B) C1{ Fs:16 FL:16 Fc}



static void Test_BFu16s_BFu16ll_B()
{
  {
    init_simple_test("BFu16s_BFu16ll_B");
    static BFu16s_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16ll_B");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu16ll_B(Test_BFu16s_BFu16ll_B, "BFu16s_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu16s_B  {
  unsigned short v1:16;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu16s_BFu16s_B) C1{ Fs:16 Fs:16 Fc}



static void Test_BFu16s_BFu16s_B()
{
  {
    init_simple_test("BFu16s_BFu16s_B");
    static BFu16s_BFu16s_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu16s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu16s_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu16s_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu16s_B(Test_BFu16s_BFu16s_B, "BFu16s_BFu16s_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu17i_B  {
  unsigned short v1:16;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu16s_BFu17i_B) C1{ Fs:16 Fi:17 Fc}



static void Test_BFu16s_BFu17i_B()
{
  {
    init_simple_test("BFu16s_BFu17i_B");
    static BFu16s_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu16s_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17i_B");
    check_field_offset(lv, v3, 7, "BFu16s_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu17i_B(Test_BFu16s_BFu17i_B, "BFu16s_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu17ll_B  {
  unsigned short v1:16;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu16s_BFu17ll_B) C1{ Fs:16 FL:17 Fc}



static void Test_BFu16s_BFu17ll_B()
{
  {
    init_simple_test("BFu16s_BFu17ll_B");
    static BFu16s_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu16s_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu16s_BFu17ll_B");
    check_field_offset(lv, v3, 5, "BFu16s_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu17ll_B(Test_BFu16s_BFu17ll_B, "BFu16s_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu1c_B  {
  unsigned short v1:16;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu16s_BFu1c_B) C1{ Fs:16 Fc:1 Fc}



static void Test_BFu16s_BFu1c_B()
{
  {
    init_simple_test("BFu16s_BFu1c_B");
    static BFu16s_BFu1c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1c_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1c_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1c_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu1c_B(Test_BFu16s_BFu1c_B, "BFu16s_BFu1c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu1i_B  {
  unsigned short v1:16;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu16s_BFu1i_B) C1{ Fs:16 Fi:1 Fc}



static void Test_BFu16s_BFu1i_B()
{
  {
    init_simple_test("BFu16s_BFu1i_B");
    static BFu16s_BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1i_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1i_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu1i_B(Test_BFu16s_BFu1i_B, "BFu16s_BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu1ll_B  {
  unsigned short v1:16;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu16s_BFu1ll_B) C1{ Fs:16 FL:1 Fc}



static void Test_BFu16s_BFu1ll_B()
{
  {
    init_simple_test("BFu16s_BFu1ll_B");
    static BFu16s_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1ll_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1ll_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu1ll_B(Test_BFu16s_BFu1ll_B, "BFu16s_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu1s_B  {
  unsigned short v1:16;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu16s_BFu1s_B) C1{ Fs:16 Fs:1 Fc}



static void Test_BFu16s_BFu1s_B()
{
  {
    init_simple_test("BFu16s_BFu1s_B");
    static BFu16s_BFu1s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu1s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu1s_B");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu16s_BFu1s_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu1s_B(Test_BFu16s_BFu1s_B, "BFu16s_BFu1s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu31i_B  {
  unsigned short v1:16;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu16s_BFu31i_B) C1{ Fs:16 Fi:31 Fc}



static void Test_BFu16s_BFu31i_B()
{
  {
    init_simple_test("BFu16s_BFu31i_B");
    static BFu16s_BFu31i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu16s_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu16s_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu31i_B(Test_BFu16s_BFu31i_B, "BFu16s_BFu31i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu31ll_B  {
  unsigned short v1:16;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu16s_BFu31ll_B) C1{ Fs:16 FL:31 Fc}



static void Test_BFu16s_BFu31ll_B()
{
  {
    init_simple_test("BFu16s_BFu31ll_B");
    static BFu16s_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu16s_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu16s_BFu31ll_B");
    check_field_offset(lv, v3, 6, "BFu16s_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu31ll_B(Test_BFu16s_BFu31ll_B, "BFu16s_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu32i_B  {
  unsigned short v1:16;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu16s_BFu32i_B) C1{ Fs:16 Fi:32 Fc}



static void Test_BFu16s_BFu32i_B()
{
  {
    init_simple_test("BFu16s_BFu32i_B");
    static BFu16s_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu16s_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu16s_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu32i_B(Test_BFu16s_BFu32i_B, "BFu16s_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu32ll_B  {
  unsigned short v1:16;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu16s_BFu32ll_B) C1{ Fs:16 FL:32 Fc}



static void Test_BFu16s_BFu32ll_B()
{
  {
    init_simple_test("BFu16s_BFu32ll_B");
    static BFu16s_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu16s_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu16s_BFu32ll_B");
    check_field_offset(lv, v3, 6, "BFu16s_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu32ll_B(Test_BFu16s_BFu32ll_B, "BFu16s_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu33_B  {
  unsigned short v1:16;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu16s_BFu33_B) C1{ Fs:16 FL:33 Fc}



static void Test_BFu16s_BFu33_B()
{
  {
    init_simple_test("BFu16s_BFu33_B");
    static BFu16s_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu33_B");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu16s_BFu33_B");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu16s_BFu33_B");
    check_field_offset(lv, v3, 7, "BFu16s_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu33_B(Test_BFu16s_BFu33_B, "BFu16s_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu7c_B  {
  unsigned short v1:16;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu16s_BFu7c_B) C1{ Fs:16 Fc:7 Fc}



static void Test_BFu16s_BFu7c_B()
{
  {
    init_simple_test("BFu16s_BFu7c_B");
    static BFu16s_BFu7c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7c_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7c_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu7c_B(Test_BFu16s_BFu7c_B, "BFu16s_BFu7c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu7i_B  {
  unsigned short v1:16;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu16s_BFu7i_B) C1{ Fs:16 Fi:7 Fc}



static void Test_BFu16s_BFu7i_B()
{
  {
    init_simple_test("BFu16s_BFu7i_B");
    static BFu16s_BFu7i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7i_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu7i_B(Test_BFu16s_BFu7i_B, "BFu16s_BFu7i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu7ll_B  {
  unsigned short v1:16;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu16s_BFu7ll_B) C1{ Fs:16 FL:7 Fc}



static void Test_BFu16s_BFu7ll_B()
{
  {
    init_simple_test("BFu16s_BFu7ll_B");
    static BFu16s_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7ll_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu7ll_B(Test_BFu16s_BFu7ll_B, "BFu16s_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu7s_B  {
  unsigned short v1:16;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu16s_BFu7s_B) C1{ Fs:16 Fs:7 Fc}



static void Test_BFu16s_BFu7s_B()
{
  {
    init_simple_test("BFu16s_BFu7s_B");
    static BFu16s_BFu7s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu7s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu16s_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu16s_BFu7s_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu7s_B(Test_BFu16s_BFu7s_B, "BFu16s_BFu7s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu8c_B  {
  unsigned short v1:16;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu16s_BFu8c_B) C1{ Fs:16 Fc:8 Fc}



static void Test_BFu16s_BFu8c_B()
{
  {
    init_simple_test("BFu16s_BFu8c_B");
    static BFu16s_BFu8c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8c_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8c_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8c_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu8c_B(Test_BFu16s_BFu8c_B, "BFu16s_BFu8c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu8i_B  {
  unsigned short v1:16;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu16s_BFu8i_B) C1{ Fs:16 Fi:8 Fc}



static void Test_BFu16s_BFu8i_B()
{
  {
    init_simple_test("BFu16s_BFu8i_B");
    static BFu16s_BFu8i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8i_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu8i_B(Test_BFu16s_BFu8i_B, "BFu16s_BFu8i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu8ll_B  {
  unsigned short v1:16;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu16s_BFu8ll_B) C1{ Fs:16 FL:8 Fc}



static void Test_BFu16s_BFu8ll_B()
{
  {
    init_simple_test("BFu16s_BFu8ll_B");
    static BFu16s_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu16s_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8ll_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu8ll_B(Test_BFu16s_BFu8ll_B, "BFu16s_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu8s_B  {
  unsigned short v1:16;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu16s_BFu8s_B) C1{ Fs:16 Fs:8 Fc}



static void Test_BFu16s_BFu8s_B()
{
  {
    init_simple_test("BFu16s_BFu8s_B");
    static BFu16s_BFu8s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_BFu8s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu16s_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu16s_BFu8s_B");
    check_field_offset(lv, v3, 3, "BFu16s_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu8s_B(Test_BFu16s_BFu8s_B, "BFu16s_BFu8s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu9i_B  {
  unsigned short v1:16;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu16s_BFu9i_B) C1{ Fs:16 Fi:9 Fc}



static void Test_BFu16s_BFu9i_B()
{
  {
    init_simple_test("BFu16s_BFu9i_B");
    static BFu16s_BFu9i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9i_B");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu9i_B(Test_BFu16s_BFu9i_B, "BFu16s_BFu9i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu9ll_B  {
  unsigned short v1:16;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu16s_BFu9ll_B) C1{ Fs:16 FL:9 Fc}



static void Test_BFu16s_BFu9ll_B()
{
  {
    init_simple_test("BFu16s_BFu9ll_B");
    static BFu16s_BFu9ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu16s_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9ll_B");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu9ll_B(Test_BFu16s_BFu9ll_B, "BFu16s_BFu9ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_BFu9s_B  {
  unsigned short v1:16;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu16s_BFu9s_B) C1{ Fs:16 Fs:9 Fc}



static void Test_BFu16s_BFu9s_B()
{
  {
    init_simple_test("BFu16s_BFu9s_B");
    static BFu16s_BFu9s_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_BFu9s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu16s_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu16s_BFu9s_B");
    check_field_offset(lv, v3, 4, "BFu16s_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_BFu9s_B(Test_BFu16s_BFu9s_B, "BFu16s_BFu9s_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_C_B  {
  unsigned short v1:16;
  char v2;
  bool v3;
};
//SIG(1 BFu16s_C_B) C1{ Fs:16 Fc[2]}



static void Test_BFu16s_C_B()
{
  {
    init_simple_test("BFu16s_C_B");
    static BFu16s_C_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_C_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_C_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_C_B");
    check_field_offset(lv, v2, 2, "BFu16s_C_B.v2");
    check_field_offset(lv, v3, 3, "BFu16s_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_C_B(Test_BFu16s_C_B, "BFu16s_C_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_D_B  {
  unsigned short v1:16;
  double v2;
  bool v3;
};
//SIG(1 BFu16s_D_B) C1{ Fs:16 FL Fc}



static void Test_BFu16s_D_B()
{
  {
    init_simple_test("BFu16s_D_B");
    static BFu16s_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_D_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_D_B(Test_BFu16s_D_B, "BFu16s_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_F_B  {
  unsigned short v1:16;
  float v2;
  bool v3;
};
//SIG(1 BFu16s_F_B) C1{ Fs:16 Fi Fc}



static void Test_BFu16s_F_B()
{
  {
    init_simple_test("BFu16s_F_B");
    static BFu16s_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_F_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_F_B");
    check_field_offset(lv, v2, 4, "BFu16s_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu16s_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_F_B(Test_BFu16s_F_B, "BFu16s_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_I_B  {
  unsigned short v1:16;
  int v2;
  bool v3;
};
//SIG(1 BFu16s_I_B) C1{ Fs:16 Fi Fc}



static void Test_BFu16s_I_B()
{
  {
    init_simple_test("BFu16s_I_B");
    static BFu16s_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_I_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_I_B");
    check_field_offset(lv, v2, 4, "BFu16s_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu16s_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_I_B(Test_BFu16s_I_B, "BFu16s_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_Ip_B  {
  unsigned short v1:16;
  int *v2;
  bool v3;
};
//SIG(1 BFu16s_Ip_B) C1{ Fs:16 Fp Fc}



static void Test_BFu16s_Ip_B()
{
  {
    init_simple_test("BFu16s_Ip_B");
    static BFu16s_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_Ip_B(Test_BFu16s_Ip_B, "BFu16s_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_L_B  {
  unsigned short v1:16;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu16s_L_B) C1{ Fs:16 FL Fc}



static void Test_BFu16s_L_B()
{
  {
    init_simple_test("BFu16s_L_B");
    static BFu16s_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_L_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_L_B(Test_BFu16s_L_B, "BFu16s_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_S_B  {
  unsigned short v1:16;
  short v2;
  bool v3;
};
//SIG(1 BFu16s_S_B) C1{ Fs:16 Fs Fc}



static void Test_BFu16s_S_B()
{
  {
    init_simple_test("BFu16s_S_B");
    static BFu16s_S_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_S_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_S_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_S_B");
    check_field_offset(lv, v2, 2, "BFu16s_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu16s_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_S_B(Test_BFu16s_S_B, "BFu16s_S_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_Uc_B  {
  unsigned short v1:16;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu16s_Uc_B) C1{ Fs:16 Fc[2]}



static void Test_BFu16s_Uc_B()
{
  {
    init_simple_test("BFu16s_Uc_B");
    static BFu16s_Uc_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu16s_Uc_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Uc_B");
    check_field_offset(lv, v2, 2, "BFu16s_Uc_B.v2");
    check_field_offset(lv, v3, 3, "BFu16s_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_Uc_B(Test_BFu16s_Uc_B, "BFu16s_Uc_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_Ui_B  {
  unsigned short v1:16;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu16s_Ui_B) C1{ Fs:16 Fi Fc}



static void Test_BFu16s_Ui_B()
{
  {
    init_simple_test("BFu16s_Ui_B");
    static BFu16s_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu16s_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu16s_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ui_B");
    check_field_offset(lv, v2, 4, "BFu16s_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu16s_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_Ui_B(Test_BFu16s_Ui_B, "BFu16s_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_Ul_B  {
  unsigned short v1:16;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu16s_Ul_B) C1{ Fs:16 FL Fc}



static void Test_BFu16s_Ul_B()
{
  {
    init_simple_test("BFu16s_Ul_B");
    static BFu16s_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu16s_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu16s_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_Ul_B(Test_BFu16s_Ul_B, "BFu16s_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_Us_B  {
  unsigned short v1:16;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu16s_Us_B) C1{ Fs:16 Fs Fc}



static void Test_BFu16s_Us_B()
{
  {
    init_simple_test("BFu16s_Us_B");
    static BFu16s_Us_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu16s_Us_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu16s_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Us_B");
    check_field_offset(lv, v2, 2, "BFu16s_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu16s_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_Us_B(Test_BFu16s_Us_B, "BFu16s_Us_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu16s_Vp_B  {
  unsigned short v1:16;
  void *v2;
  bool v3;
};
//SIG(1 BFu16s_Vp_B) C1{ Fs:16 Fp Fc}



static void Test_BFu16s_Vp_B()
{
  {
    init_simple_test("BFu16s_Vp_B");
    static BFu16s_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu16s_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu16s_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 16, 1, "BFu16s_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 16, hide_ull(1LL<<15), "BFu16s_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu16s_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu16s_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu16s_Vp_B(Test_BFu16s_Vp_B, "BFu16s_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B  {
  unsigned int v1:17;
  bool v2;
};
//SIG(1 BFu17i_B) C1{ Fi:17 Fc}



static void Test_BFu17i_B()
{
  {
    init_simple_test("BFu17i_B");
    static BFu17i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B");
    check_field_offset(lv, v2, 3, "BFu17i_B.v2");
  }
}
static Arrange_To_Call_Me vBFu17i_B(Test_BFu17i_B, "BFu17i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_B  {
  unsigned int v1:17;
  bool v2;
  bool v3;
};
//SIG(1 BFu17i_B_B) C1{ Fi:17 Fc[2]}



static void Test_BFu17i_B_B()
{
  {
    init_simple_test("BFu17i_B_B");
    static BFu17i_B_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_B");
    check_field_offset(lv, v2, 3, "BFu17i_B_B.v2");
    check_field_offset(lv, v3, 4, "BFu17i_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_B(Test_BFu17i_B_B, "BFu17i_B_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu15i  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu17i_B_BFu15i) C1{ Fi:17 Fc Fi:15}



static void Test_BFu17i_B_BFu15i()
{
  {
    init_simple_test("BFu17i_B_BFu15i");
    static BFu17i_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu15i");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_B_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu15i(Test_BFu17i_B_BFu15i, "BFu17i_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu15ll  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17i_B_BFu15ll) C1{ Fi:17 Fc FL:15}



static void Test_BFu17i_B_BFu15ll()
{
  {
    init_simple_test("BFu17i_B_BFu15ll");
    static BFu17i_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu15ll");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_B_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu15ll(Test_BFu17i_B_BFu15ll, "BFu17i_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu15s  {
  unsigned int v1:17;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu17i_B_BFu15s) C1{ Fi:17 Fc Fs:15}



static void Test_BFu17i_B_BFu15s()
{
  {
    init_simple_test("BFu17i_B_BFu15s");
    static BFu17i_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu15s");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17i_B_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17i_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu15s(Test_BFu17i_B_BFu15s, "BFu17i_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu16i  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu17i_B_BFu16i) C1{ Fi:17 Fc Fi:16}



static void Test_BFu17i_B_BFu16i()
{
  {
    init_simple_test("BFu17i_B_BFu16i");
    static BFu17i_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu16i");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_B_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu16i(Test_BFu17i_B_BFu16i, "BFu17i_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu16ll  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17i_B_BFu16ll) C1{ Fi:17 Fc FL:16}



static void Test_BFu17i_B_BFu16ll()
{
  {
    init_simple_test("BFu17i_B_BFu16ll");
    static BFu17i_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu16ll");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_B_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu16ll(Test_BFu17i_B_BFu16ll, "BFu17i_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu16s  {
  unsigned int v1:17;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu17i_B_BFu16s) C1{ Fi:17 Fc Fs:16}



static void Test_BFu17i_B_BFu16s()
{
  {
    init_simple_test("BFu17i_B_BFu16s");
    static BFu17i_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu16s");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17i_B_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu16s(Test_BFu17i_B_BFu16s, "BFu17i_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu17i  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu17i_B_BFu17i) C1{ Fi:17 Fc Fi:17}



static void Test_BFu17i_B_BFu17i()
{
  {
    init_simple_test("BFu17i_B_BFu17i");
    static BFu17i_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu17i");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu17i(Test_BFu17i_B_BFu17i, "BFu17i_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu17ll  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17i_B_BFu17ll) C1{ Fi:17 Fc FL:17}



static void Test_BFu17i_B_BFu17ll()
{
  {
    init_simple_test("BFu17i_B_BFu17ll");
    static BFu17i_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu17ll");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17i_B_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu17ll(Test_BFu17i_B_BFu17ll, "BFu17i_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu1c  {
  unsigned int v1:17;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu17i_B_BFu1c) C1{ Fi:17 Fc Fc:1}



static void Test_BFu17i_B_BFu1c()
{
  {
    init_simple_test("BFu17i_B_BFu1c");
    static BFu17i_B_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu1c");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu1c(Test_BFu17i_B_BFu1c, "BFu17i_B_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu1i  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu17i_B_BFu1i) C1{ Fi:17 Fc Fi:1}



static void Test_BFu17i_B_BFu1i()
{
  {
    init_simple_test("BFu17i_B_BFu1i");
    static BFu17i_B_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu1i");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu1i(Test_BFu17i_B_BFu1i, "BFu17i_B_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu1ll  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17i_B_BFu1ll) C1{ Fi:17 Fc FL:1}



static void Test_BFu17i_B_BFu1ll()
{
  {
    init_simple_test("BFu17i_B_BFu1ll");
    static BFu17i_B_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu1ll");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu1ll(Test_BFu17i_B_BFu1ll, "BFu17i_B_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu1s  {
  unsigned int v1:17;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu17i_B_BFu1s) C1{ Fi:17 Fc Fs:1}



static void Test_BFu17i_B_BFu1s()
{
  {
    init_simple_test("BFu17i_B_BFu1s");
    static BFu17i_B_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu1s");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17i_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu1s(Test_BFu17i_B_BFu1s, "BFu17i_B_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu31i  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu17i_B_BFu31i) C1{ Fi:17 Fc Fi:31}



static void Test_BFu17i_B_BFu31i()
{
  {
    init_simple_test("BFu17i_B_BFu31i");
    static BFu17i_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu31i");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu31i(Test_BFu17i_B_BFu31i, "BFu17i_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu31ll  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17i_B_BFu31ll) C1{ Fi:17 Fc FL:31}



static void Test_BFu17i_B_BFu31ll()
{
  {
    init_simple_test("BFu17i_B_BFu31ll");
    static BFu17i_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu31ll");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17i_B_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu31ll(Test_BFu17i_B_BFu31ll, "BFu17i_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu32i  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu17i_B_BFu32i) C1{ Fi:17 Fc Fi:32}



static void Test_BFu17i_B_BFu32i()
{
  {
    init_simple_test("BFu17i_B_BFu32i");
    static BFu17i_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu32i");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu32i(Test_BFu17i_B_BFu32i, "BFu17i_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu32ll  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17i_B_BFu32ll) C1{ Fi:17 Fc FL:32}



static void Test_BFu17i_B_BFu32ll()
{
  {
    init_simple_test("BFu17i_B_BFu32ll");
    static BFu17i_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu32ll");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17i_B_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu32ll(Test_BFu17i_B_BFu32ll, "BFu17i_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu33  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17i_B_BFu33) C1{ Fi:17 Fc FL:33}



static void Test_BFu17i_B_BFu33()
{
  {
    init_simple_test("BFu17i_B_BFu33");
    static BFu17i_B_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu33");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17i_B_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17i_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu33(Test_BFu17i_B_BFu33, "BFu17i_B_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu7c  {
  unsigned int v1:17;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu17i_B_BFu7c) C1{ Fi:17 Fc Fc:7}



static void Test_BFu17i_B_BFu7c()
{
  {
    init_simple_test("BFu17i_B_BFu7c");
    static BFu17i_B_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu7c");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_B_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu7c(Test_BFu17i_B_BFu7c, "BFu17i_B_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu7i  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu17i_B_BFu7i) C1{ Fi:17 Fc Fi:7}



static void Test_BFu17i_B_BFu7i()
{
  {
    init_simple_test("BFu17i_B_BFu7i");
    static BFu17i_B_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu7i");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_B_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu7i(Test_BFu17i_B_BFu7i, "BFu17i_B_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu7ll  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17i_B_BFu7ll) C1{ Fi:17 Fc FL:7}



static void Test_BFu17i_B_BFu7ll()
{
  {
    init_simple_test("BFu17i_B_BFu7ll");
    static BFu17i_B_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu7ll");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_B_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu7ll(Test_BFu17i_B_BFu7ll, "BFu17i_B_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu7s  {
  unsigned int v1:17;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu17i_B_BFu7s) C1{ Fi:17 Fc Fs:7}



static void Test_BFu17i_B_BFu7s()
{
  {
    init_simple_test("BFu17i_B_BFu7s");
    static BFu17i_B_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu7s");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17i_B_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17i_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu7s(Test_BFu17i_B_BFu7s, "BFu17i_B_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu8c  {
  unsigned int v1:17;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu17i_B_BFu8c) C1{ Fi:17 Fc Fc:8}



static void Test_BFu17i_B_BFu8c()
{
  {
    init_simple_test("BFu17i_B_BFu8c");
    static BFu17i_B_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu8c");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_B_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu8c(Test_BFu17i_B_BFu8c, "BFu17i_B_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu8i  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu17i_B_BFu8i) C1{ Fi:17 Fc Fi:8}



static void Test_BFu17i_B_BFu8i()
{
  {
    init_simple_test("BFu17i_B_BFu8i");
    static BFu17i_B_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu8i");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_B_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu8i(Test_BFu17i_B_BFu8i, "BFu17i_B_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu8ll  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17i_B_BFu8ll) C1{ Fi:17 Fc FL:8}



static void Test_BFu17i_B_BFu8ll()
{
  {
    init_simple_test("BFu17i_B_BFu8ll");
    static BFu17i_B_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu8ll");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_B_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu8ll(Test_BFu17i_B_BFu8ll, "BFu17i_B_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu8s  {
  unsigned int v1:17;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu17i_B_BFu8s) C1{ Fi:17 Fc Fs:8}



static void Test_BFu17i_B_BFu8s()
{
  {
    init_simple_test("BFu17i_B_BFu8s");
    static BFu17i_B_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu8s");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17i_B_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17i_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu8s(Test_BFu17i_B_BFu8s, "BFu17i_B_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu9i  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu17i_B_BFu9i) C1{ Fi:17 Fc Fi:9}



static void Test_BFu17i_B_BFu9i()
{
  {
    init_simple_test("BFu17i_B_BFu9i");
    static BFu17i_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu9i");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_B_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu9i(Test_BFu17i_B_BFu9i, "BFu17i_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu9ll  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17i_B_BFu9ll) C1{ Fi:17 Fc FL:9}



static void Test_BFu17i_B_BFu9ll()
{
  {
    init_simple_test("BFu17i_B_BFu9ll");
    static BFu17i_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu9ll");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_B_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu9ll(Test_BFu17i_B_BFu9ll, "BFu17i_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_BFu9s  {
  unsigned int v1:17;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu17i_B_BFu9s) C1{ Fi:17 Fc Fs:9}



static void Test_BFu17i_B_BFu9s()
{
  {
    init_simple_test("BFu17i_B_BFu9s");
    static BFu17i_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_BFu9s");
    check_field_offset(lv, v2, 3, "BFu17i_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17i_B_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17i_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu17i_B_BFu9s(Test_BFu17i_B_BFu9s, "BFu17i_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_C  {
  unsigned int v1:17;
  bool v2;
  char v3;
};
//SIG(1 BFu17i_B_C) C1{ Fi:17 Fc[2]}



static void Test_BFu17i_B_C()
{
  {
    init_simple_test("BFu17i_B_C");
    static BFu17i_B_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_C");
    check_field_offset(lv, v2, 3, "BFu17i_B_C.v2");
    check_field_offset(lv, v3, 4, "BFu17i_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_C(Test_BFu17i_B_C, "BFu17i_B_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_D  {
  unsigned int v1:17;
  bool v2;
  double v3;
};
//SIG(1 BFu17i_B_D) C1{ Fi:17 Fc FL}



static void Test_BFu17i_B_D()
{
  {
    init_simple_test("BFu17i_B_D");
    static BFu17i_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_D");
    check_field_offset(lv, v2, 3, "BFu17i_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_D(Test_BFu17i_B_D, "BFu17i_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_F  {
  unsigned int v1:17;
  bool v2;
  float v3;
};
//SIG(1 BFu17i_B_F) C1{ Fi:17 Fc Fi}



static void Test_BFu17i_B_F()
{
  {
    init_simple_test("BFu17i_B_F");
    static BFu17i_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_F");
    check_field_offset(lv, v2, 3, "BFu17i_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu17i_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_F(Test_BFu17i_B_F, "BFu17i_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_I  {
  unsigned int v1:17;
  bool v2;
  int v3;
};
//SIG(1 BFu17i_B_I) C1{ Fi:17 Fc Fi}



static void Test_BFu17i_B_I()
{
  {
    init_simple_test("BFu17i_B_I");
    static BFu17i_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_I");
    check_field_offset(lv, v2, 3, "BFu17i_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu17i_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_I(Test_BFu17i_B_I, "BFu17i_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_Ip  {
  unsigned int v1:17;
  bool v2;
  int *v3;
};
//SIG(1 BFu17i_B_Ip) C1{ Fi:17 Fc Fp}



static void Test_BFu17i_B_Ip()
{
  {
    init_simple_test("BFu17i_B_Ip");
    static BFu17i_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_Ip");
    check_field_offset(lv, v2, 3, "BFu17i_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_Ip(Test_BFu17i_B_Ip, "BFu17i_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_L  {
  unsigned int v1:17;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu17i_B_L) C1{ Fi:17 Fc FL}



static void Test_BFu17i_B_L()
{
  {
    init_simple_test("BFu17i_B_L");
    static BFu17i_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_L");
    check_field_offset(lv, v2, 3, "BFu17i_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_L(Test_BFu17i_B_L, "BFu17i_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_S  {
  unsigned int v1:17;
  bool v2;
  short v3;
};
//SIG(1 BFu17i_B_S) C1{ Fi:17 Fc Fs}



static void Test_BFu17i_B_S()
{
  {
    init_simple_test("BFu17i_B_S");
    static BFu17i_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_S");
    check_field_offset(lv, v2, 3, "BFu17i_B_S.v2");
    check_field_offset(lv, v3, 4, "BFu17i_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_S(Test_BFu17i_B_S, "BFu17i_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_Uc  {
  unsigned int v1:17;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu17i_B_Uc) C1{ Fi:17 Fc[2]}



static void Test_BFu17i_B_Uc()
{
  {
    init_simple_test("BFu17i_B_Uc");
    static BFu17i_B_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_Uc");
    check_field_offset(lv, v2, 3, "BFu17i_B_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu17i_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_Uc(Test_BFu17i_B_Uc, "BFu17i_B_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_Ui  {
  unsigned int v1:17;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu17i_B_Ui) C1{ Fi:17 Fc Fi}



static void Test_BFu17i_B_Ui()
{
  {
    init_simple_test("BFu17i_B_Ui");
    static BFu17i_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_Ui");
    check_field_offset(lv, v2, 3, "BFu17i_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu17i_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_Ui(Test_BFu17i_B_Ui, "BFu17i_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_Ul  {
  unsigned int v1:17;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu17i_B_Ul) C1{ Fi:17 Fc FL}



static void Test_BFu17i_B_Ul()
{
  {
    init_simple_test("BFu17i_B_Ul");
    static BFu17i_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17i_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_Ul");
    check_field_offset(lv, v2, 3, "BFu17i_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_Ul(Test_BFu17i_B_Ul, "BFu17i_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_Us  {
  unsigned int v1:17;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu17i_B_Us) C1{ Fi:17 Fc Fs}



static void Test_BFu17i_B_Us()
{
  {
    init_simple_test("BFu17i_B_Us");
    static BFu17i_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_B_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_Us");
    check_field_offset(lv, v2, 3, "BFu17i_B_Us.v2");
    check_field_offset(lv, v3, 4, "BFu17i_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_Us(Test_BFu17i_B_Us, "BFu17i_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_B_Vp  {
  unsigned int v1:17;
  bool v2;
  void *v3;
};
//SIG(1 BFu17i_B_Vp) C1{ Fi:17 Fc Fp}



static void Test_BFu17i_B_Vp()
{
  {
    init_simple_test("BFu17i_B_Vp");
    static BFu17i_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17i_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_B_Vp");
    check_field_offset(lv, v2, 3, "BFu17i_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17i_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_B_Vp(Test_BFu17i_B_Vp, "BFu17i_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu15i_B  {
  unsigned int v1:17;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu17i_BFu15i_B) C1{ Fi:17 Fi:15 Fc}



static void Test_BFu17i_BFu15i_B()
{
  {
    init_simple_test("BFu17i_BFu15i_B");
    static BFu17i_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15i_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu15i_B(Test_BFu17i_BFu15i_B, "BFu17i_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu15ll_B  {
  unsigned int v1:17;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu17i_BFu15ll_B) C1{ Fi:17 FL:15 Fc}



static void Test_BFu17i_BFu15ll_B()
{
  {
    init_simple_test("BFu17i_BFu15ll_B");
    static BFu17i_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15ll_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu15ll_B(Test_BFu17i_BFu15ll_B, "BFu17i_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu15s_B  {
  unsigned int v1:17;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu17i_BFu15s_B) C1{ Fi:17 Fs:15 Fc}



static void Test_BFu17i_BFu15s_B()
{
  {
    init_simple_test("BFu17i_BFu15s_B");
    static BFu17i_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu15s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17i_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17i_BFu15s_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu15s_B(Test_BFu17i_BFu15s_B, "BFu17i_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu16i_B  {
  unsigned int v1:17;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu17i_BFu16i_B) C1{ Fi:17 Fi:16 Fc}



static void Test_BFu17i_BFu16i_B()
{
  {
    init_simple_test("BFu17i_BFu16i_B");
    static BFu17i_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16i_B");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu16i_B(Test_BFu17i_BFu16i_B, "BFu17i_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu16ll_B  {
  unsigned int v1:17;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu17i_BFu16ll_B) C1{ Fi:17 FL:16 Fc}



static void Test_BFu17i_BFu16ll_B()
{
  {
    init_simple_test("BFu17i_BFu16ll_B");
    static BFu17i_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17i_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17i_BFu16ll_B");
    check_field_offset(lv, v3, 5, "BFu17i_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu16ll_B(Test_BFu17i_BFu16ll_B, "BFu17i_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu16s_B  {
  unsigned int v1:17;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu17i_BFu16s_B) C1{ Fi:17 Fs:16 Fc}



static void Test_BFu17i_BFu16s_B()
{
  {
    init_simple_test("BFu17i_BFu16s_B");
    static BFu17i_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu16s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17i_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17i_BFu16s_B");
    check_field_offset(lv, v3, 6, "BFu17i_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu16s_B(Test_BFu17i_BFu16s_B, "BFu17i_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu17i_B  {
  unsigned int v1:17;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu17i_BFu17i_B) C1{ Fi:17 Fi:17 Fc}



static void Test_BFu17i_BFu17i_B()
{
  {
    init_simple_test("BFu17i_BFu17i_B");
    static BFu17i_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17i_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17i_B");
    check_field_offset(lv, v3, 7, "BFu17i_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu17i_B(Test_BFu17i_BFu17i_B, "BFu17i_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu17ll_B  {
  unsigned int v1:17;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu17i_BFu17ll_B) C1{ Fi:17 FL:17 Fc}



static void Test_BFu17i_BFu17ll_B()
{
  {
    init_simple_test("BFu17i_BFu17ll_B");
    static BFu17i_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17i_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17i_BFu17ll_B");
    check_field_offset(lv, v3, 5, "BFu17i_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu17ll_B(Test_BFu17i_BFu17ll_B, "BFu17i_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu1c_B  {
  unsigned int v1:17;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu17i_BFu1c_B) C1{ Fi:17 Fc:1 Fc}



static void Test_BFu17i_BFu1c_B()
{
  {
    init_simple_test("BFu17i_BFu1c_B");
    static BFu17i_BFu1c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1c_B");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1c_B");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu1c_B(Test_BFu17i_BFu1c_B, "BFu17i_BFu1c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu1i_B  {
  unsigned int v1:17;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu17i_BFu1i_B) C1{ Fi:17 Fi:1 Fc}



static void Test_BFu17i_BFu1i_B()
{
  {
    init_simple_test("BFu17i_BFu1i_B");
    static BFu17i_BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1i_B");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1i_B");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu1i_B(Test_BFu17i_BFu1i_B, "BFu17i_BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu1ll_B  {
  unsigned int v1:17;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu17i_BFu1ll_B) C1{ Fi:17 FL:1 Fc}



static void Test_BFu17i_BFu1ll_B()
{
  {
    init_simple_test("BFu17i_BFu1ll_B");
    static BFu17i_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1ll_B");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1ll_B");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu1ll_B(Test_BFu17i_BFu1ll_B, "BFu17i_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu1s_B  {
  unsigned int v1:17;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu17i_BFu1s_B) C1{ Fi:17 Fs:1 Fc}



static void Test_BFu17i_BFu1s_B()
{
  {
    init_simple_test("BFu17i_BFu1s_B");
    static BFu17i_BFu1s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu1s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu1s_B");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17i_BFu1s_B");
    check_field_offset(lv, v3, 3, "BFu17i_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu1s_B(Test_BFu17i_BFu1s_B, "BFu17i_BFu1s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu31i_B  {
  unsigned int v1:17;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu17i_BFu31i_B) C1{ Fi:17 Fi:31 Fc}



static void Test_BFu17i_BFu31i_B()
{
  {
    init_simple_test("BFu17i_BFu31i_B");
    static BFu17i_BFu31i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17i_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu17i_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu31i_B(Test_BFu17i_BFu31i_B, "BFu17i_BFu31i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu31ll_B  {
  unsigned int v1:17;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu17i_BFu31ll_B) C1{ Fi:17 FL:31 Fc}



static void Test_BFu17i_BFu31ll_B()
{
  {
    init_simple_test("BFu17i_BFu31ll_B");
    static BFu17i_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17i_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17i_BFu31ll_B");
    check_field_offset(lv, v3, 6, "BFu17i_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu31ll_B(Test_BFu17i_BFu31ll_B, "BFu17i_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu32i_B  {
  unsigned int v1:17;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu17i_BFu32i_B) C1{ Fi:17 Fi:32 Fc}



static void Test_BFu17i_BFu32i_B()
{
  {
    init_simple_test("BFu17i_BFu32i_B");
    static BFu17i_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17i_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu17i_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu32i_B(Test_BFu17i_BFu32i_B, "BFu17i_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu32ll_B  {
  unsigned int v1:17;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu17i_BFu32ll_B) C1{ Fi:17 FL:32 Fc}



static void Test_BFu17i_BFu32ll_B()
{
  {
    init_simple_test("BFu17i_BFu32ll_B");
    static BFu17i_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17i_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17i_BFu32ll_B");
    check_field_offset(lv, v3, 7, "BFu17i_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu32ll_B(Test_BFu17i_BFu32ll_B, "BFu17i_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu33_B  {
  unsigned int v1:17;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu17i_BFu33_B) C1{ Fi:17 FL:33 Fc}



static void Test_BFu17i_BFu33_B()
{
  {
    init_simple_test("BFu17i_BFu33_B");
    static BFu17i_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu33_B");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17i_BFu33_B");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17i_BFu33_B");
    check_field_offset(lv, v3, 7, "BFu17i_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu33_B(Test_BFu17i_BFu33_B, "BFu17i_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu7c_B  {
  unsigned int v1:17;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu17i_BFu7c_B) C1{ Fi:17 Fc:7 Fc}



static void Test_BFu17i_BFu7c_B()
{
  {
    init_simple_test("BFu17i_BFu7c_B");
    static BFu17i_BFu7c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7c_B");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu7c_B(Test_BFu17i_BFu7c_B, "BFu17i_BFu7c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu7i_B  {
  unsigned int v1:17;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu17i_BFu7i_B) C1{ Fi:17 Fi:7 Fc}



static void Test_BFu17i_BFu7i_B()
{
  {
    init_simple_test("BFu17i_BFu7i_B");
    static BFu17i_BFu7i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7i_B");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu7i_B(Test_BFu17i_BFu7i_B, "BFu17i_BFu7i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu7ll_B  {
  unsigned int v1:17;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu17i_BFu7ll_B) C1{ Fi:17 FL:7 Fc}



static void Test_BFu17i_BFu7ll_B()
{
  {
    init_simple_test("BFu17i_BFu7ll_B");
    static BFu17i_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17i_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7ll_B");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu7ll_B(Test_BFu17i_BFu7ll_B, "BFu17i_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu7s_B  {
  unsigned int v1:17;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu17i_BFu7s_B) C1{ Fi:17 Fs:7 Fc}



static void Test_BFu17i_BFu7s_B()
{
  {
    init_simple_test("BFu17i_BFu7s_B");
    static BFu17i_BFu7s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu17i_BFu7s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17i_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17i_BFu7s_B");
    check_field_offset(lv, v3, 3, "BFu17i_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu7s_B(Test_BFu17i_BFu7s_B, "BFu17i_BFu7s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu8c_B  {
  unsigned int v1:17;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu17i_BFu8c_B) C1{ Fi:17 Fc:8 Fc}



static void Test_BFu17i_BFu8c_B()
{
  {
    init_simple_test("BFu17i_BFu8c_B");
    static BFu17i_BFu8c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8c_B");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17i_BFu8c_B");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17i_BFu8c_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu8c_B(Test_BFu17i_BFu8c_B, "BFu17i_BFu8c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu8i_B  {
  unsigned int v1:17;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu17i_BFu8i_B) C1{ Fi:17 Fi:8 Fc}



static void Test_BFu17i_BFu8i_B()
{
  {
    init_simple_test("BFu17i_BFu8i_B");
    static BFu17i_BFu8i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8i_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu8i_B(Test_BFu17i_BFu8i_B, "BFu17i_BFu8i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu8ll_B  {
  unsigned int v1:17;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu17i_BFu8ll_B) C1{ Fi:17 FL:8 Fc}



static void Test_BFu17i_BFu8ll_B()
{
  {
    init_simple_test("BFu17i_BFu8ll_B");
    static BFu17i_BFu8ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8ll_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu8ll_B(Test_BFu17i_BFu8ll_B, "BFu17i_BFu8ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu8s_B  {
  unsigned int v1:17;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu17i_BFu8s_B) C1{ Fi:17 Fs:8 Fc}



static void Test_BFu17i_BFu8s_B()
{
  {
    init_simple_test("BFu17i_BFu8s_B");
    static BFu17i_BFu8s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu8s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17i_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17i_BFu8s_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu8s_B(Test_BFu17i_BFu8s_B, "BFu17i_BFu8s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu9i_B  {
  unsigned int v1:17;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu17i_BFu9i_B) C1{ Fi:17 Fi:9 Fc}



static void Test_BFu17i_BFu9i_B()
{
  {
    init_simple_test("BFu17i_BFu9i_B");
    static BFu17i_BFu9i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9i_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu9i_B(Test_BFu17i_BFu9i_B, "BFu17i_BFu9i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu9ll_B  {
  unsigned int v1:17;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu17i_BFu9ll_B) C1{ Fi:17 FL:9 Fc}



static void Test_BFu17i_BFu9ll_B()
{
  {
    init_simple_test("BFu17i_BFu9ll_B");
    static BFu17i_BFu9ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9ll_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu9ll_B(Test_BFu17i_BFu9ll_B, "BFu17i_BFu9ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_BFu9s_B  {
  unsigned int v1:17;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu17i_BFu9s_B) C1{ Fi:17 Fs:9 Fc}



static void Test_BFu17i_BFu9s_B()
{
  {
    init_simple_test("BFu17i_BFu9s_B");
    static BFu17i_BFu9s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_BFu9s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17i_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17i_BFu9s_B");
    check_field_offset(lv, v3, 4, "BFu17i_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_BFu9s_B(Test_BFu17i_BFu9s_B, "BFu17i_BFu9s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_C_B  {
  unsigned int v1:17;
  char v2;
  bool v3;
};
//SIG(1 BFu17i_C_B) C1{ Fi:17 Fc[2]}



static void Test_BFu17i_C_B()
{
  {
    init_simple_test("BFu17i_C_B");
    static BFu17i_C_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_C_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_C_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_C_B");
    check_field_offset(lv, v2, 3, "BFu17i_C_B.v2");
    check_field_offset(lv, v3, 4, "BFu17i_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_C_B(Test_BFu17i_C_B, "BFu17i_C_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_D_B  {
  unsigned int v1:17;
  double v2;
  bool v3;
};
//SIG(1 BFu17i_D_B) C1{ Fi:17 FL Fc}



static void Test_BFu17i_D_B()
{
  {
    init_simple_test("BFu17i_D_B");
    static BFu17i_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_D_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_D_B(Test_BFu17i_D_B, "BFu17i_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_F_B  {
  unsigned int v1:17;
  float v2;
  bool v3;
};
//SIG(1 BFu17i_F_B) C1{ Fi:17 Fi Fc}



static void Test_BFu17i_F_B()
{
  {
    init_simple_test("BFu17i_F_B");
    static BFu17i_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_F_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_F_B");
    check_field_offset(lv, v2, 4, "BFu17i_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu17i_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_F_B(Test_BFu17i_F_B, "BFu17i_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_I_B  {
  unsigned int v1:17;
  int v2;
  bool v3;
};
//SIG(1 BFu17i_I_B) C1{ Fi:17 Fi Fc}



static void Test_BFu17i_I_B()
{
  {
    init_simple_test("BFu17i_I_B");
    static BFu17i_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_I_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_I_B");
    check_field_offset(lv, v2, 4, "BFu17i_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu17i_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_I_B(Test_BFu17i_I_B, "BFu17i_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_Ip_B  {
  unsigned int v1:17;
  int *v2;
  bool v3;
};
//SIG(1 BFu17i_Ip_B) C1{ Fi:17 Fp Fc}



static void Test_BFu17i_Ip_B()
{
  {
    init_simple_test("BFu17i_Ip_B");
    static BFu17i_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_Ip_B(Test_BFu17i_Ip_B, "BFu17i_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_L_B  {
  unsigned int v1:17;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu17i_L_B) C1{ Fi:17 FL Fc}



static void Test_BFu17i_L_B()
{
  {
    init_simple_test("BFu17i_L_B");
    static BFu17i_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_L_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_L_B(Test_BFu17i_L_B, "BFu17i_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_S_B  {
  unsigned int v1:17;
  short v2;
  bool v3;
};
//SIG(1 BFu17i_S_B) C1{ Fi:17 Fs Fc}



static void Test_BFu17i_S_B()
{
  {
    init_simple_test("BFu17i_S_B");
    static BFu17i_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_S_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_S_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_S_B");
    check_field_offset(lv, v2, 4, "BFu17i_S_B.v2");
    check_field_offset(lv, v3, 6, "BFu17i_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_S_B(Test_BFu17i_S_B, "BFu17i_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_Uc_B  {
  unsigned int v1:17;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu17i_Uc_B) C1{ Fi:17 Fc[2]}



static void Test_BFu17i_Uc_B()
{
  {
    init_simple_test("BFu17i_Uc_B");
    static BFu17i_Uc_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Uc_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Uc_B");
    check_field_offset(lv, v2, 3, "BFu17i_Uc_B.v2");
    check_field_offset(lv, v3, 4, "BFu17i_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_Uc_B(Test_BFu17i_Uc_B, "BFu17i_Uc_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_Ui_B  {
  unsigned int v1:17;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu17i_Ui_B) C1{ Fi:17 Fi Fc}



static void Test_BFu17i_Ui_B()
{
  {
    init_simple_test("BFu17i_Ui_B");
    static BFu17i_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu17i_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ui_B");
    check_field_offset(lv, v2, 4, "BFu17i_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu17i_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_Ui_B(Test_BFu17i_Ui_B, "BFu17i_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_Ul_B  {
  unsigned int v1:17;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu17i_Ul_B) C1{ Fi:17 FL Fc}



static void Test_BFu17i_Ul_B()
{
  {
    init_simple_test("BFu17i_Ul_B");
    static BFu17i_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17i_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17i_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_Ul_B(Test_BFu17i_Ul_B, "BFu17i_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_Us_B  {
  unsigned int v1:17;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu17i_Us_B) C1{ Fi:17 Fs Fc}



static void Test_BFu17i_Us_B()
{
  {
    init_simple_test("BFu17i_Us_B");
    static BFu17i_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17i_Us_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu17i_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Us_B");
    check_field_offset(lv, v2, 4, "BFu17i_Us_B.v2");
    check_field_offset(lv, v3, 6, "BFu17i_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_Us_B(Test_BFu17i_Us_B, "BFu17i_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17i_Vp_B  {
  unsigned int v1:17;
  void *v2;
  bool v3;
};
//SIG(1 BFu17i_Vp_B) C1{ Fi:17 Fp Fc}



static void Test_BFu17i_Vp_B()
{
  {
    init_simple_test("BFu17i_Vp_B");
    static BFu17i_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17i_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17i_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17i_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17i_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17i_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17i_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17i_Vp_B(Test_BFu17i_Vp_B, "BFu17i_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B  {
  __tsu64 v1:17;
  bool v2;
};
//SIG(1 BFu17ll_B) C1{ FL:17 Fc}



static void Test_BFu17ll_B()
{
  {
    init_simple_test("BFu17ll_B");
    static BFu17ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B");
    check_field_offset(lv, v2, 3, "BFu17ll_B.v2");
  }
}
static Arrange_To_Call_Me vBFu17ll_B(Test_BFu17ll_B, "BFu17ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_B  {
  __tsu64 v1:17;
  bool v2;
  bool v3;
};
//SIG(1 BFu17ll_B_B) C1{ FL:17 Fc[2]}



static void Test_BFu17ll_B_B()
{
  {
    init_simple_test("BFu17ll_B_B");
    static BFu17ll_B_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_B");
    check_field_offset(lv, v2, 3, "BFu17ll_B_B.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_B(Test_BFu17ll_B_B, "BFu17ll_B_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu15i  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu17ll_B_BFu15i) C1{ FL:17 Fc Fi:15}



static void Test_BFu17ll_B_BFu15i()
{
  {
    init_simple_test("BFu17ll_B_BFu15i");
    static BFu17ll_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu15i");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_B_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu15i(Test_BFu17ll_B_BFu15i, "BFu17ll_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu15ll  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu17ll_B_BFu15ll) C1{ FL:17 Fc FL:15}



static void Test_BFu17ll_B_BFu15ll()
{
  {
    init_simple_test("BFu17ll_B_BFu15ll");
    static BFu17ll_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu15ll");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_B_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu15ll(Test_BFu17ll_B_BFu15ll, "BFu17ll_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu15s  {
  __tsu64 v1:17;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu17ll_B_BFu15s) C1{ FL:17 Fc Fs:15}



static void Test_BFu17ll_B_BFu15s()
{
  {
    init_simple_test("BFu17ll_B_BFu15s");
    static BFu17ll_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu15s");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu17ll_B_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu17ll_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu15s(Test_BFu17ll_B_BFu15s, "BFu17ll_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu16i  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu17ll_B_BFu16i) C1{ FL:17 Fc Fi:16}



static void Test_BFu17ll_B_BFu16i()
{
  {
    init_simple_test("BFu17ll_B_BFu16i");
    static BFu17ll_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu16i");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_B_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu16i(Test_BFu17ll_B_BFu16i, "BFu17ll_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu16ll  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu17ll_B_BFu16ll) C1{ FL:17 Fc FL:16}



static void Test_BFu17ll_B_BFu16ll()
{
  {
    init_simple_test("BFu17ll_B_BFu16ll");
    static BFu17ll_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu16ll");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_B_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu16ll(Test_BFu17ll_B_BFu16ll, "BFu17ll_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu16s  {
  __tsu64 v1:17;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu17ll_B_BFu16s) C1{ FL:17 Fc Fs:16}



static void Test_BFu17ll_B_BFu16s()
{
  {
    init_simple_test("BFu17ll_B_BFu16s");
    static BFu17ll_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu16s");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu17ll_B_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu16s(Test_BFu17ll_B_BFu16s, "BFu17ll_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu17i  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu17ll_B_BFu17i) C1{ FL:17 Fc Fi:17}



static void Test_BFu17ll_B_BFu17i()
{
  {
    init_simple_test("BFu17ll_B_BFu17i");
    static BFu17ll_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu17i");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu17i(Test_BFu17ll_B_BFu17i, "BFu17ll_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu17ll  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu17ll_B_BFu17ll) C1{ FL:17 Fc FL:17}



static void Test_BFu17ll_B_BFu17ll()
{
  {
    init_simple_test("BFu17ll_B_BFu17ll");
    static BFu17ll_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu17ll");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu17ll_B_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu17ll(Test_BFu17ll_B_BFu17ll, "BFu17ll_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu1c  {
  __tsu64 v1:17;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu17ll_B_BFu1c) C1{ FL:17 Fc Fc:1}



static void Test_BFu17ll_B_BFu1c()
{
  {
    init_simple_test("BFu17ll_B_BFu1c");
    static BFu17ll_B_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu1c");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu1c(Test_BFu17ll_B_BFu1c, "BFu17ll_B_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu1i  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu17ll_B_BFu1i) C1{ FL:17 Fc Fi:1}



static void Test_BFu17ll_B_BFu1i()
{
  {
    init_simple_test("BFu17ll_B_BFu1i");
    static BFu17ll_B_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu1i");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu1i(Test_BFu17ll_B_BFu1i, "BFu17ll_B_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu1ll  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu17ll_B_BFu1ll) C1{ FL:17 Fc FL:1}



static void Test_BFu17ll_B_BFu1ll()
{
  {
    init_simple_test("BFu17ll_B_BFu1ll");
    static BFu17ll_B_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu1ll");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu1ll(Test_BFu17ll_B_BFu1ll, "BFu17ll_B_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu1s  {
  __tsu64 v1:17;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu17ll_B_BFu1s) C1{ FL:17 Fc Fs:1}



static void Test_BFu17ll_B_BFu1s()
{
  {
    init_simple_test("BFu17ll_B_BFu1s");
    static BFu17ll_B_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu1s");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu17ll_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu1s(Test_BFu17ll_B_BFu1s, "BFu17ll_B_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu31i  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu17ll_B_BFu31i) C1{ FL:17 Fc Fi:31}



static void Test_BFu17ll_B_BFu31i()
{
  {
    init_simple_test("BFu17ll_B_BFu31i");
    static BFu17ll_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu31i");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu31i(Test_BFu17ll_B_BFu31i, "BFu17ll_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu31ll  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu17ll_B_BFu31ll) C1{ FL:17 Fc FL:31}



static void Test_BFu17ll_B_BFu31ll()
{
  {
    init_simple_test("BFu17ll_B_BFu31ll");
    static BFu17ll_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu31ll");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu17ll_B_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu31ll(Test_BFu17ll_B_BFu31ll, "BFu17ll_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu32i  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu17ll_B_BFu32i) C1{ FL:17 Fc Fi:32}



static void Test_BFu17ll_B_BFu32i()
{
  {
    init_simple_test("BFu17ll_B_BFu32i");
    static BFu17ll_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu32i");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu32i(Test_BFu17ll_B_BFu32i, "BFu17ll_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu32ll  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu17ll_B_BFu32ll) C1{ FL:17 Fc FL:32}



static void Test_BFu17ll_B_BFu32ll()
{
  {
    init_simple_test("BFu17ll_B_BFu32ll");
    static BFu17ll_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu32ll");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu17ll_B_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu32ll(Test_BFu17ll_B_BFu32ll, "BFu17ll_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu33  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu17ll_B_BFu33) C1{ FL:17 Fc FL:33}



static void Test_BFu17ll_B_BFu33()
{
  {
    init_simple_test("BFu17ll_B_BFu33");
    static BFu17ll_B_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu33");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu17ll_B_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu17ll_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu33(Test_BFu17ll_B_BFu33, "BFu17ll_B_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu7c  {
  __tsu64 v1:17;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu17ll_B_BFu7c) C1{ FL:17 Fc Fc:7}



static void Test_BFu17ll_B_BFu7c()
{
  {
    init_simple_test("BFu17ll_B_BFu7c");
    static BFu17ll_B_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu7c");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_B_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu7c(Test_BFu17ll_B_BFu7c, "BFu17ll_B_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu7i  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu17ll_B_BFu7i) C1{ FL:17 Fc Fi:7}



static void Test_BFu17ll_B_BFu7i()
{
  {
    init_simple_test("BFu17ll_B_BFu7i");
    static BFu17ll_B_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu7i");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_B_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu7i(Test_BFu17ll_B_BFu7i, "BFu17ll_B_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu7ll  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu17ll_B_BFu7ll) C1{ FL:17 Fc FL:7}



static void Test_BFu17ll_B_BFu7ll()
{
  {
    init_simple_test("BFu17ll_B_BFu7ll");
    static BFu17ll_B_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu7ll");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_B_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu7ll(Test_BFu17ll_B_BFu7ll, "BFu17ll_B_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu7s  {
  __tsu64 v1:17;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu17ll_B_BFu7s) C1{ FL:17 Fc Fs:7}



static void Test_BFu17ll_B_BFu7s()
{
  {
    init_simple_test("BFu17ll_B_BFu7s");
    static BFu17ll_B_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu7s");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu17ll_B_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu17ll_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu7s(Test_BFu17ll_B_BFu7s, "BFu17ll_B_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu8c  {
  __tsu64 v1:17;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu17ll_B_BFu8c) C1{ FL:17 Fc Fc:8}



static void Test_BFu17ll_B_BFu8c()
{
  {
    init_simple_test("BFu17ll_B_BFu8c");
    static BFu17ll_B_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu8c");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_B_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu8c(Test_BFu17ll_B_BFu8c, "BFu17ll_B_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu8i  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu17ll_B_BFu8i) C1{ FL:17 Fc Fi:8}



static void Test_BFu17ll_B_BFu8i()
{
  {
    init_simple_test("BFu17ll_B_BFu8i");
    static BFu17ll_B_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu8i");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_B_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu8i(Test_BFu17ll_B_BFu8i, "BFu17ll_B_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu8ll  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu17ll_B_BFu8ll) C1{ FL:17 Fc FL:8}



static void Test_BFu17ll_B_BFu8ll()
{
  {
    init_simple_test("BFu17ll_B_BFu8ll");
    static BFu17ll_B_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu8ll");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_B_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu8ll(Test_BFu17ll_B_BFu8ll, "BFu17ll_B_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu8s  {
  __tsu64 v1:17;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu17ll_B_BFu8s) C1{ FL:17 Fc Fs:8}



static void Test_BFu17ll_B_BFu8s()
{
  {
    init_simple_test("BFu17ll_B_BFu8s");
    static BFu17ll_B_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu8s");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu17ll_B_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu17ll_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu8s(Test_BFu17ll_B_BFu8s, "BFu17ll_B_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu9i  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu17ll_B_BFu9i) C1{ FL:17 Fc Fi:9}



static void Test_BFu17ll_B_BFu9i()
{
  {
    init_simple_test("BFu17ll_B_BFu9i");
    static BFu17ll_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu9i");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_B_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu9i(Test_BFu17ll_B_BFu9i, "BFu17ll_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu9ll  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu17ll_B_BFu9ll) C1{ FL:17 Fc FL:9}



static void Test_BFu17ll_B_BFu9ll()
{
  {
    init_simple_test("BFu17ll_B_BFu9ll");
    static BFu17ll_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu9ll");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_B_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu9ll(Test_BFu17ll_B_BFu9ll, "BFu17ll_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_BFu9s  {
  __tsu64 v1:17;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu17ll_B_BFu9s) C1{ FL:17 Fc Fs:9}



static void Test_BFu17ll_B_BFu9s()
{
  {
    init_simple_test("BFu17ll_B_BFu9s");
    static BFu17ll_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_BFu9s");
    check_field_offset(lv, v2, 3, "BFu17ll_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu17ll_B_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu17ll_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_BFu9s(Test_BFu17ll_B_BFu9s, "BFu17ll_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_C  {
  __tsu64 v1:17;
  bool v2;
  char v3;
};
//SIG(1 BFu17ll_B_C) C1{ FL:17 Fc[2]}



static void Test_BFu17ll_B_C()
{
  {
    init_simple_test("BFu17ll_B_C");
    static BFu17ll_B_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_C");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_C");
    check_field_offset(lv, v2, 3, "BFu17ll_B_C.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_C(Test_BFu17ll_B_C, "BFu17ll_B_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_D  {
  __tsu64 v1:17;
  bool v2;
  double v3;
};
//SIG(1 BFu17ll_B_D) C1{ FL:17 Fc FL}



static void Test_BFu17ll_B_D()
{
  {
    init_simple_test("BFu17ll_B_D");
    static BFu17ll_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_D");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_D");
    check_field_offset(lv, v2, 3, "BFu17ll_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_D(Test_BFu17ll_B_D, "BFu17ll_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_F  {
  __tsu64 v1:17;
  bool v2;
  float v3;
};
//SIG(1 BFu17ll_B_F) C1{ FL:17 Fc Fi}



static void Test_BFu17ll_B_F()
{
  {
    init_simple_test("BFu17ll_B_F");
    static BFu17ll_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_F");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_F");
    check_field_offset(lv, v2, 3, "BFu17ll_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_F(Test_BFu17ll_B_F, "BFu17ll_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_I  {
  __tsu64 v1:17;
  bool v2;
  int v3;
};
//SIG(1 BFu17ll_B_I) C1{ FL:17 Fc Fi}



static void Test_BFu17ll_B_I()
{
  {
    init_simple_test("BFu17ll_B_I");
    static BFu17ll_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_I");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_I");
    check_field_offset(lv, v2, 3, "BFu17ll_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_I(Test_BFu17ll_B_I, "BFu17ll_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_Ip  {
  __tsu64 v1:17;
  bool v2;
  int *v3;
};
//SIG(1 BFu17ll_B_Ip) C1{ FL:17 Fc Fp}



static void Test_BFu17ll_B_Ip()
{
  {
    init_simple_test("BFu17ll_B_Ip");
    static BFu17ll_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_Ip");
    check_field_offset(lv, v2, 3, "BFu17ll_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_Ip(Test_BFu17ll_B_Ip, "BFu17ll_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_L  {
  __tsu64 v1:17;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu17ll_B_L) C1{ FL:17 Fc FL}



static void Test_BFu17ll_B_L()
{
  {
    init_simple_test("BFu17ll_B_L");
    static BFu17ll_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_L");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_L");
    check_field_offset(lv, v2, 3, "BFu17ll_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_L(Test_BFu17ll_B_L, "BFu17ll_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_S  {
  __tsu64 v1:17;
  bool v2;
  short v3;
};
//SIG(1 BFu17ll_B_S) C1{ FL:17 Fc Fs}



static void Test_BFu17ll_B_S()
{
  {
    init_simple_test("BFu17ll_B_S");
    static BFu17ll_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_S");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_S");
    check_field_offset(lv, v2, 3, "BFu17ll_B_S.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_S(Test_BFu17ll_B_S, "BFu17ll_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_Uc  {
  __tsu64 v1:17;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu17ll_B_Uc) C1{ FL:17 Fc[2]}



static void Test_BFu17ll_B_Uc()
{
  {
    init_simple_test("BFu17ll_B_Uc");
    static BFu17ll_B_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_Uc");
    check_field_offset(lv, v2, 3, "BFu17ll_B_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_Uc(Test_BFu17ll_B_Uc, "BFu17ll_B_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_Ui  {
  __tsu64 v1:17;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu17ll_B_Ui) C1{ FL:17 Fc Fi}



static void Test_BFu17ll_B_Ui()
{
  {
    init_simple_test("BFu17ll_B_Ui");
    static BFu17ll_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_Ui");
    check_field_offset(lv, v2, 3, "BFu17ll_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_Ui(Test_BFu17ll_B_Ui, "BFu17ll_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_Ul  {
  __tsu64 v1:17;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu17ll_B_Ul) C1{ FL:17 Fc FL}



static void Test_BFu17ll_B_Ul()
{
  {
    init_simple_test("BFu17ll_B_Ul");
    static BFu17ll_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_Ul");
    check_field_offset(lv, v2, 3, "BFu17ll_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_Ul(Test_BFu17ll_B_Ul, "BFu17ll_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_Us  {
  __tsu64 v1:17;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu17ll_B_Us) C1{ FL:17 Fc Fs}



static void Test_BFu17ll_B_Us()
{
  {
    init_simple_test("BFu17ll_B_Us");
    static BFu17ll_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_B_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_Us");
    check_field_offset(lv, v2, 3, "BFu17ll_B_Us.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_Us(Test_BFu17ll_B_Us, "BFu17ll_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_B_Vp  {
  __tsu64 v1:17;
  bool v2;
  void *v3;
};
//SIG(1 BFu17ll_B_Vp) C1{ FL:17 Fc Fp}



static void Test_BFu17ll_B_Vp()
{
  {
    init_simple_test("BFu17ll_B_Vp");
    static BFu17ll_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu17ll_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_B_Vp");
    check_field_offset(lv, v2, 3, "BFu17ll_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu17ll_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_B_Vp(Test_BFu17ll_B_Vp, "BFu17ll_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu15i_B  {
  __tsu64 v1:17;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu17ll_BFu15i_B) C1{ FL:17 Fi:15 Fc}



static void Test_BFu17ll_BFu15i_B()
{
  {
    init_simple_test("BFu17ll_BFu15i_B");
    static BFu17ll_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15i_B");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15i_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu15i_B(Test_BFu17ll_BFu15i_B, "BFu17ll_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu15ll_B  {
  __tsu64 v1:17;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu17ll_BFu15ll_B) C1{ FL:17 FL:15 Fc}



static void Test_BFu17ll_BFu15ll_B()
{
  {
    init_simple_test("BFu17ll_BFu15ll_B");
    static BFu17ll_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15ll_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu15ll_B(Test_BFu17ll_BFu15ll_B, "BFu17ll_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu15s_B  {
  __tsu64 v1:17;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu17ll_BFu15s_B) C1{ FL:17 Fs:15 Fc}



static void Test_BFu17ll_BFu15s_B()
{
  {
    init_simple_test("BFu17ll_BFu15s_B");
    static BFu17ll_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu15s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 1, 15, 1, "BFu17ll_BFu15s_B");
    set_bf_and_test(lv, v2, 2, 1, 15, hide_ull(1LL<<14), "BFu17ll_BFu15s_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu15s_B(Test_BFu17ll_BFu15s_B, "BFu17ll_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu16i_B  {
  __tsu64 v1:17;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu17ll_BFu16i_B) C1{ FL:17 Fi:16 Fc}



static void Test_BFu17ll_BFu16i_B()
{
  {
    init_simple_test("BFu17ll_BFu16i_B");
    static BFu17ll_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16i_B");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu16i_B(Test_BFu17ll_BFu16i_B, "BFu17ll_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu16ll_B  {
  __tsu64 v1:17;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu17ll_BFu16ll_B) C1{ FL:17 FL:16 Fc}



static void Test_BFu17ll_BFu16ll_B()
{
  {
    init_simple_test("BFu17ll_BFu16ll_B");
    static BFu17ll_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 1, 16, 1, "BFu17ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 2, 1, 16, hide_ull(1LL<<15), "BFu17ll_BFu16ll_B");
    check_field_offset(lv, v3, 5, "BFu17ll_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu16ll_B(Test_BFu17ll_BFu16ll_B, "BFu17ll_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu16s_B  {
  __tsu64 v1:17;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu17ll_BFu16s_B) C1{ FL:17 Fs:16 Fc}



static void Test_BFu17ll_BFu16s_B()
{
  {
    init_simple_test("BFu17ll_BFu16s_B");
    static BFu17ll_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu16s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu17ll_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu17ll_BFu16s_B");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu16s_B(Test_BFu17ll_BFu16s_B, "BFu17ll_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu17i_B  {
  __tsu64 v1:17;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu17ll_BFu17i_B) C1{ FL:17 Fi:17 Fc}



static void Test_BFu17ll_BFu17i_B()
{
  {
    init_simple_test("BFu17ll_BFu17i_B");
    static BFu17ll_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu17ll_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17i_B");
    check_field_offset(lv, v3, 7, "BFu17ll_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu17i_B(Test_BFu17ll_BFu17i_B, "BFu17ll_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu17ll_B  {
  __tsu64 v1:17;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu17ll_BFu17ll_B) C1{ FL:17 FL:17 Fc}



static void Test_BFu17ll_BFu17ll_B()
{
  {
    init_simple_test("BFu17ll_BFu17ll_B");
    static BFu17ll_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 1, 17, 1, "BFu17ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 2, 1, 17, hide_ull(1LL<<16), "BFu17ll_BFu17ll_B");
    check_field_offset(lv, v3, 5, "BFu17ll_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu17ll_B(Test_BFu17ll_BFu17ll_B, "BFu17ll_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu1c_B  {
  __tsu64 v1:17;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu17ll_BFu1c_B) C1{ FL:17 Fc:1 Fc}



static void Test_BFu17ll_BFu1c_B()
{
  {
    init_simple_test("BFu17ll_BFu1c_B");
    static BFu17ll_BFu1c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1c_B");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1c_B");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu1c_B(Test_BFu17ll_BFu1c_B, "BFu17ll_BFu1c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu1i_B  {
  __tsu64 v1:17;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu17ll_BFu1i_B) C1{ FL:17 Fi:1 Fc}



static void Test_BFu17ll_BFu1i_B()
{
  {
    init_simple_test("BFu17ll_BFu1i_B");
    static BFu17ll_BFu1i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1i_B");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1i_B");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu1i_B(Test_BFu17ll_BFu1i_B, "BFu17ll_BFu1i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu1ll_B  {
  __tsu64 v1:17;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu17ll_BFu1ll_B) C1{ FL:17 FL:1 Fc}



static void Test_BFu17ll_BFu1ll_B()
{
  {
    init_simple_test("BFu17ll_BFu1ll_B");
    static BFu17ll_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1ll_B");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1ll_B");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu1ll_B(Test_BFu17ll_BFu1ll_B, "BFu17ll_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu1s_B  {
  __tsu64 v1:17;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu17ll_BFu1s_B) C1{ FL:17 Fs:1 Fc}



static void Test_BFu17ll_BFu1s_B()
{
  {
    init_simple_test("BFu17ll_BFu1s_B");
    static BFu17ll_BFu1s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu1s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu1s_B");
    set_bf_and_test(lv, v2, 2, 1, 1, 1, "BFu17ll_BFu1s_B");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu1s_B(Test_BFu17ll_BFu1s_B, "BFu17ll_BFu1s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu31i_B  {
  __tsu64 v1:17;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu17ll_BFu31i_B) C1{ FL:17 Fi:31 Fc}



static void Test_BFu17ll_BFu31i_B()
{
  {
    init_simple_test("BFu17ll_BFu31i_B");
    static BFu17ll_BFu31i_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu31i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu17ll_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu17ll_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu31i_B(Test_BFu17ll_BFu31i_B, "BFu17ll_BFu31i_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu31ll_B  {
  __tsu64 v1:17;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu17ll_BFu31ll_B) C1{ FL:17 FL:31 Fc}



static void Test_BFu17ll_BFu31ll_B()
{
  {
    init_simple_test("BFu17ll_BFu31ll_B");
    static BFu17ll_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 1, 31, 1, "BFu17ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 2, 1, 31, hide_ull(1LL<<30), "BFu17ll_BFu31ll_B");
    check_field_offset(lv, v3, 6, "BFu17ll_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu31ll_B(Test_BFu17ll_BFu31ll_B, "BFu17ll_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu32i_B  {
  __tsu64 v1:17;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu17ll_BFu32i_B) C1{ FL:17 Fi:32 Fc}



static void Test_BFu17ll_BFu32i_B()
{
  {
    init_simple_test("BFu17ll_BFu32i_B");
    static BFu17ll_BFu32i_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_BFu32i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu17ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu17ll_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu17ll_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu32i_B(Test_BFu17ll_BFu32i_B, "BFu17ll_BFu32i_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu32ll_B  {
  __tsu64 v1:17;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu17ll_BFu32ll_B) C1{ FL:17 FL:32 Fc}



static void Test_BFu17ll_BFu32ll_B()
{
  {
    init_simple_test("BFu17ll_BFu32ll_B");
    static BFu17ll_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 1, 32, 1, "BFu17ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 2, 1, 32, hide_ull(1LL<<31), "BFu17ll_BFu32ll_B");
    check_field_offset(lv, v3, 7, "BFu17ll_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu32ll_B(Test_BFu17ll_BFu32ll_B, "BFu17ll_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu33_B  {
  __tsu64 v1:17;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu17ll_BFu33_B) C1{ FL:17 FL:33 Fc}



static void Test_BFu17ll_BFu33_B()
{
  {
    init_simple_test("BFu17ll_BFu33_B");
    static BFu17ll_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu33_B");
    set_bf_and_test(lv, v2, 2, 1, 33, 1, "BFu17ll_BFu33_B");
    set_bf_and_test(lv, v2, 2, 1, 33, hide_ull(1LL<<32), "BFu17ll_BFu33_B");
    check_field_offset(lv, v3, 7, "BFu17ll_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu33_B(Test_BFu17ll_BFu33_B, "BFu17ll_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu7c_B  {
  __tsu64 v1:17;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu17ll_BFu7c_B) C1{ FL:17 Fc:7 Fc}



static void Test_BFu17ll_BFu7c_B()
{
  {
    init_simple_test("BFu17ll_BFu7c_B");
    static BFu17ll_BFu7c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7c_B");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7c_B");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu7c_B(Test_BFu17ll_BFu7c_B, "BFu17ll_BFu7c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu7i_B  {
  __tsu64 v1:17;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu17ll_BFu7i_B) C1{ FL:17 Fi:7 Fc}



static void Test_BFu17ll_BFu7i_B()
{
  {
    init_simple_test("BFu17ll_BFu7i_B");
    static BFu17ll_BFu7i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7i_B");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7i_B");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu7i_B(Test_BFu17ll_BFu7i_B, "BFu17ll_BFu7i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu7ll_B  {
  __tsu64 v1:17;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu17ll_BFu7ll_B) C1{ FL:17 FL:7 Fc}



static void Test_BFu17ll_BFu7ll_B()
{
  {
    init_simple_test("BFu17ll_BFu7ll_B");
    static BFu17ll_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7ll_B");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu7ll_B(Test_BFu17ll_BFu7ll_B, "BFu17ll_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu7s_B  {
  __tsu64 v1:17;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu17ll_BFu7s_B) C1{ FL:17 Fs:7 Fc}



static void Test_BFu17ll_BFu7s_B()
{
  {
    init_simple_test("BFu17ll_BFu7s_B");
    static BFu17ll_BFu7s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu17ll_BFu7s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 1, 7, 1, "BFu17ll_BFu7s_B");
    set_bf_and_test(lv, v2, 2, 1, 7, hide_ull(1LL<<6), "BFu17ll_BFu7s_B");
    check_field_offset(lv, v3, 3, "BFu17ll_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu7s_B(Test_BFu17ll_BFu7s_B, "BFu17ll_BFu7s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu8c_B  {
  __tsu64 v1:17;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu17ll_BFu8c_B) C1{ FL:17 Fc:8 Fc}



static void Test_BFu17ll_BFu8c_B()
{
  {
    init_simple_test("BFu17ll_BFu8c_B");
    static BFu17ll_BFu8c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8c_B");
    set_bf_and_test(lv, v2, 3, 0, 8, 1, "BFu17ll_BFu8c_B");
    set_bf_and_test(lv, v2, 3, 0, 8, hide_ull(1LL<<7), "BFu17ll_BFu8c_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu8c_B(Test_BFu17ll_BFu8c_B, "BFu17ll_BFu8c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu8i_B  {
  __tsu64 v1:17;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu17ll_BFu8i_B) C1{ FL:17 Fi:8 Fc}



static void Test_BFu17ll_BFu8i_B()
{
  {
    init_simple_test("BFu17ll_BFu8i_B");
    static BFu17ll_BFu8i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8i_B");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8i_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu8i_B(Test_BFu17ll_BFu8i_B, "BFu17ll_BFu8i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu8ll_B  {
  __tsu64 v1:17;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu17ll_BFu8ll_B) C1{ FL:17 FL:8 Fc}



static void Test_BFu17ll_BFu8ll_B()
{
  {
    init_simple_test("BFu17ll_BFu8ll_B");
    static BFu17ll_BFu8ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8ll_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu8ll_B(Test_BFu17ll_BFu8ll_B, "BFu17ll_BFu8ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu8s_B  {
  __tsu64 v1:17;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu17ll_BFu8s_B) C1{ FL:17 Fs:8 Fc}



static void Test_BFu17ll_BFu8s_B()
{
  {
    init_simple_test("BFu17ll_BFu8s_B");
    static BFu17ll_BFu8s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu8s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 1, 8, 1, "BFu17ll_BFu8s_B");
    set_bf_and_test(lv, v2, 2, 1, 8, hide_ull(1LL<<7), "BFu17ll_BFu8s_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu8s_B(Test_BFu17ll_BFu8s_B, "BFu17ll_BFu8s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu9i_B  {
  __tsu64 v1:17;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu17ll_BFu9i_B) C1{ FL:17 Fi:9 Fc}



static void Test_BFu17ll_BFu9i_B()
{
  {
    init_simple_test("BFu17ll_BFu9i_B");
    static BFu17ll_BFu9i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu9i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17ll_BFu9i_B");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu9i_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu9i_B(Test_BFu17ll_BFu9i_B, "BFu17ll_BFu9i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu9ll_B  {
  __tsu64 v1:17;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu17ll_BFu9ll_B) C1{ FL:17 FL:9 Fc}



static void Test_BFu17ll_BFu9ll_B()
{
  {
    init_simple_test("BFu17ll_BFu9ll_B");
    static BFu17ll_BFu9ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu9ll_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu9ll_B(Test_BFu17ll_BFu9ll_B, "BFu17ll_BFu9ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_BFu9s_B  {
  __tsu64 v1:17;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu17ll_BFu9s_B) C1{ FL:17 Fs:9 Fc}



static void Test_BFu17ll_BFu9s_B()
{
  {
    init_simple_test("BFu17ll_BFu9s_B");
    static BFu17ll_BFu9s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_BFu9s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 1, 9, 1, "BFu17ll_BFu9s_B");
    set_bf_and_test(lv, v2, 2, 1, 9, hide_ull(1LL<<8), "BFu17ll_BFu9s_B");
    check_field_offset(lv, v3, 4, "BFu17ll_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_BFu9s_B(Test_BFu17ll_BFu9s_B, "BFu17ll_BFu9s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_C_B  {
  __tsu64 v1:17;
  char v2;
  bool v3;
};
//SIG(1 BFu17ll_C_B) C1{ FL:17 Fc[2]}



static void Test_BFu17ll_C_B()
{
  {
    init_simple_test("BFu17ll_C_B");
    static BFu17ll_C_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_C_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_C_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_C_B");
    check_field_offset(lv, v2, 3, "BFu17ll_C_B.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_C_B(Test_BFu17ll_C_B, "BFu17ll_C_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_D_B  {
  __tsu64 v1:17;
  double v2;
  bool v3;
};
//SIG(1 BFu17ll_D_B) C1{ FL:17 FL Fc}



static void Test_BFu17ll_D_B()
{
  {
    init_simple_test("BFu17ll_D_B");
    static BFu17ll_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17ll_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_D_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17ll_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17ll_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_D_B(Test_BFu17ll_D_B, "BFu17ll_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_F_B  {
  __tsu64 v1:17;
  float v2;
  bool v3;
};
//SIG(1 BFu17ll_F_B) C1{ FL:17 Fi Fc}



static void Test_BFu17ll_F_B()
{
  {
    init_simple_test("BFu17ll_F_B");
    static BFu17ll_F_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_F_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_F_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_F_B");
    check_field_offset(lv, v2, 4, "BFu17ll_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu17ll_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_F_B(Test_BFu17ll_F_B, "BFu17ll_F_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_I_B  {
  __tsu64 v1:17;
  int v2;
  bool v3;
};
//SIG(1 BFu17ll_I_B) C1{ FL:17 Fi Fc}



static void Test_BFu17ll_I_B()
{
  {
    init_simple_test("BFu17ll_I_B");
    static BFu17ll_I_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_I_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_I_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_I_B");
    check_field_offset(lv, v2, 4, "BFu17ll_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu17ll_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_I_B(Test_BFu17ll_I_B, "BFu17ll_I_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_Ip_B  {
  __tsu64 v1:17;
  int *v2;
  bool v3;
};
//SIG(1 BFu17ll_Ip_B) C1{ FL:17 Fp Fc}



static void Test_BFu17ll_Ip_B()
{
  {
    init_simple_test("BFu17ll_Ip_B");
    static BFu17ll_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17ll_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17ll_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17ll_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_Ip_B(Test_BFu17ll_Ip_B, "BFu17ll_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_L_B  {
  __tsu64 v1:17;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu17ll_L_B) C1{ FL:17 FL Fc}



static void Test_BFu17ll_L_B()
{
  {
    init_simple_test("BFu17ll_L_B");
    static BFu17ll_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17ll_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_L_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17ll_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17ll_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_L_B(Test_BFu17ll_L_B, "BFu17ll_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_S_B  {
  __tsu64 v1:17;
  short v2;
  bool v3;
};
//SIG(1 BFu17ll_S_B) C1{ FL:17 Fs Fc}



static void Test_BFu17ll_S_B()
{
  {
    init_simple_test("BFu17ll_S_B");
    static BFu17ll_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_S_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_S_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_S_B");
    check_field_offset(lv, v2, 4, "BFu17ll_S_B.v2");
    check_field_offset(lv, v3, 6, "BFu17ll_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_S_B(Test_BFu17ll_S_B, "BFu17ll_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_Uc_B  {
  __tsu64 v1:17;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu17ll_Uc_B) C1{ FL:17 Fc[2]}



static void Test_BFu17ll_Uc_B()
{
  {
    init_simple_test("BFu17ll_Uc_B");
    static BFu17ll_Uc_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_Uc_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_Uc_B");
    check_field_offset(lv, v2, 3, "BFu17ll_Uc_B.v2");
    check_field_offset(lv, v3, 4, "BFu17ll_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_Uc_B(Test_BFu17ll_Uc_B, "BFu17ll_Uc_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_Ui_B  {
  __tsu64 v1:17;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu17ll_Ui_B) C1{ FL:17 Fi Fc}



static void Test_BFu17ll_Ui_B()
{
  {
    init_simple_test("BFu17ll_Ui_B");
    static BFu17ll_Ui_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu17ll_Ui_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_Ui_B");
    check_field_offset(lv, v2, 4, "BFu17ll_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu17ll_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_Ui_B(Test_BFu17ll_Ui_B, "BFu17ll_Ui_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_Ul_B  {
  __tsu64 v1:17;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu17ll_Ul_B) C1{ FL:17 FL Fc}



static void Test_BFu17ll_Ul_B()
{
  {
    init_simple_test("BFu17ll_Ul_B");
    static BFu17ll_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu17ll_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17ll_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu17ll_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_Ul_B(Test_BFu17ll_Ul_B, "BFu17ll_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_Us_B  {
  __tsu64 v1:17;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu17ll_Us_B) C1{ FL:17 Fs Fc}



static void Test_BFu17ll_Us_B()
{
  {
    init_simple_test("BFu17ll_Us_B");
    static BFu17ll_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu17ll_Us_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_Us_B");
    check_field_offset(lv, v2, 4, "BFu17ll_Us_B.v2");
    check_field_offset(lv, v3, 6, "BFu17ll_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_Us_B(Test_BFu17ll_Us_B, "BFu17ll_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu17ll_Vp_B  {
  __tsu64 v1:17;
  void *v2;
  bool v3;
};
//SIG(1 BFu17ll_Vp_B) C1{ FL:17 Fp Fc}



static void Test_BFu17ll_Vp_B()
{
  {
    init_simple_test("BFu17ll_Vp_B");
    static BFu17ll_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu17ll_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu17ll_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 17, 1, "BFu17ll_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 17, hide_ull(1LL<<16), "BFu17ll_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu17ll_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu17ll_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu17ll_Vp_B(Test_BFu17ll_Vp_B, "BFu17ll_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B  {
  unsigned char v1:1;
  bool v2;
};
//SIG(1 BFu1c_B) C1{ Fc:1 Fc}



static void Test_BFu1c_B()
{
  {
    init_simple_test("BFu1c_B");
    static BFu1c_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1c_B)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B");
    check_field_offset(lv, v2, 1, "BFu1c_B.v2");
  }
}
static Arrange_To_Call_Me vBFu1c_B(Test_BFu1c_B, "BFu1c_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_B  {
  unsigned char v1:1;
  bool v2;
  bool v3;
};
//SIG(1 BFu1c_B_B) C1{ Fc:1 Fc[2]}



static void Test_BFu1c_B_B()
{
  {
    init_simple_test("BFu1c_B_B");
    static BFu1c_B_B lv;
    check2(sizeof(lv), 3, "sizeof(BFu1c_B_B)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_B");
    check_field_offset(lv, v2, 1, "BFu1c_B_B.v2");
    check_field_offset(lv, v3, 2, "BFu1c_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_B(Test_BFu1c_B_B, "BFu1c_B_B", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu15i  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu1c_B_BFu15i) C1{ Fc:1 Fc Fi:15}



static void Test_BFu1c_B_BFu15i()
{
  {
    init_simple_test("BFu1c_B_BFu15i");
    static BFu1c_B_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu15i");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1c_B_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1c_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu15i(Test_BFu1c_B_BFu15i, "BFu1c_B_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu15ll  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu1c_B_BFu15ll) C1{ Fc:1 Fc FL:15}



static void Test_BFu1c_B_BFu15ll()
{
  {
    init_simple_test("BFu1c_B_BFu15ll");
    static BFu1c_B_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1c_B_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1c_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu15ll(Test_BFu1c_B_BFu15ll, "BFu1c_B_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu15s  {
  unsigned char v1:1;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu1c_B_BFu15s) C1{ Fc:1 Fc Fs:15}



static void Test_BFu1c_B_BFu15s()
{
  {
    init_simple_test("BFu1c_B_BFu15s");
    static BFu1c_B_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu15s");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1c_B_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1c_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu15s(Test_BFu1c_B_BFu15s, "BFu1c_B_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu16i  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu1c_B_BFu16i) C1{ Fc:1 Fc Fi:16}



static void Test_BFu1c_B_BFu16i()
{
  {
    init_simple_test("BFu1c_B_BFu16i");
    static BFu1c_B_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu16i");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1c_B_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1c_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu16i(Test_BFu1c_B_BFu16i, "BFu1c_B_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu16ll  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu1c_B_BFu16ll) C1{ Fc:1 Fc FL:16}



static void Test_BFu1c_B_BFu16ll()
{
  {
    init_simple_test("BFu1c_B_BFu16ll");
    static BFu1c_B_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1c_B_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1c_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu16ll(Test_BFu1c_B_BFu16ll, "BFu1c_B_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu16s  {
  unsigned char v1:1;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu1c_B_BFu16s) C1{ Fc:1 Fc Fs:16}



static void Test_BFu1c_B_BFu16s()
{
  {
    init_simple_test("BFu1c_B_BFu16s");
    static BFu1c_B_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu16s");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1c_B_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1c_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu16s(Test_BFu1c_B_BFu16s, "BFu1c_B_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu17i  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu1c_B_BFu17i) C1{ Fc:1 Fc Fi:17}



static void Test_BFu1c_B_BFu17i()
{
  {
    init_simple_test("BFu1c_B_BFu17i");
    static BFu1c_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu17i");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu1c_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu1c_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu17i(Test_BFu1c_B_BFu17i, "BFu1c_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu17ll  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu1c_B_BFu17ll) C1{ Fc:1 Fc FL:17}



static void Test_BFu1c_B_BFu17ll()
{
  {
    init_simple_test("BFu1c_B_BFu17ll");
    static BFu1c_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu1c_B_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu1c_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu17ll(Test_BFu1c_B_BFu17ll, "BFu1c_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu1c  {
  unsigned char v1:1;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu1c_B_BFu1c) C1{ Fc:1 Fc Fc:1}



static void Test_BFu1c_B_BFu1c()
{
  {
    init_simple_test("BFu1c_B_BFu1c");
    static BFu1c_B_BFu1c lv;
    check2(sizeof(lv), 3, "sizeof(BFu1c_B_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu1c");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1c_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu1c(Test_BFu1c_B_BFu1c, "BFu1c_B_BFu1c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu1i  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu1c_B_BFu1i) C1{ Fc:1 Fc Fi:1}



static void Test_BFu1c_B_BFu1i()
{
  {
    init_simple_test("BFu1c_B_BFu1i");
    static BFu1c_B_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu1i");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1c_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu1i(Test_BFu1c_B_BFu1i, "BFu1c_B_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu1ll  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu1c_B_BFu1ll) C1{ Fc:1 Fc FL:1}



static void Test_BFu1c_B_BFu1ll()
{
  {
    init_simple_test("BFu1c_B_BFu1ll");
    static BFu1c_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1c_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu1ll(Test_BFu1c_B_BFu1ll, "BFu1c_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu1s  {
  unsigned char v1:1;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu1c_B_BFu1s) C1{ Fc:1 Fc Fs:1}



static void Test_BFu1c_B_BFu1s()
{
  {
    init_simple_test("BFu1c_B_BFu1s");
    static BFu1c_B_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu1s");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1c_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu1s(Test_BFu1c_B_BFu1s, "BFu1c_B_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu31i  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu1c_B_BFu31i) C1{ Fc:1 Fc Fi:31}



static void Test_BFu1c_B_BFu31i()
{
  {
    init_simple_test("BFu1c_B_BFu31i");
    static BFu1c_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu31i");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu1c_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu1c_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu31i(Test_BFu1c_B_BFu31i, "BFu1c_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu31ll  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu1c_B_BFu31ll) C1{ Fc:1 Fc FL:31}



static void Test_BFu1c_B_BFu31ll()
{
  {
    init_simple_test("BFu1c_B_BFu31ll");
    static BFu1c_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu1c_B_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu1c_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu31ll(Test_BFu1c_B_BFu31ll, "BFu1c_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu32i  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu1c_B_BFu32i) C1{ Fc:1 Fc Fi:32}



static void Test_BFu1c_B_BFu32i()
{
  {
    init_simple_test("BFu1c_B_BFu32i");
    static BFu1c_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu32i");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu1c_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu1c_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu32i(Test_BFu1c_B_BFu32i, "BFu1c_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu32ll  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu1c_B_BFu32ll) C1{ Fc:1 Fc FL:32}



static void Test_BFu1c_B_BFu32ll()
{
  {
    init_simple_test("BFu1c_B_BFu32ll");
    static BFu1c_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu1c_B_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu1c_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu32ll(Test_BFu1c_B_BFu32ll, "BFu1c_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu33  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu1c_B_BFu33) C1{ Fc:1 Fc FL:33}



static void Test_BFu1c_B_BFu33()
{
  {
    init_simple_test("BFu1c_B_BFu33");
    static BFu1c_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu33");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu1c_B_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu1c_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu33(Test_BFu1c_B_BFu33, "BFu1c_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu7c  {
  unsigned char v1:1;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu1c_B_BFu7c) C1{ Fc:1 Fc Fc:7}



static void Test_BFu1c_B_BFu7c()
{
  {
    init_simple_test("BFu1c_B_BFu7c");
    static BFu1c_B_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(BFu1c_B_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu7c");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1c_B_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1c_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu7c(Test_BFu1c_B_BFu7c, "BFu1c_B_BFu7c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu7i  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu1c_B_BFu7i) C1{ Fc:1 Fc Fi:7}



static void Test_BFu1c_B_BFu7i()
{
  {
    init_simple_test("BFu1c_B_BFu7i");
    static BFu1c_B_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu7i");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1c_B_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1c_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu7i(Test_BFu1c_B_BFu7i, "BFu1c_B_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu7ll  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu1c_B_BFu7ll) C1{ Fc:1 Fc FL:7}



static void Test_BFu1c_B_BFu7ll()
{
  {
    init_simple_test("BFu1c_B_BFu7ll");
    static BFu1c_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1c_B_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1c_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu7ll(Test_BFu1c_B_BFu7ll, "BFu1c_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu7s  {
  unsigned char v1:1;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu1c_B_BFu7s) C1{ Fc:1 Fc Fs:7}



static void Test_BFu1c_B_BFu7s()
{
  {
    init_simple_test("BFu1c_B_BFu7s");
    static BFu1c_B_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu7s");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1c_B_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1c_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu7s(Test_BFu1c_B_BFu7s, "BFu1c_B_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu8c  {
  unsigned char v1:1;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu1c_B_BFu8c) C1{ Fc:1 Fc Fc:8}



static void Test_BFu1c_B_BFu8c()
{
  {
    init_simple_test("BFu1c_B_BFu8c");
    static BFu1c_B_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(BFu1c_B_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu8c");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1c_B_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1c_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu8c(Test_BFu1c_B_BFu8c, "BFu1c_B_BFu8c", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu8i  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu1c_B_BFu8i) C1{ Fc:1 Fc Fi:8}



static void Test_BFu1c_B_BFu8i()
{
  {
    init_simple_test("BFu1c_B_BFu8i");
    static BFu1c_B_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu8i");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1c_B_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1c_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu8i(Test_BFu1c_B_BFu8i, "BFu1c_B_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu8ll  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu1c_B_BFu8ll) C1{ Fc:1 Fc FL:8}



static void Test_BFu1c_B_BFu8ll()
{
  {
    init_simple_test("BFu1c_B_BFu8ll");
    static BFu1c_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1c_B_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1c_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu8ll(Test_BFu1c_B_BFu8ll, "BFu1c_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu8s  {
  unsigned char v1:1;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu1c_B_BFu8s) C1{ Fc:1 Fc Fs:8}



static void Test_BFu1c_B_BFu8s()
{
  {
    init_simple_test("BFu1c_B_BFu8s");
    static BFu1c_B_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu8s");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1c_B_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1c_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu8s(Test_BFu1c_B_BFu8s, "BFu1c_B_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu9i  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu1c_B_BFu9i) C1{ Fc:1 Fc Fi:9}



static void Test_BFu1c_B_BFu9i()
{
  {
    init_simple_test("BFu1c_B_BFu9i");
    static BFu1c_B_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu9i");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1c_B_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1c_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu9i(Test_BFu1c_B_BFu9i, "BFu1c_B_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu9ll  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu1c_B_BFu9ll) C1{ Fc:1 Fc FL:9}



static void Test_BFu1c_B_BFu9ll()
{
  {
    init_simple_test("BFu1c_B_BFu9ll");
    static BFu1c_B_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1c_B_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1c_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu9ll(Test_BFu1c_B_BFu9ll, "BFu1c_B_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_BFu9s  {
  unsigned char v1:1;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu1c_B_BFu9s) C1{ Fc:1 Fc Fs:9}



static void Test_BFu1c_B_BFu9s()
{
  {
    init_simple_test("BFu1c_B_BFu9s");
    static BFu1c_B_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_BFu9s");
    check_field_offset(lv, v2, 1, "BFu1c_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1c_B_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1c_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu1c_B_BFu9s(Test_BFu1c_B_BFu9s, "BFu1c_B_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_C  {
  unsigned char v1:1;
  bool v2;
  char v3;
};
//SIG(1 BFu1c_B_C) C1{ Fc:1 Fc[2]}



static void Test_BFu1c_B_C()
{
  {
    init_simple_test("BFu1c_B_C");
    static BFu1c_B_C lv;
    check2(sizeof(lv), 3, "sizeof(BFu1c_B_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_C");
    check_field_offset(lv, v2, 1, "BFu1c_B_C.v2");
    check_field_offset(lv, v3, 2, "BFu1c_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_C(Test_BFu1c_B_C, "BFu1c_B_C", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_D  {
  unsigned char v1:1;
  bool v2;
  double v3;
};
//SIG(1 BFu1c_B_D) C1{ Fc:1 Fc FL}



static void Test_BFu1c_B_D()
{
  {
    init_simple_test("BFu1c_B_D");
    static BFu1c_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1c_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_D");
    check_field_offset(lv, v2, 1, "BFu1c_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1c_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_D(Test_BFu1c_B_D, "BFu1c_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_F  {
  unsigned char v1:1;
  bool v2;
  float v3;
};
//SIG(1 BFu1c_B_F) C1{ Fc:1 Fc Fi}



static void Test_BFu1c_B_F()
{
  {
    init_simple_test("BFu1c_B_F");
    static BFu1c_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_F");
    check_field_offset(lv, v2, 1, "BFu1c_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu1c_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_F(Test_BFu1c_B_F, "BFu1c_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_I  {
  unsigned char v1:1;
  bool v2;
  int v3;
};
//SIG(1 BFu1c_B_I) C1{ Fc:1 Fc Fi}



static void Test_BFu1c_B_I()
{
  {
    init_simple_test("BFu1c_B_I");
    static BFu1c_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_I");
    check_field_offset(lv, v2, 1, "BFu1c_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu1c_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_I(Test_BFu1c_B_I, "BFu1c_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_Ip  {
  unsigned char v1:1;
  bool v2;
  int *v3;
};
//SIG(1 BFu1c_B_Ip) C1{ Fc:1 Fc Fp}



static void Test_BFu1c_B_Ip()
{
  {
    init_simple_test("BFu1c_B_Ip");
    static BFu1c_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1c_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_Ip");
    check_field_offset(lv, v2, 1, "BFu1c_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1c_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_Ip(Test_BFu1c_B_Ip, "BFu1c_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_L  {
  unsigned char v1:1;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu1c_B_L) C1{ Fc:1 Fc FL}



static void Test_BFu1c_B_L()
{
  {
    init_simple_test("BFu1c_B_L");
    static BFu1c_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1c_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_L");
    check_field_offset(lv, v2, 1, "BFu1c_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1c_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_L(Test_BFu1c_B_L, "BFu1c_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_S  {
  unsigned char v1:1;
  bool v2;
  short v3;
};
//SIG(1 BFu1c_B_S) C1{ Fc:1 Fc Fs}



static void Test_BFu1c_B_S()
{
  {
    init_simple_test("BFu1c_B_S");
    static BFu1c_B_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_S");
    check_field_offset(lv, v2, 1, "BFu1c_B_S.v2");
    check_field_offset(lv, v3, 2, "BFu1c_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_S(Test_BFu1c_B_S, "BFu1c_B_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_Uc  {
  unsigned char v1:1;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu1c_B_Uc) C1{ Fc:1 Fc[2]}



static void Test_BFu1c_B_Uc()
{
  {
    init_simple_test("BFu1c_B_Uc");
    static BFu1c_B_Uc lv;
    check2(sizeof(lv), 3, "sizeof(BFu1c_B_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_Uc");
    check_field_offset(lv, v2, 1, "BFu1c_B_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu1c_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_Uc(Test_BFu1c_B_Uc, "BFu1c_B_Uc", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_Ui  {
  unsigned char v1:1;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu1c_B_Ui) C1{ Fc:1 Fc Fi}



static void Test_BFu1c_B_Ui()
{
  {
    init_simple_test("BFu1c_B_Ui");
    static BFu1c_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_Ui");
    check_field_offset(lv, v2, 1, "BFu1c_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu1c_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_Ui(Test_BFu1c_B_Ui, "BFu1c_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_Ul  {
  unsigned char v1:1;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu1c_B_Ul) C1{ Fc:1 Fc FL}



static void Test_BFu1c_B_Ul()
{
  {
    init_simple_test("BFu1c_B_Ul");
    static BFu1c_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1c_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_Ul");
    check_field_offset(lv, v2, 1, "BFu1c_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1c_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_Ul(Test_BFu1c_B_Ul, "BFu1c_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_Us  {
  unsigned char v1:1;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu1c_B_Us) C1{ Fc:1 Fc Fs}



static void Test_BFu1c_B_Us()
{
  {
    init_simple_test("BFu1c_B_Us");
    static BFu1c_B_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_B_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_Us");
    check_field_offset(lv, v2, 1, "BFu1c_B_Us.v2");
    check_field_offset(lv, v3, 2, "BFu1c_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_Us(Test_BFu1c_B_Us, "BFu1c_B_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_B_Vp  {
  unsigned char v1:1;
  bool v2;
  void *v3;
};
//SIG(1 BFu1c_B_Vp) C1{ Fc:1 Fc Fp}



static void Test_BFu1c_B_Vp()
{
  {
    init_simple_test("BFu1c_B_Vp");
    static BFu1c_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1c_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_B_Vp");
    check_field_offset(lv, v2, 1, "BFu1c_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1c_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_B_Vp(Test_BFu1c_B_Vp, "BFu1c_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu15i_B  {
  unsigned char v1:1;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu1c_BFu15i_B) C1{ Fc:1 Fi:15 Fc}



static void Test_BFu1c_BFu15i_B()
{
  {
    init_simple_test("BFu1c_BFu15i_B");
    static BFu1c_BFu15i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu15i_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1c_BFu15i_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1c_BFu15i_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu15i_B(Test_BFu1c_BFu15i_B, "BFu1c_BFu15i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu15ll_B  {
  unsigned char v1:1;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu1c_BFu15ll_B) C1{ Fc:1 FL:15 Fc}



static void Test_BFu1c_BFu15ll_B()
{
  {
    init_simple_test("BFu1c_BFu15ll_B");
    static BFu1c_BFu15ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu15ll_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1c_BFu15ll_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1c_BFu15ll_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu15ll_B(Test_BFu1c_BFu15ll_B, "BFu1c_BFu15ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu15s_B  {
  unsigned char v1:1;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu1c_BFu15s_B) C1{ Fc:1 Fs:15 Fc}



static void Test_BFu1c_BFu15s_B()
{
  {
    init_simple_test("BFu1c_BFu15s_B");
    static BFu1c_BFu15s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu15s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu15s_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1c_BFu15s_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1c_BFu15s_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu15s_B(Test_BFu1c_BFu15s_B, "BFu1c_BFu15s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu16i_B  {
  unsigned char v1:1;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu1c_BFu16i_B) C1{ Fc:1 Fi:16 Fc}



static void Test_BFu1c_BFu16i_B()
{
  {
    init_simple_test("BFu1c_BFu16i_B");
    static BFu1c_BFu16i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu16i_B");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu1c_BFu16i_B");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu1c_BFu16i_B");
    check_field_offset(lv, v3, 3, "BFu1c_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu16i_B(Test_BFu1c_BFu16i_B, "BFu1c_BFu16i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu16ll_B  {
  unsigned char v1:1;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu1c_BFu16ll_B) C1{ Fc:1 FL:16 Fc}



static void Test_BFu1c_BFu16ll_B()
{
  {
    init_simple_test("BFu1c_BFu16ll_B");
    static BFu1c_BFu16ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu16ll_B");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu1c_BFu16ll_B");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu1c_BFu16ll_B");
    check_field_offset(lv, v3, 3, "BFu1c_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu16ll_B(Test_BFu1c_BFu16ll_B, "BFu1c_BFu16ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu16s_B  {
  unsigned char v1:1;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu1c_BFu16s_B) C1{ Fc:1 Fs:16 Fc}



static void Test_BFu1c_BFu16s_B()
{
  {
    init_simple_test("BFu1c_BFu16s_B");
    static BFu1c_BFu16s_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu1c_BFu16s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu1c_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu1c_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu1c_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu16s_B(Test_BFu1c_BFu16s_B, "BFu1c_BFu16s_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu17i_B  {
  unsigned char v1:1;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu1c_BFu17i_B) C1{ Fc:1 Fi:17 Fc}



static void Test_BFu1c_BFu17i_B()
{
  {
    init_simple_test("BFu1c_BFu17i_B");
    static BFu1c_BFu17i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu17i_B");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu1c_BFu17i_B");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu1c_BFu17i_B");
    check_field_offset(lv, v3, 3, "BFu1c_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu17i_B(Test_BFu1c_BFu17i_B, "BFu1c_BFu17i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu17ll_B  {
  unsigned char v1:1;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu1c_BFu17ll_B) C1{ Fc:1 FL:17 Fc}



static void Test_BFu1c_BFu17ll_B()
{
  {
    init_simple_test("BFu1c_BFu17ll_B");
    static BFu1c_BFu17ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu17ll_B");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu1c_BFu17ll_B");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu1c_BFu17ll_B");
    check_field_offset(lv, v3, 3, "BFu1c_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu17ll_B(Test_BFu1c_BFu17ll_B, "BFu1c_BFu17ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu1c_B  {
  unsigned char v1:1;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu1c_BFu1c_B) C1{ Fc:1 Fc:1 Fc}



static void Test_BFu1c_BFu1c_B()
{
  {
    init_simple_test("BFu1c_BFu1c_B");
    static BFu1c_BFu1c_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1c_BFu1c_B)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu1c_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1c_BFu1c_B");
    check_field_offset(lv, v3, 1, "BFu1c_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu1c_B(Test_BFu1c_BFu1c_B, "BFu1c_BFu1c_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu1i_B  {
  unsigned char v1:1;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu1c_BFu1i_B) C1{ Fc:1 Fi:1 Fc}



static void Test_BFu1c_BFu1i_B()
{
  {
    init_simple_test("BFu1c_BFu1i_B");
    static BFu1c_BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu1i_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1c_BFu1i_B");
    check_field_offset(lv, v3, 1, "BFu1c_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu1i_B(Test_BFu1c_BFu1i_B, "BFu1c_BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu1ll_B  {
  unsigned char v1:1;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu1c_BFu1ll_B) C1{ Fc:1 FL:1 Fc}



static void Test_BFu1c_BFu1ll_B()
{
  {
    init_simple_test("BFu1c_BFu1ll_B");
    static BFu1c_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu1ll_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1c_BFu1ll_B");
    check_field_offset(lv, v3, 1, "BFu1c_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu1ll_B(Test_BFu1c_BFu1ll_B, "BFu1c_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu1s_B  {
  unsigned char v1:1;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu1c_BFu1s_B) C1{ Fc:1 Fs:1 Fc}



static void Test_BFu1c_BFu1s_B()
{
  {
    init_simple_test("BFu1c_BFu1s_B");
    static BFu1c_BFu1s_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1c_BFu1s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu1s_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1c_BFu1s_B");
    check_field_offset(lv, v3, 1, "BFu1c_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu1s_B(Test_BFu1c_BFu1s_B, "BFu1c_BFu1s_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu31i_B  {
  unsigned char v1:1;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu1c_BFu31i_B) C1{ Fc:1 Fi:31 Fc}



static void Test_BFu1c_BFu31i_B()
{
  {
    init_simple_test("BFu1c_BFu31i_B");
    static BFu1c_BFu31i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu31i_B");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu1c_BFu31i_B");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu1c_BFu31i_B");
    check_field_offset(lv, v3, 4, "BFu1c_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu31i_B(Test_BFu1c_BFu31i_B, "BFu1c_BFu31i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu31ll_B  {
  unsigned char v1:1;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu1c_BFu31ll_B) C1{ Fc:1 FL:31 Fc}



static void Test_BFu1c_BFu31ll_B()
{
  {
    init_simple_test("BFu1c_BFu31ll_B");
    static BFu1c_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu31ll_B");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu1c_BFu31ll_B");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu1c_BFu31ll_B");
    check_field_offset(lv, v3, 4, "BFu1c_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu31ll_B(Test_BFu1c_BFu31ll_B, "BFu1c_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu32i_B  {
  unsigned char v1:1;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu1c_BFu32i_B) C1{ Fc:1 Fi:32 Fc}



static void Test_BFu1c_BFu32i_B()
{
  {
    init_simple_test("BFu1c_BFu32i_B");
    static BFu1c_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1c_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu1c_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu1c_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu1c_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu32i_B(Test_BFu1c_BFu32i_B, "BFu1c_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu32ll_B  {
  unsigned char v1:1;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu1c_BFu32ll_B) C1{ Fc:1 FL:32 Fc}



static void Test_BFu1c_BFu32ll_B()
{
  {
    init_simple_test("BFu1c_BFu32ll_B");
    static BFu1c_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu32ll_B");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu1c_BFu32ll_B");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu1c_BFu32ll_B");
    check_field_offset(lv, v3, 5, "BFu1c_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu32ll_B(Test_BFu1c_BFu32ll_B, "BFu1c_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu33_B  {
  unsigned char v1:1;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu1c_BFu33_B) C1{ Fc:1 FL:33 Fc}



static void Test_BFu1c_BFu33_B()
{
  {
    init_simple_test("BFu1c_BFu33_B");
    static BFu1c_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1c_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu33_B");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu1c_BFu33_B");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu1c_BFu33_B");
    check_field_offset(lv, v3, 5, "BFu1c_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu33_B(Test_BFu1c_BFu33_B, "BFu1c_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu7c_B  {
  unsigned char v1:1;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu1c_BFu7c_B) C1{ Fc:1 Fc:7 Fc}



static void Test_BFu1c_BFu7c_B()
{
  {
    init_simple_test("BFu1c_BFu7c_B");
    static BFu1c_BFu7c_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1c_BFu7c_B)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu7c_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1c_BFu7c_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1c_BFu7c_B");
    check_field_offset(lv, v3, 1, "BFu1c_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu7c_B(Test_BFu1c_BFu7c_B, "BFu1c_BFu7c_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu7i_B  {
  unsigned char v1:1;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu1c_BFu7i_B) C1{ Fc:1 Fi:7 Fc}



static void Test_BFu1c_BFu7i_B()
{
  {
    init_simple_test("BFu1c_BFu7i_B");
    static BFu1c_BFu7i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu7i_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1c_BFu7i_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1c_BFu7i_B");
    check_field_offset(lv, v3, 1, "BFu1c_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu7i_B(Test_BFu1c_BFu7i_B, "BFu1c_BFu7i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu7ll_B  {
  unsigned char v1:1;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu1c_BFu7ll_B) C1{ Fc:1 FL:7 Fc}



static void Test_BFu1c_BFu7ll_B()
{
  {
    init_simple_test("BFu1c_BFu7ll_B");
    static BFu1c_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu7ll_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1c_BFu7ll_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1c_BFu7ll_B");
    check_field_offset(lv, v3, 1, "BFu1c_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu7ll_B(Test_BFu1c_BFu7ll_B, "BFu1c_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu7s_B  {
  unsigned char v1:1;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu1c_BFu7s_B) C1{ Fc:1 Fs:7 Fc}



static void Test_BFu1c_BFu7s_B()
{
  {
    init_simple_test("BFu1c_BFu7s_B");
    static BFu1c_BFu7s_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1c_BFu7s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu7s_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1c_BFu7s_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1c_BFu7s_B");
    check_field_offset(lv, v3, 1, "BFu1c_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu7s_B(Test_BFu1c_BFu7s_B, "BFu1c_BFu7s_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu8c_B  {
  unsigned char v1:1;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu1c_BFu8c_B) C1{ Fc:1 Fc:8 Fc}



static void Test_BFu1c_BFu8c_B()
{
  {
    init_simple_test("BFu1c_BFu8c_B");
    static BFu1c_BFu8c_B lv;
    check2(sizeof(lv), 3, "sizeof(BFu1c_BFu8c_B)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu8c_B");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu1c_BFu8c_B");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu1c_BFu8c_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu8c_B(Test_BFu1c_BFu8c_B, "BFu1c_BFu8c_B", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu8i_B  {
  unsigned char v1:1;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu1c_BFu8i_B) C1{ Fc:1 Fi:8 Fc}



static void Test_BFu1c_BFu8i_B()
{
  {
    init_simple_test("BFu1c_BFu8i_B");
    static BFu1c_BFu8i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu8i_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1c_BFu8i_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1c_BFu8i_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu8i_B(Test_BFu1c_BFu8i_B, "BFu1c_BFu8i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu8ll_B  {
  unsigned char v1:1;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu1c_BFu8ll_B) C1{ Fc:1 FL:8 Fc}



static void Test_BFu1c_BFu8ll_B()
{
  {
    init_simple_test("BFu1c_BFu8ll_B");
    static BFu1c_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu8ll_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1c_BFu8ll_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1c_BFu8ll_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu8ll_B(Test_BFu1c_BFu8ll_B, "BFu1c_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu8s_B  {
  unsigned char v1:1;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu1c_BFu8s_B) C1{ Fc:1 Fs:8 Fc}



static void Test_BFu1c_BFu8s_B()
{
  {
    init_simple_test("BFu1c_BFu8s_B");
    static BFu1c_BFu8s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu8s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu8s_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1c_BFu8s_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1c_BFu8s_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu8s_B(Test_BFu1c_BFu8s_B, "BFu1c_BFu8s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu9i_B  {
  unsigned char v1:1;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu1c_BFu9i_B) C1{ Fc:1 Fi:9 Fc}



static void Test_BFu1c_BFu9i_B()
{
  {
    init_simple_test("BFu1c_BFu9i_B");
    static BFu1c_BFu9i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu9i_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1c_BFu9i_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1c_BFu9i_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu9i_B(Test_BFu1c_BFu9i_B, "BFu1c_BFu9i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu9ll_B  {
  unsigned char v1:1;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu1c_BFu9ll_B) C1{ Fc:1 FL:9 Fc}



static void Test_BFu1c_BFu9ll_B()
{
  {
    init_simple_test("BFu1c_BFu9ll_B");
    static BFu1c_BFu9ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1c_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu9ll_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1c_BFu9ll_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1c_BFu9ll_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu9ll_B(Test_BFu1c_BFu9ll_B, "BFu1c_BFu9ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_BFu9s_B  {
  unsigned char v1:1;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu1c_BFu9s_B) C1{ Fc:1 Fs:9 Fc}



static void Test_BFu1c_BFu9s_B()
{
  {
    init_simple_test("BFu1c_BFu9s_B");
    static BFu1c_BFu9s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1c_BFu9s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_BFu9s_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1c_BFu9s_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1c_BFu9s_B");
    check_field_offset(lv, v3, 2, "BFu1c_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_BFu9s_B(Test_BFu1c_BFu9s_B, "BFu1c_BFu9s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_C_B  {
  unsigned char v1:1;
  char v2;
  bool v3;
};
//SIG(1 BFu1c_C_B) C1{ Fc:1 Fc[2]}



static void Test_BFu1c_C_B()
{
  {
    init_simple_test("BFu1c_C_B");
    static BFu1c_C_B lv;
    check2(sizeof(lv), 3, "sizeof(BFu1c_C_B)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_C_B");
    check_field_offset(lv, v2, 1, "BFu1c_C_B.v2");
    check_field_offset(lv, v3, 2, "BFu1c_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_C_B(Test_BFu1c_C_B, "BFu1c_C_B", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_D_B  {
  unsigned char v1:1;
  double v2;
  bool v3;
};
//SIG(1 BFu1c_D_B) C1{ Fc:1 FL Fc}



static void Test_BFu1c_D_B()
{
  {
    init_simple_test("BFu1c_D_B");
    static BFu1c_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1c_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1c_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1c_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_D_B(Test_BFu1c_D_B, "BFu1c_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_F_B  {
  unsigned char v1:1;
  float v2;
  bool v3;
};
//SIG(1 BFu1c_F_B) C1{ Fc:1 Fi Fc}



static void Test_BFu1c_F_B()
{
  {
    init_simple_test("BFu1c_F_B");
    static BFu1c_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1c_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_F_B");
    check_field_offset(lv, v2, 4, "BFu1c_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu1c_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_F_B(Test_BFu1c_F_B, "BFu1c_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_I_B  {
  unsigned char v1:1;
  int v2;
  bool v3;
};
//SIG(1 BFu1c_I_B) C1{ Fc:1 Fi Fc}



static void Test_BFu1c_I_B()
{
  {
    init_simple_test("BFu1c_I_B");
    static BFu1c_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1c_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_I_B");
    check_field_offset(lv, v2, 4, "BFu1c_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu1c_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_I_B(Test_BFu1c_I_B, "BFu1c_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_Ip_B  {
  unsigned char v1:1;
  int *v2;
  bool v3;
};
//SIG(1 BFu1c_Ip_B) C1{ Fc:1 Fp Fc}



static void Test_BFu1c_Ip_B()
{
  {
    init_simple_test("BFu1c_Ip_B");
    static BFu1c_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1c_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1c_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1c_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_Ip_B(Test_BFu1c_Ip_B, "BFu1c_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_L_B  {
  unsigned char v1:1;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu1c_L_B) C1{ Fc:1 FL Fc}



static void Test_BFu1c_L_B()
{
  {
    init_simple_test("BFu1c_L_B");
    static BFu1c_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1c_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1c_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1c_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_L_B(Test_BFu1c_L_B, "BFu1c_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_S_B  {
  unsigned char v1:1;
  short v2;
  bool v3;
};
//SIG(1 BFu1c_S_B) C1{ Fc:1 Fs Fc}



static void Test_BFu1c_S_B()
{
  {
    init_simple_test("BFu1c_S_B");
    static BFu1c_S_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu1c_S_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_S_B");
    check_field_offset(lv, v2, 2, "BFu1c_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu1c_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_S_B(Test_BFu1c_S_B, "BFu1c_S_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_Uc_B  {
  unsigned char v1:1;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu1c_Uc_B) C1{ Fc:1 Fc[2]}



static void Test_BFu1c_Uc_B()
{
  {
    init_simple_test("BFu1c_Uc_B");
    static BFu1c_Uc_B lv;
    check2(sizeof(lv), 3, "sizeof(BFu1c_Uc_B)");
    check2(__alignof__(lv), 1, "__alignof__(BFu1c_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_Uc_B");
    check_field_offset(lv, v2, 1, "BFu1c_Uc_B.v2");
    check_field_offset(lv, v3, 2, "BFu1c_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_Uc_B(Test_BFu1c_Uc_B, "BFu1c_Uc_B", 3);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_Ui_B  {
  unsigned char v1:1;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu1c_Ui_B) C1{ Fc:1 Fi Fc}



static void Test_BFu1c_Ui_B()
{
  {
    init_simple_test("BFu1c_Ui_B");
    static BFu1c_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1c_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1c_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_Ui_B");
    check_field_offset(lv, v2, 4, "BFu1c_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu1c_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_Ui_B(Test_BFu1c_Ui_B, "BFu1c_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_Ul_B  {
  unsigned char v1:1;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu1c_Ul_B) C1{ Fc:1 FL Fc}



static void Test_BFu1c_Ul_B()
{
  {
    init_simple_test("BFu1c_Ul_B");
    static BFu1c_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1c_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1c_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1c_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_Ul_B(Test_BFu1c_Ul_B, "BFu1c_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_Us_B  {
  unsigned char v1:1;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu1c_Us_B) C1{ Fc:1 Fs Fc}



static void Test_BFu1c_Us_B()
{
  {
    init_simple_test("BFu1c_Us_B");
    static BFu1c_Us_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu1c_Us_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1c_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_Us_B");
    check_field_offset(lv, v2, 2, "BFu1c_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu1c_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_Us_B(Test_BFu1c_Us_B, "BFu1c_Us_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1c_Vp_B  {
  unsigned char v1:1;
  void *v2;
  bool v3;
};
//SIG(1 BFu1c_Vp_B) C1{ Fc:1 Fp Fc}



static void Test_BFu1c_Vp_B()
{
  {
    init_simple_test("BFu1c_Vp_B");
    static BFu1c_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1c_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1c_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1c_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1c_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1c_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1c_Vp_B(Test_BFu1c_Vp_B, "BFu1c_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B  {
  unsigned int v1:1;
  bool v2;
};
//SIG(1 BFu1i_B) C1{ Fi:1 Fc}



static void Test_BFu1i_B()
{
  {
    init_simple_test("BFu1i_B");
    static BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B");
    check_field_offset(lv, v2, 1, "BFu1i_B.v2");
  }
}
static Arrange_To_Call_Me vBFu1i_B(Test_BFu1i_B, "BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_B  {
  unsigned int v1:1;
  bool v2;
  bool v3;
};
//SIG(1 BFu1i_B_B) C1{ Fi:1 Fc[2]}



static void Test_BFu1i_B_B()
{
  {
    init_simple_test("BFu1i_B_B");
    static BFu1i_B_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_B");
    check_field_offset(lv, v2, 1, "BFu1i_B_B.v2");
    check_field_offset(lv, v3, 2, "BFu1i_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_B(Test_BFu1i_B_B, "BFu1i_B_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu15i  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu1i_B_BFu15i) C1{ Fi:1 Fc Fi:15}



static void Test_BFu1i_B_BFu15i()
{
  {
    init_simple_test("BFu1i_B_BFu15i");
    static BFu1i_B_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu15i");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1i_B_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1i_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu15i(Test_BFu1i_B_BFu15i, "BFu1i_B_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu15ll  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu1i_B_BFu15ll) C1{ Fi:1 Fc FL:15}



static void Test_BFu1i_B_BFu15ll()
{
  {
    init_simple_test("BFu1i_B_BFu15ll");
    static BFu1i_B_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1i_B_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1i_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu15ll(Test_BFu1i_B_BFu15ll, "BFu1i_B_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu15s  {
  unsigned int v1:1;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu1i_B_BFu15s) C1{ Fi:1 Fc Fs:15}



static void Test_BFu1i_B_BFu15s()
{
  {
    init_simple_test("BFu1i_B_BFu15s");
    static BFu1i_B_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu15s");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1i_B_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1i_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu15s(Test_BFu1i_B_BFu15s, "BFu1i_B_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu16i  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu1i_B_BFu16i) C1{ Fi:1 Fc Fi:16}



static void Test_BFu1i_B_BFu16i()
{
  {
    init_simple_test("BFu1i_B_BFu16i");
    static BFu1i_B_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu16i");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1i_B_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1i_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu16i(Test_BFu1i_B_BFu16i, "BFu1i_B_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu16ll  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu1i_B_BFu16ll) C1{ Fi:1 Fc FL:16}



static void Test_BFu1i_B_BFu16ll()
{
  {
    init_simple_test("BFu1i_B_BFu16ll");
    static BFu1i_B_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1i_B_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1i_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu16ll(Test_BFu1i_B_BFu16ll, "BFu1i_B_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu16s  {
  unsigned int v1:1;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu1i_B_BFu16s) C1{ Fi:1 Fc Fs:16}



static void Test_BFu1i_B_BFu16s()
{
  {
    init_simple_test("BFu1i_B_BFu16s");
    static BFu1i_B_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu16s");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1i_B_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1i_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu16s(Test_BFu1i_B_BFu16s, "BFu1i_B_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu17i  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu1i_B_BFu17i) C1{ Fi:1 Fc Fi:17}



static void Test_BFu1i_B_BFu17i()
{
  {
    init_simple_test("BFu1i_B_BFu17i");
    static BFu1i_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu17i");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu1i_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu1i_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu17i(Test_BFu1i_B_BFu17i, "BFu1i_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu17ll  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu1i_B_BFu17ll) C1{ Fi:1 Fc FL:17}



static void Test_BFu1i_B_BFu17ll()
{
  {
    init_simple_test("BFu1i_B_BFu17ll");
    static BFu1i_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu1i_B_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu1i_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu17ll(Test_BFu1i_B_BFu17ll, "BFu1i_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu1c  {
  unsigned int v1:1;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu1i_B_BFu1c) C1{ Fi:1 Fc Fc:1}



static void Test_BFu1i_B_BFu1c()
{
  {
    init_simple_test("BFu1i_B_BFu1c");
    static BFu1i_B_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu1c");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1i_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu1c(Test_BFu1i_B_BFu1c, "BFu1i_B_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu1i  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu1i_B_BFu1i) C1{ Fi:1 Fc Fi:1}



static void Test_BFu1i_B_BFu1i()
{
  {
    init_simple_test("BFu1i_B_BFu1i");
    static BFu1i_B_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu1i");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1i_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu1i(Test_BFu1i_B_BFu1i, "BFu1i_B_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu1ll  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu1i_B_BFu1ll) C1{ Fi:1 Fc FL:1}



static void Test_BFu1i_B_BFu1ll()
{
  {
    init_simple_test("BFu1i_B_BFu1ll");
    static BFu1i_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1i_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu1ll(Test_BFu1i_B_BFu1ll, "BFu1i_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu1s  {
  unsigned int v1:1;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu1i_B_BFu1s) C1{ Fi:1 Fc Fs:1}



static void Test_BFu1i_B_BFu1s()
{
  {
    init_simple_test("BFu1i_B_BFu1s");
    static BFu1i_B_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu1s");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1i_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu1s(Test_BFu1i_B_BFu1s, "BFu1i_B_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu31i  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu1i_B_BFu31i) C1{ Fi:1 Fc Fi:31}



static void Test_BFu1i_B_BFu31i()
{
  {
    init_simple_test("BFu1i_B_BFu31i");
    static BFu1i_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu31i");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu1i_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu1i_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu31i(Test_BFu1i_B_BFu31i, "BFu1i_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu31ll  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu1i_B_BFu31ll) C1{ Fi:1 Fc FL:31}



static void Test_BFu1i_B_BFu31ll()
{
  {
    init_simple_test("BFu1i_B_BFu31ll");
    static BFu1i_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu1i_B_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu1i_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu31ll(Test_BFu1i_B_BFu31ll, "BFu1i_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu32i  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu1i_B_BFu32i) C1{ Fi:1 Fc Fi:32}



static void Test_BFu1i_B_BFu32i()
{
  {
    init_simple_test("BFu1i_B_BFu32i");
    static BFu1i_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu32i");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu1i_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu1i_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu32i(Test_BFu1i_B_BFu32i, "BFu1i_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu32ll  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu1i_B_BFu32ll) C1{ Fi:1 Fc FL:32}



static void Test_BFu1i_B_BFu32ll()
{
  {
    init_simple_test("BFu1i_B_BFu32ll");
    static BFu1i_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu1i_B_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu1i_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu32ll(Test_BFu1i_B_BFu32ll, "BFu1i_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu33  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu1i_B_BFu33) C1{ Fi:1 Fc FL:33}



static void Test_BFu1i_B_BFu33()
{
  {
    init_simple_test("BFu1i_B_BFu33");
    static BFu1i_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu33");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu1i_B_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu1i_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu33(Test_BFu1i_B_BFu33, "BFu1i_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu7c  {
  unsigned int v1:1;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu1i_B_BFu7c) C1{ Fi:1 Fc Fc:7}



static void Test_BFu1i_B_BFu7c()
{
  {
    init_simple_test("BFu1i_B_BFu7c");
    static BFu1i_B_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu7c");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1i_B_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1i_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu7c(Test_BFu1i_B_BFu7c, "BFu1i_B_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu7i  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu1i_B_BFu7i) C1{ Fi:1 Fc Fi:7}



static void Test_BFu1i_B_BFu7i()
{
  {
    init_simple_test("BFu1i_B_BFu7i");
    static BFu1i_B_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu7i");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1i_B_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1i_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu7i(Test_BFu1i_B_BFu7i, "BFu1i_B_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu7ll  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu1i_B_BFu7ll) C1{ Fi:1 Fc FL:7}



static void Test_BFu1i_B_BFu7ll()
{
  {
    init_simple_test("BFu1i_B_BFu7ll");
    static BFu1i_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1i_B_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1i_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu7ll(Test_BFu1i_B_BFu7ll, "BFu1i_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu7s  {
  unsigned int v1:1;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu1i_B_BFu7s) C1{ Fi:1 Fc Fs:7}



static void Test_BFu1i_B_BFu7s()
{
  {
    init_simple_test("BFu1i_B_BFu7s");
    static BFu1i_B_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu7s");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1i_B_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1i_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu7s(Test_BFu1i_B_BFu7s, "BFu1i_B_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu8c  {
  unsigned int v1:1;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu1i_B_BFu8c) C1{ Fi:1 Fc Fc:8}



static void Test_BFu1i_B_BFu8c()
{
  {
    init_simple_test("BFu1i_B_BFu8c");
    static BFu1i_B_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu8c");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1i_B_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1i_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu8c(Test_BFu1i_B_BFu8c, "BFu1i_B_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu8i  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu1i_B_BFu8i) C1{ Fi:1 Fc Fi:8}



static void Test_BFu1i_B_BFu8i()
{
  {
    init_simple_test("BFu1i_B_BFu8i");
    static BFu1i_B_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu8i");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1i_B_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1i_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu8i(Test_BFu1i_B_BFu8i, "BFu1i_B_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu8ll  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu1i_B_BFu8ll) C1{ Fi:1 Fc FL:8}



static void Test_BFu1i_B_BFu8ll()
{
  {
    init_simple_test("BFu1i_B_BFu8ll");
    static BFu1i_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1i_B_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1i_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu8ll(Test_BFu1i_B_BFu8ll, "BFu1i_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu8s  {
  unsigned int v1:1;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu1i_B_BFu8s) C1{ Fi:1 Fc Fs:8}



static void Test_BFu1i_B_BFu8s()
{
  {
    init_simple_test("BFu1i_B_BFu8s");
    static BFu1i_B_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu8s");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1i_B_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1i_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu8s(Test_BFu1i_B_BFu8s, "BFu1i_B_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu9i  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu1i_B_BFu9i) C1{ Fi:1 Fc Fi:9}



static void Test_BFu1i_B_BFu9i()
{
  {
    init_simple_test("BFu1i_B_BFu9i");
    static BFu1i_B_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu9i");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1i_B_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1i_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu9i(Test_BFu1i_B_BFu9i, "BFu1i_B_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu9ll  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu1i_B_BFu9ll) C1{ Fi:1 Fc FL:9}



static void Test_BFu1i_B_BFu9ll()
{
  {
    init_simple_test("BFu1i_B_BFu9ll");
    static BFu1i_B_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1i_B_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1i_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu9ll(Test_BFu1i_B_BFu9ll, "BFu1i_B_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_BFu9s  {
  unsigned int v1:1;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu1i_B_BFu9s) C1{ Fi:1 Fc Fs:9}



static void Test_BFu1i_B_BFu9s()
{
  {
    init_simple_test("BFu1i_B_BFu9s");
    static BFu1i_B_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_BFu9s");
    check_field_offset(lv, v2, 1, "BFu1i_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1i_B_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1i_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu1i_B_BFu9s(Test_BFu1i_B_BFu9s, "BFu1i_B_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_C  {
  unsigned int v1:1;
  bool v2;
  char v3;
};
//SIG(1 BFu1i_B_C) C1{ Fi:1 Fc[2]}



static void Test_BFu1i_B_C()
{
  {
    init_simple_test("BFu1i_B_C");
    static BFu1i_B_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_C");
    check_field_offset(lv, v2, 1, "BFu1i_B_C.v2");
    check_field_offset(lv, v3, 2, "BFu1i_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_C(Test_BFu1i_B_C, "BFu1i_B_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_D  {
  unsigned int v1:1;
  bool v2;
  double v3;
};
//SIG(1 BFu1i_B_D) C1{ Fi:1 Fc FL}



static void Test_BFu1i_B_D()
{
  {
    init_simple_test("BFu1i_B_D");
    static BFu1i_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1i_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_D");
    check_field_offset(lv, v2, 1, "BFu1i_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1i_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_D(Test_BFu1i_B_D, "BFu1i_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_F  {
  unsigned int v1:1;
  bool v2;
  float v3;
};
//SIG(1 BFu1i_B_F) C1{ Fi:1 Fc Fi}



static void Test_BFu1i_B_F()
{
  {
    init_simple_test("BFu1i_B_F");
    static BFu1i_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_F");
    check_field_offset(lv, v2, 1, "BFu1i_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu1i_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_F(Test_BFu1i_B_F, "BFu1i_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_I  {
  unsigned int v1:1;
  bool v2;
  int v3;
};
//SIG(1 BFu1i_B_I) C1{ Fi:1 Fc Fi}



static void Test_BFu1i_B_I()
{
  {
    init_simple_test("BFu1i_B_I");
    static BFu1i_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_I");
    check_field_offset(lv, v2, 1, "BFu1i_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu1i_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_I(Test_BFu1i_B_I, "BFu1i_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_Ip  {
  unsigned int v1:1;
  bool v2;
  int *v3;
};
//SIG(1 BFu1i_B_Ip) C1{ Fi:1 Fc Fp}



static void Test_BFu1i_B_Ip()
{
  {
    init_simple_test("BFu1i_B_Ip");
    static BFu1i_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1i_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_Ip");
    check_field_offset(lv, v2, 1, "BFu1i_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1i_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_Ip(Test_BFu1i_B_Ip, "BFu1i_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_L  {
  unsigned int v1:1;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu1i_B_L) C1{ Fi:1 Fc FL}



static void Test_BFu1i_B_L()
{
  {
    init_simple_test("BFu1i_B_L");
    static BFu1i_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1i_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_L");
    check_field_offset(lv, v2, 1, "BFu1i_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1i_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_L(Test_BFu1i_B_L, "BFu1i_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_S  {
  unsigned int v1:1;
  bool v2;
  short v3;
};
//SIG(1 BFu1i_B_S) C1{ Fi:1 Fc Fs}



static void Test_BFu1i_B_S()
{
  {
    init_simple_test("BFu1i_B_S");
    static BFu1i_B_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_S");
    check_field_offset(lv, v2, 1, "BFu1i_B_S.v2");
    check_field_offset(lv, v3, 2, "BFu1i_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_S(Test_BFu1i_B_S, "BFu1i_B_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_Uc  {
  unsigned int v1:1;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu1i_B_Uc) C1{ Fi:1 Fc[2]}



static void Test_BFu1i_B_Uc()
{
  {
    init_simple_test("BFu1i_B_Uc");
    static BFu1i_B_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_Uc");
    check_field_offset(lv, v2, 1, "BFu1i_B_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu1i_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_Uc(Test_BFu1i_B_Uc, "BFu1i_B_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_Ui  {
  unsigned int v1:1;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu1i_B_Ui) C1{ Fi:1 Fc Fi}



static void Test_BFu1i_B_Ui()
{
  {
    init_simple_test("BFu1i_B_Ui");
    static BFu1i_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_Ui");
    check_field_offset(lv, v2, 1, "BFu1i_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu1i_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_Ui(Test_BFu1i_B_Ui, "BFu1i_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_Ul  {
  unsigned int v1:1;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu1i_B_Ul) C1{ Fi:1 Fc FL}



static void Test_BFu1i_B_Ul()
{
  {
    init_simple_test("BFu1i_B_Ul");
    static BFu1i_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1i_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_Ul");
    check_field_offset(lv, v2, 1, "BFu1i_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1i_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_Ul(Test_BFu1i_B_Ul, "BFu1i_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_Us  {
  unsigned int v1:1;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu1i_B_Us) C1{ Fi:1 Fc Fs}



static void Test_BFu1i_B_Us()
{
  {
    init_simple_test("BFu1i_B_Us");
    static BFu1i_B_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_B_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_Us");
    check_field_offset(lv, v2, 1, "BFu1i_B_Us.v2");
    check_field_offset(lv, v3, 2, "BFu1i_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_Us(Test_BFu1i_B_Us, "BFu1i_B_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_B_Vp  {
  unsigned int v1:1;
  bool v2;
  void *v3;
};
//SIG(1 BFu1i_B_Vp) C1{ Fi:1 Fc Fp}



static void Test_BFu1i_B_Vp()
{
  {
    init_simple_test("BFu1i_B_Vp");
    static BFu1i_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1i_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_B_Vp");
    check_field_offset(lv, v2, 1, "BFu1i_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1i_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_B_Vp(Test_BFu1i_B_Vp, "BFu1i_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu15i_B  {
  unsigned int v1:1;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu1i_BFu15i_B) C1{ Fi:1 Fi:15 Fc}



static void Test_BFu1i_BFu15i_B()
{
  {
    init_simple_test("BFu1i_BFu15i_B");
    static BFu1i_BFu15i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu15i_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1i_BFu15i_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1i_BFu15i_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu15i_B(Test_BFu1i_BFu15i_B, "BFu1i_BFu15i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu15ll_B  {
  unsigned int v1:1;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu1i_BFu15ll_B) C1{ Fi:1 FL:15 Fc}



static void Test_BFu1i_BFu15ll_B()
{
  {
    init_simple_test("BFu1i_BFu15ll_B");
    static BFu1i_BFu15ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu15ll_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1i_BFu15ll_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1i_BFu15ll_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu15ll_B(Test_BFu1i_BFu15ll_B, "BFu1i_BFu15ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu15s_B  {
  unsigned int v1:1;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu1i_BFu15s_B) C1{ Fi:1 Fs:15 Fc}



static void Test_BFu1i_BFu15s_B()
{
  {
    init_simple_test("BFu1i_BFu15s_B");
    static BFu1i_BFu15s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu15s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu15s_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1i_BFu15s_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1i_BFu15s_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu15s_B(Test_BFu1i_BFu15s_B, "BFu1i_BFu15s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu16i_B  {
  unsigned int v1:1;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu1i_BFu16i_B) C1{ Fi:1 Fi:16 Fc}



static void Test_BFu1i_BFu16i_B()
{
  {
    init_simple_test("BFu1i_BFu16i_B");
    static BFu1i_BFu16i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu16i_B");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu1i_BFu16i_B");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu1i_BFu16i_B");
    check_field_offset(lv, v3, 3, "BFu1i_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu16i_B(Test_BFu1i_BFu16i_B, "BFu1i_BFu16i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu16ll_B  {
  unsigned int v1:1;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu1i_BFu16ll_B) C1{ Fi:1 FL:16 Fc}



static void Test_BFu1i_BFu16ll_B()
{
  {
    init_simple_test("BFu1i_BFu16ll_B");
    static BFu1i_BFu16ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu16ll_B");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu1i_BFu16ll_B");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu1i_BFu16ll_B");
    check_field_offset(lv, v3, 3, "BFu1i_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu16ll_B(Test_BFu1i_BFu16ll_B, "BFu1i_BFu16ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu16s_B  {
  unsigned int v1:1;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu1i_BFu16s_B) C1{ Fi:1 Fs:16 Fc}



static void Test_BFu1i_BFu16s_B()
{
  {
    init_simple_test("BFu1i_BFu16s_B");
    static BFu1i_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_BFu16s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu1i_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu1i_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu1i_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu16s_B(Test_BFu1i_BFu16s_B, "BFu1i_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu17i_B  {
  unsigned int v1:1;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu1i_BFu17i_B) C1{ Fi:1 Fi:17 Fc}



static void Test_BFu1i_BFu17i_B()
{
  {
    init_simple_test("BFu1i_BFu17i_B");
    static BFu1i_BFu17i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu17i_B");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu1i_BFu17i_B");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu1i_BFu17i_B");
    check_field_offset(lv, v3, 3, "BFu1i_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu17i_B(Test_BFu1i_BFu17i_B, "BFu1i_BFu17i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu17ll_B  {
  unsigned int v1:1;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu1i_BFu17ll_B) C1{ Fi:1 FL:17 Fc}



static void Test_BFu1i_BFu17ll_B()
{
  {
    init_simple_test("BFu1i_BFu17ll_B");
    static BFu1i_BFu17ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu17ll_B");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu1i_BFu17ll_B");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu1i_BFu17ll_B");
    check_field_offset(lv, v3, 3, "BFu1i_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu17ll_B(Test_BFu1i_BFu17ll_B, "BFu1i_BFu17ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu1c_B  {
  unsigned int v1:1;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu1i_BFu1c_B) C1{ Fi:1 Fc:1 Fc}



static void Test_BFu1i_BFu1c_B()
{
  {
    init_simple_test("BFu1i_BFu1c_B");
    static BFu1i_BFu1c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu1c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu1c_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1i_BFu1c_B");
    check_field_offset(lv, v3, 1, "BFu1i_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu1c_B(Test_BFu1i_BFu1c_B, "BFu1i_BFu1c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu1i_B  {
  unsigned int v1:1;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu1i_BFu1i_B) C1{ Fi:1 Fi:1 Fc}



static void Test_BFu1i_BFu1i_B()
{
  {
    init_simple_test("BFu1i_BFu1i_B");
    static BFu1i_BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu1i_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1i_BFu1i_B");
    check_field_offset(lv, v3, 1, "BFu1i_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu1i_B(Test_BFu1i_BFu1i_B, "BFu1i_BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu1ll_B  {
  unsigned int v1:1;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu1i_BFu1ll_B) C1{ Fi:1 FL:1 Fc}



static void Test_BFu1i_BFu1ll_B()
{
  {
    init_simple_test("BFu1i_BFu1ll_B");
    static BFu1i_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu1ll_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1i_BFu1ll_B");
    check_field_offset(lv, v3, 1, "BFu1i_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu1ll_B(Test_BFu1i_BFu1ll_B, "BFu1i_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu1s_B  {
  unsigned int v1:1;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu1i_BFu1s_B) C1{ Fi:1 Fs:1 Fc}



static void Test_BFu1i_BFu1s_B()
{
  {
    init_simple_test("BFu1i_BFu1s_B");
    static BFu1i_BFu1s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu1s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu1s_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1i_BFu1s_B");
    check_field_offset(lv, v3, 1, "BFu1i_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu1s_B(Test_BFu1i_BFu1s_B, "BFu1i_BFu1s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu31i_B  {
  unsigned int v1:1;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu1i_BFu31i_B) C1{ Fi:1 Fi:31 Fc}



static void Test_BFu1i_BFu31i_B()
{
  {
    init_simple_test("BFu1i_BFu31i_B");
    static BFu1i_BFu31i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu31i_B");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu1i_BFu31i_B");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu1i_BFu31i_B");
    check_field_offset(lv, v3, 4, "BFu1i_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu31i_B(Test_BFu1i_BFu31i_B, "BFu1i_BFu31i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu31ll_B  {
  unsigned int v1:1;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu1i_BFu31ll_B) C1{ Fi:1 FL:31 Fc}



static void Test_BFu1i_BFu31ll_B()
{
  {
    init_simple_test("BFu1i_BFu31ll_B");
    static BFu1i_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu31ll_B");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu1i_BFu31ll_B");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu1i_BFu31ll_B");
    check_field_offset(lv, v3, 4, "BFu1i_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu31ll_B(Test_BFu1i_BFu31ll_B, "BFu1i_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu32i_B  {
  unsigned int v1:1;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu1i_BFu32i_B) C1{ Fi:1 Fi:32 Fc}



static void Test_BFu1i_BFu32i_B()
{
  {
    init_simple_test("BFu1i_BFu32i_B");
    static BFu1i_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1i_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu1i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu1i_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu1i_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu32i_B(Test_BFu1i_BFu32i_B, "BFu1i_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu32ll_B  {
  unsigned int v1:1;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu1i_BFu32ll_B) C1{ Fi:1 FL:32 Fc}



static void Test_BFu1i_BFu32ll_B()
{
  {
    init_simple_test("BFu1i_BFu32ll_B");
    static BFu1i_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu32ll_B");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu1i_BFu32ll_B");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu1i_BFu32ll_B");
    check_field_offset(lv, v3, 5, "BFu1i_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu32ll_B(Test_BFu1i_BFu32ll_B, "BFu1i_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu33_B  {
  unsigned int v1:1;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu1i_BFu33_B) C1{ Fi:1 FL:33 Fc}



static void Test_BFu1i_BFu33_B()
{
  {
    init_simple_test("BFu1i_BFu33_B");
    static BFu1i_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu33_B");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu1i_BFu33_B");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu1i_BFu33_B");
    check_field_offset(lv, v3, 5, "BFu1i_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu33_B(Test_BFu1i_BFu33_B, "BFu1i_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu7c_B  {
  unsigned int v1:1;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu1i_BFu7c_B) C1{ Fi:1 Fc:7 Fc}



static void Test_BFu1i_BFu7c_B()
{
  {
    init_simple_test("BFu1i_BFu7c_B");
    static BFu1i_BFu7c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu7c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu7c_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1i_BFu7c_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1i_BFu7c_B");
    check_field_offset(lv, v3, 1, "BFu1i_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu7c_B(Test_BFu1i_BFu7c_B, "BFu1i_BFu7c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu7i_B  {
  unsigned int v1:1;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu1i_BFu7i_B) C1{ Fi:1 Fi:7 Fc}



static void Test_BFu1i_BFu7i_B()
{
  {
    init_simple_test("BFu1i_BFu7i_B");
    static BFu1i_BFu7i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu7i_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1i_BFu7i_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1i_BFu7i_B");
    check_field_offset(lv, v3, 1, "BFu1i_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu7i_B(Test_BFu1i_BFu7i_B, "BFu1i_BFu7i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu7ll_B  {
  unsigned int v1:1;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu1i_BFu7ll_B) C1{ Fi:1 FL:7 Fc}



static void Test_BFu1i_BFu7ll_B()
{
  {
    init_simple_test("BFu1i_BFu7ll_B");
    static BFu1i_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu7ll_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1i_BFu7ll_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1i_BFu7ll_B");
    check_field_offset(lv, v3, 1, "BFu1i_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu7ll_B(Test_BFu1i_BFu7ll_B, "BFu1i_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu7s_B  {
  unsigned int v1:1;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu1i_BFu7s_B) C1{ Fi:1 Fs:7 Fc}



static void Test_BFu1i_BFu7s_B()
{
  {
    init_simple_test("BFu1i_BFu7s_B");
    static BFu1i_BFu7s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu7s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu7s_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1i_BFu7s_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1i_BFu7s_B");
    check_field_offset(lv, v3, 1, "BFu1i_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu7s_B(Test_BFu1i_BFu7s_B, "BFu1i_BFu7s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu8c_B  {
  unsigned int v1:1;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu1i_BFu8c_B) C1{ Fi:1 Fc:8 Fc}



static void Test_BFu1i_BFu8c_B()
{
  {
    init_simple_test("BFu1i_BFu8c_B");
    static BFu1i_BFu8c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu8c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu8c_B");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu1i_BFu8c_B");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu1i_BFu8c_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu8c_B(Test_BFu1i_BFu8c_B, "BFu1i_BFu8c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu8i_B  {
  unsigned int v1:1;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu1i_BFu8i_B) C1{ Fi:1 Fi:8 Fc}



static void Test_BFu1i_BFu8i_B()
{
  {
    init_simple_test("BFu1i_BFu8i_B");
    static BFu1i_BFu8i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu8i_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1i_BFu8i_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1i_BFu8i_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu8i_B(Test_BFu1i_BFu8i_B, "BFu1i_BFu8i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu8ll_B  {
  unsigned int v1:1;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu1i_BFu8ll_B) C1{ Fi:1 FL:8 Fc}



static void Test_BFu1i_BFu8ll_B()
{
  {
    init_simple_test("BFu1i_BFu8ll_B");
    static BFu1i_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu8ll_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1i_BFu8ll_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1i_BFu8ll_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu8ll_B(Test_BFu1i_BFu8ll_B, "BFu1i_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu8s_B  {
  unsigned int v1:1;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu1i_BFu8s_B) C1{ Fi:1 Fs:8 Fc}



static void Test_BFu1i_BFu8s_B()
{
  {
    init_simple_test("BFu1i_BFu8s_B");
    static BFu1i_BFu8s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu8s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu8s_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1i_BFu8s_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1i_BFu8s_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu8s_B(Test_BFu1i_BFu8s_B, "BFu1i_BFu8s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu9i_B  {
  unsigned int v1:1;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu1i_BFu9i_B) C1{ Fi:1 Fi:9 Fc}



static void Test_BFu1i_BFu9i_B()
{
  {
    init_simple_test("BFu1i_BFu9i_B");
    static BFu1i_BFu9i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu9i_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1i_BFu9i_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1i_BFu9i_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu9i_B(Test_BFu1i_BFu9i_B, "BFu1i_BFu9i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu9ll_B  {
  unsigned int v1:1;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu1i_BFu9ll_B) C1{ Fi:1 FL:9 Fc}



static void Test_BFu1i_BFu9ll_B()
{
  {
    init_simple_test("BFu1i_BFu9ll_B");
    static BFu1i_BFu9ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1i_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu9ll_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1i_BFu9ll_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1i_BFu9ll_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu9ll_B(Test_BFu1i_BFu9ll_B, "BFu1i_BFu9ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_BFu9s_B  {
  unsigned int v1:1;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu1i_BFu9s_B) C1{ Fi:1 Fs:9 Fc}



static void Test_BFu1i_BFu9s_B()
{
  {
    init_simple_test("BFu1i_BFu9s_B");
    static BFu1i_BFu9s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_BFu9s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_BFu9s_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1i_BFu9s_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1i_BFu9s_B");
    check_field_offset(lv, v3, 2, "BFu1i_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_BFu9s_B(Test_BFu1i_BFu9s_B, "BFu1i_BFu9s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_C_B  {
  unsigned int v1:1;
  char v2;
  bool v3;
};
//SIG(1 BFu1i_C_B) C1{ Fi:1 Fc[2]}



static void Test_BFu1i_C_B()
{
  {
    init_simple_test("BFu1i_C_B");
    static BFu1i_C_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_C_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_C_B");
    check_field_offset(lv, v2, 1, "BFu1i_C_B.v2");
    check_field_offset(lv, v3, 2, "BFu1i_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_C_B(Test_BFu1i_C_B, "BFu1i_C_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_D_B  {
  unsigned int v1:1;
  double v2;
  bool v3;
};
//SIG(1 BFu1i_D_B) C1{ Fi:1 FL Fc}



static void Test_BFu1i_D_B()
{
  {
    init_simple_test("BFu1i_D_B");
    static BFu1i_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1i_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1i_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1i_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_D_B(Test_BFu1i_D_B, "BFu1i_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_F_B  {
  unsigned int v1:1;
  float v2;
  bool v3;
};
//SIG(1 BFu1i_F_B) C1{ Fi:1 Fi Fc}



static void Test_BFu1i_F_B()
{
  {
    init_simple_test("BFu1i_F_B");
    static BFu1i_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1i_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_F_B");
    check_field_offset(lv, v2, 4, "BFu1i_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu1i_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_F_B(Test_BFu1i_F_B, "BFu1i_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_I_B  {
  unsigned int v1:1;
  int v2;
  bool v3;
};
//SIG(1 BFu1i_I_B) C1{ Fi:1 Fi Fc}



static void Test_BFu1i_I_B()
{
  {
    init_simple_test("BFu1i_I_B");
    static BFu1i_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1i_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_I_B");
    check_field_offset(lv, v2, 4, "BFu1i_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu1i_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_I_B(Test_BFu1i_I_B, "BFu1i_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_Ip_B  {
  unsigned int v1:1;
  int *v2;
  bool v3;
};
//SIG(1 BFu1i_Ip_B) C1{ Fi:1 Fp Fc}



static void Test_BFu1i_Ip_B()
{
  {
    init_simple_test("BFu1i_Ip_B");
    static BFu1i_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1i_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1i_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1i_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_Ip_B(Test_BFu1i_Ip_B, "BFu1i_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_L_B  {
  unsigned int v1:1;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu1i_L_B) C1{ Fi:1 FL Fc}



static void Test_BFu1i_L_B()
{
  {
    init_simple_test("BFu1i_L_B");
    static BFu1i_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1i_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1i_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1i_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_L_B(Test_BFu1i_L_B, "BFu1i_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_S_B  {
  unsigned int v1:1;
  short v2;
  bool v3;
};
//SIG(1 BFu1i_S_B) C1{ Fi:1 Fs Fc}



static void Test_BFu1i_S_B()
{
  {
    init_simple_test("BFu1i_S_B");
    static BFu1i_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_S_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_S_B");
    check_field_offset(lv, v2, 2, "BFu1i_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu1i_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_S_B(Test_BFu1i_S_B, "BFu1i_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_Uc_B  {
  unsigned int v1:1;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu1i_Uc_B) C1{ Fi:1 Fc[2]}



static void Test_BFu1i_Uc_B()
{
  {
    init_simple_test("BFu1i_Uc_B");
    static BFu1i_Uc_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1i_Uc_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_Uc_B");
    check_field_offset(lv, v2, 1, "BFu1i_Uc_B.v2");
    check_field_offset(lv, v3, 2, "BFu1i_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_Uc_B(Test_BFu1i_Uc_B, "BFu1i_Uc_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_Ui_B  {
  unsigned int v1:1;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu1i_Ui_B) C1{ Fi:1 Fi Fc}



static void Test_BFu1i_Ui_B()
{
  {
    init_simple_test("BFu1i_Ui_B");
    static BFu1i_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1i_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_Ui_B");
    check_field_offset(lv, v2, 4, "BFu1i_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu1i_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_Ui_B(Test_BFu1i_Ui_B, "BFu1i_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_Ul_B  {
  unsigned int v1:1;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu1i_Ul_B) C1{ Fi:1 FL Fc}



static void Test_BFu1i_Ul_B()
{
  {
    init_simple_test("BFu1i_Ul_B");
    static BFu1i_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1i_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1i_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1i_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_Ul_B(Test_BFu1i_Ul_B, "BFu1i_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_Us_B  {
  unsigned int v1:1;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu1i_Us_B) C1{ Fi:1 Fs Fc}



static void Test_BFu1i_Us_B()
{
  {
    init_simple_test("BFu1i_Us_B");
    static BFu1i_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1i_Us_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1i_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_Us_B");
    check_field_offset(lv, v2, 2, "BFu1i_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu1i_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_Us_B(Test_BFu1i_Us_B, "BFu1i_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1i_Vp_B  {
  unsigned int v1:1;
  void *v2;
  bool v3;
};
//SIG(1 BFu1i_Vp_B) C1{ Fi:1 Fp Fc}



static void Test_BFu1i_Vp_B()
{
  {
    init_simple_test("BFu1i_Vp_B");
    static BFu1i_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1i_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1i_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1i_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1i_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1i_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1i_Vp_B(Test_BFu1i_Vp_B, "BFu1i_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B  {
  __tsu64 v1:1;
  bool v2;
};
//SIG(1 BFu1ll_B) C1{ FL:1 Fc}



static void Test_BFu1ll_B()
{
  {
    init_simple_test("BFu1ll_B");
    static BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B");
    check_field_offset(lv, v2, 1, "BFu1ll_B.v2");
  }
}
static Arrange_To_Call_Me vBFu1ll_B(Test_BFu1ll_B, "BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_B  {
  __tsu64 v1:1;
  bool v2;
  bool v3;
};
//SIG(1 BFu1ll_B_B) C1{ FL:1 Fc[2]}



static void Test_BFu1ll_B_B()
{
  {
    init_simple_test("BFu1ll_B_B");
    static BFu1ll_B_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_B");
    check_field_offset(lv, v2, 1, "BFu1ll_B_B.v2");
    check_field_offset(lv, v3, 2, "BFu1ll_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_B(Test_BFu1ll_B_B, "BFu1ll_B_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu15i  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu1ll_B_BFu15i) C1{ FL:1 Fc Fi:15}



static void Test_BFu1ll_B_BFu15i()
{
  {
    init_simple_test("BFu1ll_B_BFu15i");
    static BFu1ll_B_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu15i");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1ll_B_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1ll_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu15i(Test_BFu1ll_B_BFu15i, "BFu1ll_B_BFu15i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu15ll  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu1ll_B_BFu15ll) C1{ FL:1 Fc FL:15}



static void Test_BFu1ll_B_BFu15ll()
{
  {
    init_simple_test("BFu1ll_B_BFu15ll");
    static BFu1ll_B_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1ll_B_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1ll_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu15ll(Test_BFu1ll_B_BFu15ll, "BFu1ll_B_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu15s  {
  __tsu64 v1:1;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu1ll_B_BFu15s) C1{ FL:1 Fc Fs:15}



static void Test_BFu1ll_B_BFu15s()
{
  {
    init_simple_test("BFu1ll_B_BFu15s");
    static BFu1ll_B_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu15s");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1ll_B_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1ll_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu15s(Test_BFu1ll_B_BFu15s, "BFu1ll_B_BFu15s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu16i  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu1ll_B_BFu16i) C1{ FL:1 Fc Fi:16}



static void Test_BFu1ll_B_BFu16i()
{
  {
    init_simple_test("BFu1ll_B_BFu16i");
    static BFu1ll_B_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu16i");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1ll_B_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1ll_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu16i(Test_BFu1ll_B_BFu16i, "BFu1ll_B_BFu16i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu16ll  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu1ll_B_BFu16ll) C1{ FL:1 Fc FL:16}



static void Test_BFu1ll_B_BFu16ll()
{
  {
    init_simple_test("BFu1ll_B_BFu16ll");
    static BFu1ll_B_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1ll_B_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1ll_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu16ll(Test_BFu1ll_B_BFu16ll, "BFu1ll_B_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu16s  {
  __tsu64 v1:1;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu1ll_B_BFu16s) C1{ FL:1 Fc Fs:16}



static void Test_BFu1ll_B_BFu16s()
{
  {
    init_simple_test("BFu1ll_B_BFu16s");
    static BFu1ll_B_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu16s");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1ll_B_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1ll_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu16s(Test_BFu1ll_B_BFu16s, "BFu1ll_B_BFu16s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu17i  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu1ll_B_BFu17i) C1{ FL:1 Fc Fi:17}



static void Test_BFu1ll_B_BFu17i()
{
  {
    init_simple_test("BFu1ll_B_BFu17i");
    static BFu1ll_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu17i");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu1ll_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu1ll_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu17i(Test_BFu1ll_B_BFu17i, "BFu1ll_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu17ll  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu1ll_B_BFu17ll) C1{ FL:1 Fc FL:17}



static void Test_BFu1ll_B_BFu17ll()
{
  {
    init_simple_test("BFu1ll_B_BFu17ll");
    static BFu1ll_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu1ll_B_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu1ll_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu17ll(Test_BFu1ll_B_BFu17ll, "BFu1ll_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu1c  {
  __tsu64 v1:1;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu1ll_B_BFu1c) C1{ FL:1 Fc Fc:1}



static void Test_BFu1ll_B_BFu1c()
{
  {
    init_simple_test("BFu1ll_B_BFu1c");
    static BFu1ll_B_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu1c");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1ll_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu1c(Test_BFu1ll_B_BFu1c, "BFu1ll_B_BFu1c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu1i  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu1ll_B_BFu1i) C1{ FL:1 Fc Fi:1}



static void Test_BFu1ll_B_BFu1i()
{
  {
    init_simple_test("BFu1ll_B_BFu1i");
    static BFu1ll_B_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu1i");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1ll_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu1i(Test_BFu1ll_B_BFu1i, "BFu1ll_B_BFu1i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu1ll  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu1ll_B_BFu1ll) C1{ FL:1 Fc FL:1}



static void Test_BFu1ll_B_BFu1ll()
{
  {
    init_simple_test("BFu1ll_B_BFu1ll");
    static BFu1ll_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1ll_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu1ll(Test_BFu1ll_B_BFu1ll, "BFu1ll_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu1s  {
  __tsu64 v1:1;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu1ll_B_BFu1s) C1{ FL:1 Fc Fs:1}



static void Test_BFu1ll_B_BFu1s()
{
  {
    init_simple_test("BFu1ll_B_BFu1s");
    static BFu1ll_B_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu1s");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1ll_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu1s(Test_BFu1ll_B_BFu1s, "BFu1ll_B_BFu1s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu31i  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu1ll_B_BFu31i) C1{ FL:1 Fc Fi:31}



static void Test_BFu1ll_B_BFu31i()
{
  {
    init_simple_test("BFu1ll_B_BFu31i");
    static BFu1ll_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu31i");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu1ll_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu1ll_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu31i(Test_BFu1ll_B_BFu31i, "BFu1ll_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu31ll  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu1ll_B_BFu31ll) C1{ FL:1 Fc FL:31}



static void Test_BFu1ll_B_BFu31ll()
{
  {
    init_simple_test("BFu1ll_B_BFu31ll");
    static BFu1ll_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu1ll_B_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu1ll_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu31ll(Test_BFu1ll_B_BFu31ll, "BFu1ll_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu32i  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu1ll_B_BFu32i) C1{ FL:1 Fc Fi:32}



static void Test_BFu1ll_B_BFu32i()
{
  {
    init_simple_test("BFu1ll_B_BFu32i");
    static BFu1ll_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu32i");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu1ll_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu1ll_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu32i(Test_BFu1ll_B_BFu32i, "BFu1ll_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu32ll  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu1ll_B_BFu32ll) C1{ FL:1 Fc FL:32}



static void Test_BFu1ll_B_BFu32ll()
{
  {
    init_simple_test("BFu1ll_B_BFu32ll");
    static BFu1ll_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu1ll_B_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu1ll_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu32ll(Test_BFu1ll_B_BFu32ll, "BFu1ll_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu33  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu1ll_B_BFu33) C1{ FL:1 Fc FL:33}



static void Test_BFu1ll_B_BFu33()
{
  {
    init_simple_test("BFu1ll_B_BFu33");
    static BFu1ll_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu33");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu1ll_B_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu1ll_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu33(Test_BFu1ll_B_BFu33, "BFu1ll_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu7c  {
  __tsu64 v1:1;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu1ll_B_BFu7c) C1{ FL:1 Fc Fc:7}



static void Test_BFu1ll_B_BFu7c()
{
  {
    init_simple_test("BFu1ll_B_BFu7c");
    static BFu1ll_B_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu7c");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1ll_B_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1ll_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu7c(Test_BFu1ll_B_BFu7c, "BFu1ll_B_BFu7c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu7i  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu1ll_B_BFu7i) C1{ FL:1 Fc Fi:7}



static void Test_BFu1ll_B_BFu7i()
{
  {
    init_simple_test("BFu1ll_B_BFu7i");
    static BFu1ll_B_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu7i");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1ll_B_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1ll_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu7i(Test_BFu1ll_B_BFu7i, "BFu1ll_B_BFu7i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu7ll  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu1ll_B_BFu7ll) C1{ FL:1 Fc FL:7}



static void Test_BFu1ll_B_BFu7ll()
{
  {
    init_simple_test("BFu1ll_B_BFu7ll");
    static BFu1ll_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1ll_B_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1ll_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu7ll(Test_BFu1ll_B_BFu7ll, "BFu1ll_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu7s  {
  __tsu64 v1:1;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu1ll_B_BFu7s) C1{ FL:1 Fc Fs:7}



static void Test_BFu1ll_B_BFu7s()
{
  {
    init_simple_test("BFu1ll_B_BFu7s");
    static BFu1ll_B_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu7s");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1ll_B_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1ll_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu7s(Test_BFu1ll_B_BFu7s, "BFu1ll_B_BFu7s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu8c  {
  __tsu64 v1:1;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu1ll_B_BFu8c) C1{ FL:1 Fc Fc:8}



static void Test_BFu1ll_B_BFu8c()
{
  {
    init_simple_test("BFu1ll_B_BFu8c");
    static BFu1ll_B_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu8c");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1ll_B_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1ll_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu8c(Test_BFu1ll_B_BFu8c, "BFu1ll_B_BFu8c", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu8i  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu1ll_B_BFu8i) C1{ FL:1 Fc Fi:8}



static void Test_BFu1ll_B_BFu8i()
{
  {
    init_simple_test("BFu1ll_B_BFu8i");
    static BFu1ll_B_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu8i");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1ll_B_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1ll_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu8i(Test_BFu1ll_B_BFu8i, "BFu1ll_B_BFu8i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu8ll  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu1ll_B_BFu8ll) C1{ FL:1 Fc FL:8}



static void Test_BFu1ll_B_BFu8ll()
{
  {
    init_simple_test("BFu1ll_B_BFu8ll");
    static BFu1ll_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1ll_B_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1ll_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu8ll(Test_BFu1ll_B_BFu8ll, "BFu1ll_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu8s  {
  __tsu64 v1:1;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu1ll_B_BFu8s) C1{ FL:1 Fc Fs:8}



static void Test_BFu1ll_B_BFu8s()
{
  {
    init_simple_test("BFu1ll_B_BFu8s");
    static BFu1ll_B_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu8s");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1ll_B_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1ll_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu8s(Test_BFu1ll_B_BFu8s, "BFu1ll_B_BFu8s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu9i  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu1ll_B_BFu9i) C1{ FL:1 Fc Fi:9}



static void Test_BFu1ll_B_BFu9i()
{
  {
    init_simple_test("BFu1ll_B_BFu9i");
    static BFu1ll_B_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu9i");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1ll_B_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1ll_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu9i(Test_BFu1ll_B_BFu9i, "BFu1ll_B_BFu9i", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu9ll  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu1ll_B_BFu9ll) C1{ FL:1 Fc FL:9}



static void Test_BFu1ll_B_BFu9ll()
{
  {
    init_simple_test("BFu1ll_B_BFu9ll");
    static BFu1ll_B_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1ll_B_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1ll_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu9ll(Test_BFu1ll_B_BFu9ll, "BFu1ll_B_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_BFu9s  {
  __tsu64 v1:1;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu1ll_B_BFu9s) C1{ FL:1 Fc Fs:9}



static void Test_BFu1ll_B_BFu9s()
{
  {
    init_simple_test("BFu1ll_B_BFu9s");
    static BFu1ll_B_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_BFu9s");
    check_field_offset(lv, v2, 1, "BFu1ll_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1ll_B_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1ll_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_BFu9s(Test_BFu1ll_B_BFu9s, "BFu1ll_B_BFu9s", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_C  {
  __tsu64 v1:1;
  bool v2;
  char v3;
};
//SIG(1 BFu1ll_B_C) C1{ FL:1 Fc[2]}



static void Test_BFu1ll_B_C()
{
  {
    init_simple_test("BFu1ll_B_C");
    static BFu1ll_B_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_C");
    check_field_offset(lv, v2, 1, "BFu1ll_B_C.v2");
    check_field_offset(lv, v3, 2, "BFu1ll_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_C(Test_BFu1ll_B_C, "BFu1ll_B_C", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_D  {
  __tsu64 v1:1;
  bool v2;
  double v3;
};
//SIG(1 BFu1ll_B_D) C1{ FL:1 Fc FL}



static void Test_BFu1ll_B_D()
{
  {
    init_simple_test("BFu1ll_B_D");
    static BFu1ll_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1ll_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_D");
    check_field_offset(lv, v2, 1, "BFu1ll_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1ll_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_D(Test_BFu1ll_B_D, "BFu1ll_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_F  {
  __tsu64 v1:1;
  bool v2;
  float v3;
};
//SIG(1 BFu1ll_B_F) C1{ FL:1 Fc Fi}



static void Test_BFu1ll_B_F()
{
  {
    init_simple_test("BFu1ll_B_F");
    static BFu1ll_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_F");
    check_field_offset(lv, v2, 1, "BFu1ll_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu1ll_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_F(Test_BFu1ll_B_F, "BFu1ll_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_I  {
  __tsu64 v1:1;
  bool v2;
  int v3;
};
//SIG(1 BFu1ll_B_I) C1{ FL:1 Fc Fi}



static void Test_BFu1ll_B_I()
{
  {
    init_simple_test("BFu1ll_B_I");
    static BFu1ll_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_I");
    check_field_offset(lv, v2, 1, "BFu1ll_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu1ll_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_I(Test_BFu1ll_B_I, "BFu1ll_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_Ip  {
  __tsu64 v1:1;
  bool v2;
  int *v3;
};
//SIG(1 BFu1ll_B_Ip) C1{ FL:1 Fc Fp}



static void Test_BFu1ll_B_Ip()
{
  {
    init_simple_test("BFu1ll_B_Ip");
    static BFu1ll_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1ll_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_Ip");
    check_field_offset(lv, v2, 1, "BFu1ll_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1ll_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_Ip(Test_BFu1ll_B_Ip, "BFu1ll_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_L  {
  __tsu64 v1:1;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu1ll_B_L) C1{ FL:1 Fc FL}



static void Test_BFu1ll_B_L()
{
  {
    init_simple_test("BFu1ll_B_L");
    static BFu1ll_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1ll_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_L");
    check_field_offset(lv, v2, 1, "BFu1ll_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1ll_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_L(Test_BFu1ll_B_L, "BFu1ll_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_S  {
  __tsu64 v1:1;
  bool v2;
  short v3;
};
//SIG(1 BFu1ll_B_S) C1{ FL:1 Fc Fs}



static void Test_BFu1ll_B_S()
{
  {
    init_simple_test("BFu1ll_B_S");
    static BFu1ll_B_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_S");
    check_field_offset(lv, v2, 1, "BFu1ll_B_S.v2");
    check_field_offset(lv, v3, 2, "BFu1ll_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_S(Test_BFu1ll_B_S, "BFu1ll_B_S", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_Uc  {
  __tsu64 v1:1;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu1ll_B_Uc) C1{ FL:1 Fc[2]}



static void Test_BFu1ll_B_Uc()
{
  {
    init_simple_test("BFu1ll_B_Uc");
    static BFu1ll_B_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_Uc");
    check_field_offset(lv, v2, 1, "BFu1ll_B_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu1ll_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_Uc(Test_BFu1ll_B_Uc, "BFu1ll_B_Uc", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_Ui  {
  __tsu64 v1:1;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu1ll_B_Ui) C1{ FL:1 Fc Fi}



static void Test_BFu1ll_B_Ui()
{
  {
    init_simple_test("BFu1ll_B_Ui");
    static BFu1ll_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_B_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_Ui");
    check_field_offset(lv, v2, 1, "BFu1ll_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu1ll_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_Ui(Test_BFu1ll_B_Ui, "BFu1ll_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_Ul  {
  __tsu64 v1:1;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu1ll_B_Ul) C1{ FL:1 Fc FL}



static void Test_BFu1ll_B_Ul()
{
  {
    init_simple_test("BFu1ll_B_Ul");
    static BFu1ll_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1ll_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_Ul");
    check_field_offset(lv, v2, 1, "BFu1ll_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1ll_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_Ul(Test_BFu1ll_B_Ul, "BFu1ll_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_Us  {
  __tsu64 v1:1;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu1ll_B_Us) C1{ FL:1 Fc Fs}



static void Test_BFu1ll_B_Us()
{
  {
    init_simple_test("BFu1ll_B_Us");
    static BFu1ll_B_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_B_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_Us");
    check_field_offset(lv, v2, 1, "BFu1ll_B_Us.v2");
    check_field_offset(lv, v3, 2, "BFu1ll_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_Us(Test_BFu1ll_B_Us, "BFu1ll_B_Us", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_B_Vp  {
  __tsu64 v1:1;
  bool v2;
  void *v3;
};
//SIG(1 BFu1ll_B_Vp) C1{ FL:1 Fc Fp}



static void Test_BFu1ll_B_Vp()
{
  {
    init_simple_test("BFu1ll_B_Vp");
    static BFu1ll_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1ll_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_B_Vp");
    check_field_offset(lv, v2, 1, "BFu1ll_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1ll_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_B_Vp(Test_BFu1ll_B_Vp, "BFu1ll_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu15i_B  {
  __tsu64 v1:1;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu1ll_BFu15i_B) C1{ FL:1 Fi:15 Fc}



static void Test_BFu1ll_BFu15i_B()
{
  {
    init_simple_test("BFu1ll_BFu15i_B");
    static BFu1ll_BFu15i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu15i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu15i_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1ll_BFu15i_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1ll_BFu15i_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu15i_B(Test_BFu1ll_BFu15i_B, "BFu1ll_BFu15i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu15ll_B  {
  __tsu64 v1:1;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu1ll_BFu15ll_B) C1{ FL:1 FL:15 Fc}



static void Test_BFu1ll_BFu15ll_B()
{
  {
    init_simple_test("BFu1ll_BFu15ll_B");
    static BFu1ll_BFu15ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1ll_BFu15ll_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu15ll_B(Test_BFu1ll_BFu15ll_B, "BFu1ll_BFu15ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu15s_B  {
  __tsu64 v1:1;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu1ll_BFu15s_B) C1{ FL:1 Fs:15 Fc}



static void Test_BFu1ll_BFu15s_B()
{
  {
    init_simple_test("BFu1ll_BFu15s_B");
    static BFu1ll_BFu15s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu15s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu15s_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1ll_BFu15s_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1ll_BFu15s_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu15s_B(Test_BFu1ll_BFu15s_B, "BFu1ll_BFu15s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu16i_B  {
  __tsu64 v1:1;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu1ll_BFu16i_B) C1{ FL:1 Fi:16 Fc}



static void Test_BFu1ll_BFu16i_B()
{
  {
    init_simple_test("BFu1ll_BFu16i_B");
    static BFu1ll_BFu16i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu16i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu16i_B");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu1ll_BFu16i_B");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu1ll_BFu16i_B");
    check_field_offset(lv, v3, 3, "BFu1ll_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu16i_B(Test_BFu1ll_BFu16i_B, "BFu1ll_BFu16i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu16ll_B  {
  __tsu64 v1:1;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu1ll_BFu16ll_B) C1{ FL:1 FL:16 Fc}



static void Test_BFu1ll_BFu16ll_B()
{
  {
    init_simple_test("BFu1ll_BFu16ll_B");
    static BFu1ll_BFu16ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu1ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu1ll_BFu16ll_B");
    check_field_offset(lv, v3, 3, "BFu1ll_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu16ll_B(Test_BFu1ll_BFu16ll_B, "BFu1ll_BFu16ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu16s_B  {
  __tsu64 v1:1;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu1ll_BFu16s_B) C1{ FL:1 Fs:16 Fc}



static void Test_BFu1ll_BFu16s_B()
{
  {
    init_simple_test("BFu1ll_BFu16s_B");
    static BFu1ll_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_BFu16s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu1ll_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu1ll_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu1ll_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu16s_B(Test_BFu1ll_BFu16s_B, "BFu1ll_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu17i_B  {
  __tsu64 v1:1;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu1ll_BFu17i_B) C1{ FL:1 Fi:17 Fc}



static void Test_BFu1ll_BFu17i_B()
{
  {
    init_simple_test("BFu1ll_BFu17i_B");
    static BFu1ll_BFu17i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu17i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu17i_B");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu1ll_BFu17i_B");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu1ll_BFu17i_B");
    check_field_offset(lv, v3, 3, "BFu1ll_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu17i_B(Test_BFu1ll_BFu17i_B, "BFu1ll_BFu17i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu17ll_B  {
  __tsu64 v1:1;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu1ll_BFu17ll_B) C1{ FL:1 FL:17 Fc}



static void Test_BFu1ll_BFu17ll_B()
{
  {
    init_simple_test("BFu1ll_BFu17ll_B");
    static BFu1ll_BFu17ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu1ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu1ll_BFu17ll_B");
    check_field_offset(lv, v3, 3, "BFu1ll_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu17ll_B(Test_BFu1ll_BFu17ll_B, "BFu1ll_BFu17ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu1c_B  {
  __tsu64 v1:1;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu1ll_BFu1c_B) C1{ FL:1 Fc:1 Fc}



static void Test_BFu1ll_BFu1c_B()
{
  {
    init_simple_test("BFu1ll_BFu1c_B");
    static BFu1ll_BFu1c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu1c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu1c_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1ll_BFu1c_B");
    check_field_offset(lv, v3, 1, "BFu1ll_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu1c_B(Test_BFu1ll_BFu1c_B, "BFu1ll_BFu1c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu1i_B  {
  __tsu64 v1:1;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu1ll_BFu1i_B) C1{ FL:1 Fi:1 Fc}



static void Test_BFu1ll_BFu1i_B()
{
  {
    init_simple_test("BFu1ll_BFu1i_B");
    static BFu1ll_BFu1i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu1i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu1i_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1ll_BFu1i_B");
    check_field_offset(lv, v3, 1, "BFu1ll_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu1i_B(Test_BFu1ll_BFu1i_B, "BFu1ll_BFu1i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu1ll_B  {
  __tsu64 v1:1;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu1ll_BFu1ll_B) C1{ FL:1 FL:1 Fc}



static void Test_BFu1ll_BFu1ll_B()
{
  {
    init_simple_test("BFu1ll_BFu1ll_B");
    static BFu1ll_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu1ll_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1ll_BFu1ll_B");
    check_field_offset(lv, v3, 1, "BFu1ll_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu1ll_B(Test_BFu1ll_BFu1ll_B, "BFu1ll_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu1s_B  {
  __tsu64 v1:1;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu1ll_BFu1s_B) C1{ FL:1 Fs:1 Fc}



static void Test_BFu1ll_BFu1s_B()
{
  {
    init_simple_test("BFu1ll_BFu1s_B");
    static BFu1ll_BFu1s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu1s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu1s_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1ll_BFu1s_B");
    check_field_offset(lv, v3, 1, "BFu1ll_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu1s_B(Test_BFu1ll_BFu1s_B, "BFu1ll_BFu1s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu31i_B  {
  __tsu64 v1:1;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu1ll_BFu31i_B) C1{ FL:1 Fi:31 Fc}



static void Test_BFu1ll_BFu31i_B()
{
  {
    init_simple_test("BFu1ll_BFu31i_B");
    static BFu1ll_BFu31i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_BFu31i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu31i_B");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu1ll_BFu31i_B");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu1ll_BFu31i_B");
    check_field_offset(lv, v3, 4, "BFu1ll_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu31i_B(Test_BFu1ll_BFu31i_B, "BFu1ll_BFu31i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu31ll_B  {
  __tsu64 v1:1;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu1ll_BFu31ll_B) C1{ FL:1 FL:31 Fc}



static void Test_BFu1ll_BFu31ll_B()
{
  {
    init_simple_test("BFu1ll_BFu31ll_B");
    static BFu1ll_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu1ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu1ll_BFu31ll_B");
    check_field_offset(lv, v3, 4, "BFu1ll_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu31ll_B(Test_BFu1ll_BFu31ll_B, "BFu1ll_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu32i_B  {
  __tsu64 v1:1;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu1ll_BFu32i_B) C1{ FL:1 Fi:32 Fc}



static void Test_BFu1ll_BFu32i_B()
{
  {
    init_simple_test("BFu1ll_BFu32i_B");
    static BFu1ll_BFu32i_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1ll_BFu32i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu1ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu1ll_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu1ll_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu32i_B(Test_BFu1ll_BFu32i_B, "BFu1ll_BFu32i_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu32ll_B  {
  __tsu64 v1:1;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu1ll_BFu32ll_B) C1{ FL:1 FL:32 Fc}



static void Test_BFu1ll_BFu32ll_B()
{
  {
    init_simple_test("BFu1ll_BFu32ll_B");
    static BFu1ll_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu1ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu1ll_BFu32ll_B");
    check_field_offset(lv, v3, 5, "BFu1ll_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu32ll_B(Test_BFu1ll_BFu32ll_B, "BFu1ll_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu33_B  {
  __tsu64 v1:1;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu1ll_BFu33_B) C1{ FL:1 FL:33 Fc}



static void Test_BFu1ll_BFu33_B()
{
  {
    init_simple_test("BFu1ll_BFu33_B");
    static BFu1ll_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu33_B");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu1ll_BFu33_B");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu1ll_BFu33_B");
    check_field_offset(lv, v3, 5, "BFu1ll_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu33_B(Test_BFu1ll_BFu33_B, "BFu1ll_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu7c_B  {
  __tsu64 v1:1;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu1ll_BFu7c_B) C1{ FL:1 Fc:7 Fc}



static void Test_BFu1ll_BFu7c_B()
{
  {
    init_simple_test("BFu1ll_BFu7c_B");
    static BFu1ll_BFu7c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu7c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu7c_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1ll_BFu7c_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1ll_BFu7c_B");
    check_field_offset(lv, v3, 1, "BFu1ll_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu7c_B(Test_BFu1ll_BFu7c_B, "BFu1ll_BFu7c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu7i_B  {
  __tsu64 v1:1;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu1ll_BFu7i_B) C1{ FL:1 Fi:7 Fc}



static void Test_BFu1ll_BFu7i_B()
{
  {
    init_simple_test("BFu1ll_BFu7i_B");
    static BFu1ll_BFu7i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu7i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu7i_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1ll_BFu7i_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1ll_BFu7i_B");
    check_field_offset(lv, v3, 1, "BFu1ll_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu7i_B(Test_BFu1ll_BFu7i_B, "BFu1ll_BFu7i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu7ll_B  {
  __tsu64 v1:1;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu1ll_BFu7ll_B) C1{ FL:1 FL:7 Fc}



static void Test_BFu1ll_BFu7ll_B()
{
  {
    init_simple_test("BFu1ll_BFu7ll_B");
    static BFu1ll_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1ll_BFu7ll_B");
    check_field_offset(lv, v3, 1, "BFu1ll_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu7ll_B(Test_BFu1ll_BFu7ll_B, "BFu1ll_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu7s_B  {
  __tsu64 v1:1;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu1ll_BFu7s_B) C1{ FL:1 Fs:7 Fc}



static void Test_BFu1ll_BFu7s_B()
{
  {
    init_simple_test("BFu1ll_BFu7s_B");
    static BFu1ll_BFu7s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu7s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu7s_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1ll_BFu7s_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1ll_BFu7s_B");
    check_field_offset(lv, v3, 1, "BFu1ll_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu7s_B(Test_BFu1ll_BFu7s_B, "BFu1ll_BFu7s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu8c_B  {
  __tsu64 v1:1;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu1ll_BFu8c_B) C1{ FL:1 Fc:8 Fc}



static void Test_BFu1ll_BFu8c_B()
{
  {
    init_simple_test("BFu1ll_BFu8c_B");
    static BFu1ll_BFu8c_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu8c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu8c_B");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu1ll_BFu8c_B");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu1ll_BFu8c_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu8c_B(Test_BFu1ll_BFu8c_B, "BFu1ll_BFu8c_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu8i_B  {
  __tsu64 v1:1;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu1ll_BFu8i_B) C1{ FL:1 Fi:8 Fc}



static void Test_BFu1ll_BFu8i_B()
{
  {
    init_simple_test("BFu1ll_BFu8i_B");
    static BFu1ll_BFu8i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu8i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu8i_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1ll_BFu8i_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1ll_BFu8i_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu8i_B(Test_BFu1ll_BFu8i_B, "BFu1ll_BFu8i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu8ll_B  {
  __tsu64 v1:1;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu1ll_BFu8ll_B) C1{ FL:1 FL:8 Fc}



static void Test_BFu1ll_BFu8ll_B()
{
  {
    init_simple_test("BFu1ll_BFu8ll_B");
    static BFu1ll_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1ll_BFu8ll_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu8ll_B(Test_BFu1ll_BFu8ll_B, "BFu1ll_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu8s_B  {
  __tsu64 v1:1;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu1ll_BFu8s_B) C1{ FL:1 Fs:8 Fc}



static void Test_BFu1ll_BFu8s_B()
{
  {
    init_simple_test("BFu1ll_BFu8s_B");
    static BFu1ll_BFu8s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu8s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu8s_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1ll_BFu8s_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1ll_BFu8s_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu8s_B(Test_BFu1ll_BFu8s_B, "BFu1ll_BFu8s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu9i_B  {
  __tsu64 v1:1;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu1ll_BFu9i_B) C1{ FL:1 Fi:9 Fc}



static void Test_BFu1ll_BFu9i_B()
{
  {
    init_simple_test("BFu1ll_BFu9i_B");
    static BFu1ll_BFu9i_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu9i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu9i_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1ll_BFu9i_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1ll_BFu9i_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu9i_B(Test_BFu1ll_BFu9i_B, "BFu1ll_BFu9i_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu9ll_B  {
  __tsu64 v1:1;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu1ll_BFu9ll_B) C1{ FL:1 FL:9 Fc}



static void Test_BFu1ll_BFu9ll_B()
{
  {
    init_simple_test("BFu1ll_BFu9ll_B");
    static BFu1ll_BFu9ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1ll_BFu9ll_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu9ll_B(Test_BFu1ll_BFu9ll_B, "BFu1ll_BFu9ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_BFu9s_B  {
  __tsu64 v1:1;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu1ll_BFu9s_B) C1{ FL:1 Fs:9 Fc}



static void Test_BFu1ll_BFu9s_B()
{
  {
    init_simple_test("BFu1ll_BFu9s_B");
    static BFu1ll_BFu9s_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_BFu9s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_BFu9s_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1ll_BFu9s_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1ll_BFu9s_B");
    check_field_offset(lv, v3, 2, "BFu1ll_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_BFu9s_B(Test_BFu1ll_BFu9s_B, "BFu1ll_BFu9s_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_C_B  {
  __tsu64 v1:1;
  char v2;
  bool v3;
};
//SIG(1 BFu1ll_C_B) C1{ FL:1 Fc[2]}



static void Test_BFu1ll_C_B()
{
  {
    init_simple_test("BFu1ll_C_B");
    static BFu1ll_C_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_C_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_C_B");
    check_field_offset(lv, v2, 1, "BFu1ll_C_B.v2");
    check_field_offset(lv, v3, 2, "BFu1ll_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_C_B(Test_BFu1ll_C_B, "BFu1ll_C_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_D_B  {
  __tsu64 v1:1;
  double v2;
  bool v3;
};
//SIG(1 BFu1ll_D_B) C1{ FL:1 FL Fc}



static void Test_BFu1ll_D_B()
{
  {
    init_simple_test("BFu1ll_D_B");
    static BFu1ll_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1ll_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1ll_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1ll_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_D_B(Test_BFu1ll_D_B, "BFu1ll_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_F_B  {
  __tsu64 v1:1;
  float v2;
  bool v3;
};
//SIG(1 BFu1ll_F_B) C1{ FL:1 Fi Fc}



static void Test_BFu1ll_F_B()
{
  {
    init_simple_test("BFu1ll_F_B");
    static BFu1ll_F_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1ll_F_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_F_B");
    check_field_offset(lv, v2, 4, "BFu1ll_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu1ll_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_F_B(Test_BFu1ll_F_B, "BFu1ll_F_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_I_B  {
  __tsu64 v1:1;
  int v2;
  bool v3;
};
//SIG(1 BFu1ll_I_B) C1{ FL:1 Fi Fc}



static void Test_BFu1ll_I_B()
{
  {
    init_simple_test("BFu1ll_I_B");
    static BFu1ll_I_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1ll_I_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_I_B");
    check_field_offset(lv, v2, 4, "BFu1ll_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu1ll_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_I_B(Test_BFu1ll_I_B, "BFu1ll_I_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_Ip_B  {
  __tsu64 v1:1;
  int *v2;
  bool v3;
};
//SIG(1 BFu1ll_Ip_B) C1{ FL:1 Fp Fc}



static void Test_BFu1ll_Ip_B()
{
  {
    init_simple_test("BFu1ll_Ip_B");
    static BFu1ll_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1ll_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1ll_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1ll_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_Ip_B(Test_BFu1ll_Ip_B, "BFu1ll_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_L_B  {
  __tsu64 v1:1;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu1ll_L_B) C1{ FL:1 FL Fc}



static void Test_BFu1ll_L_B()
{
  {
    init_simple_test("BFu1ll_L_B");
    static BFu1ll_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1ll_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1ll_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1ll_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_L_B(Test_BFu1ll_L_B, "BFu1ll_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_S_B  {
  __tsu64 v1:1;
  short v2;
  bool v3;
};
//SIG(1 BFu1ll_S_B) C1{ FL:1 Fs Fc}



static void Test_BFu1ll_S_B()
{
  {
    init_simple_test("BFu1ll_S_B");
    static BFu1ll_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_S_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_S_B");
    check_field_offset(lv, v2, 2, "BFu1ll_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu1ll_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_S_B(Test_BFu1ll_S_B, "BFu1ll_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_Uc_B  {
  __tsu64 v1:1;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu1ll_Uc_B) C1{ FL:1 Fc[2]}



static void Test_BFu1ll_Uc_B()
{
  {
    init_simple_test("BFu1ll_Uc_B");
    static BFu1ll_Uc_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1ll_Uc_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_Uc_B");
    check_field_offset(lv, v2, 1, "BFu1ll_Uc_B.v2");
    check_field_offset(lv, v3, 2, "BFu1ll_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_Uc_B(Test_BFu1ll_Uc_B, "BFu1ll_Uc_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_Ui_B  {
  __tsu64 v1:1;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu1ll_Ui_B) C1{ FL:1 Fi Fc}



static void Test_BFu1ll_Ui_B()
{
  {
    init_simple_test("BFu1ll_Ui_B");
    static BFu1ll_Ui_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1ll_Ui_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_Ui_B");
    check_field_offset(lv, v2, 4, "BFu1ll_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu1ll_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_Ui_B(Test_BFu1ll_Ui_B, "BFu1ll_Ui_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_Ul_B  {
  __tsu64 v1:1;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu1ll_Ul_B) C1{ FL:1 FL Fc}



static void Test_BFu1ll_Ul_B()
{
  {
    init_simple_test("BFu1ll_Ul_B");
    static BFu1ll_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1ll_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1ll_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1ll_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_Ul_B(Test_BFu1ll_Ul_B, "BFu1ll_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_Us_B  {
  __tsu64 v1:1;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu1ll_Us_B) C1{ FL:1 Fs Fc}



static void Test_BFu1ll_Us_B()
{
  {
    init_simple_test("BFu1ll_Us_B");
    static BFu1ll_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1ll_Us_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_Us_B");
    check_field_offset(lv, v2, 2, "BFu1ll_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu1ll_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_Us_B(Test_BFu1ll_Us_B, "BFu1ll_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1ll_Vp_B  {
  __tsu64 v1:1;
  void *v2;
  bool v3;
};
//SIG(1 BFu1ll_Vp_B) C1{ FL:1 Fp Fc}



static void Test_BFu1ll_Vp_B()
{
  {
    init_simple_test("BFu1ll_Vp_B");
    static BFu1ll_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1ll_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1ll_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1ll_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1ll_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1ll_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1ll_Vp_B(Test_BFu1ll_Vp_B, "BFu1ll_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B  {
  unsigned short v1:1;
  bool v2;
};
//SIG(1 BFu1s_B) C1{ Fs:1 Fc}



static void Test_BFu1s_B()
{
  {
    init_simple_test("BFu1s_B");
    static BFu1s_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B");
    check_field_offset(lv, v2, 1, "BFu1s_B.v2");
  }
}
static Arrange_To_Call_Me vBFu1s_B(Test_BFu1s_B, "BFu1s_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_B  {
  unsigned short v1:1;
  bool v2;
  bool v3;
};
//SIG(1 BFu1s_B_B) C1{ Fs:1 Fc[2]}



static void Test_BFu1s_B_B()
{
  {
    init_simple_test("BFu1s_B_B");
    static BFu1s_B_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_B");
    check_field_offset(lv, v2, 1, "BFu1s_B_B.v2");
    check_field_offset(lv, v3, 2, "BFu1s_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_B(Test_BFu1s_B_B, "BFu1s_B_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu15i  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu1s_B_BFu15i) C1{ Fs:1 Fc Fi:15}



static void Test_BFu1s_B_BFu15i()
{
  {
    init_simple_test("BFu1s_B_BFu15i");
    static BFu1s_B_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu15i");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1s_B_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1s_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu15i(Test_BFu1s_B_BFu15i, "BFu1s_B_BFu15i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu15ll  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu1s_B_BFu15ll) C1{ Fs:1 Fc FL:15}



static void Test_BFu1s_B_BFu15ll()
{
  {
    init_simple_test("BFu1s_B_BFu15ll");
    static BFu1s_B_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1s_B_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1s_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu15ll(Test_BFu1s_B_BFu15ll, "BFu1s_B_BFu15ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu15s  {
  unsigned short v1:1;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu1s_B_BFu15s) C1{ Fs:1 Fc Fs:15}



static void Test_BFu1s_B_BFu15s()
{
  {
    init_simple_test("BFu1s_B_BFu15s");
    static BFu1s_B_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu15s");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu1s_B_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu1s_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu15s(Test_BFu1s_B_BFu15s, "BFu1s_B_BFu15s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu16i  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu1s_B_BFu16i) C1{ Fs:1 Fc Fi:16}



static void Test_BFu1s_B_BFu16i()
{
  {
    init_simple_test("BFu1s_B_BFu16i");
    static BFu1s_B_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu16i");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1s_B_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1s_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu16i(Test_BFu1s_B_BFu16i, "BFu1s_B_BFu16i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu16ll  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu1s_B_BFu16ll) C1{ Fs:1 Fc FL:16}



static void Test_BFu1s_B_BFu16ll()
{
  {
    init_simple_test("BFu1s_B_BFu16ll");
    static BFu1s_B_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1s_B_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1s_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu16ll(Test_BFu1s_B_BFu16ll, "BFu1s_B_BFu16ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu16s  {
  unsigned short v1:1;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu1s_B_BFu16s) C1{ Fs:1 Fc Fs:16}



static void Test_BFu1s_B_BFu16s()
{
  {
    init_simple_test("BFu1s_B_BFu16s");
    static BFu1s_B_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu16s");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu1s_B_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu1s_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu16s(Test_BFu1s_B_BFu16s, "BFu1s_B_BFu16s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu17i  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu1s_B_BFu17i) C1{ Fs:1 Fc Fi:17}



static void Test_BFu1s_B_BFu17i()
{
  {
    init_simple_test("BFu1s_B_BFu17i");
    static BFu1s_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu17i");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu1s_B_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu1s_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu17i(Test_BFu1s_B_BFu17i, "BFu1s_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu17ll  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu1s_B_BFu17ll) C1{ Fs:1 Fc FL:17}



static void Test_BFu1s_B_BFu17ll()
{
  {
    init_simple_test("BFu1s_B_BFu17ll");
    static BFu1s_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu1s_B_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu1s_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu17ll(Test_BFu1s_B_BFu17ll, "BFu1s_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu1c  {
  unsigned short v1:1;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu1s_B_BFu1c) C1{ Fs:1 Fc Fc:1}



static void Test_BFu1s_B_BFu1c()
{
  {
    init_simple_test("BFu1s_B_BFu1c");
    static BFu1s_B_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu1c");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1s_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu1c(Test_BFu1s_B_BFu1c, "BFu1s_B_BFu1c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu1i  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu1s_B_BFu1i) C1{ Fs:1 Fc Fi:1}



static void Test_BFu1s_B_BFu1i()
{
  {
    init_simple_test("BFu1s_B_BFu1i");
    static BFu1s_B_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu1i");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1s_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu1i(Test_BFu1s_B_BFu1i, "BFu1s_B_BFu1i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu1ll  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu1s_B_BFu1ll) C1{ Fs:1 Fc FL:1}



static void Test_BFu1s_B_BFu1ll()
{
  {
    init_simple_test("BFu1s_B_BFu1ll");
    static BFu1s_B_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1s_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu1ll(Test_BFu1s_B_BFu1ll, "BFu1s_B_BFu1ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu1s  {
  unsigned short v1:1;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu1s_B_BFu1s) C1{ Fs:1 Fc Fs:1}



static void Test_BFu1s_B_BFu1s()
{
  {
    init_simple_test("BFu1s_B_BFu1s");
    static BFu1s_B_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu1s");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu1s_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu1s(Test_BFu1s_B_BFu1s, "BFu1s_B_BFu1s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu31i  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu1s_B_BFu31i) C1{ Fs:1 Fc Fi:31}



static void Test_BFu1s_B_BFu31i()
{
  {
    init_simple_test("BFu1s_B_BFu31i");
    static BFu1s_B_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu31i");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu1s_B_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu1s_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu31i(Test_BFu1s_B_BFu31i, "BFu1s_B_BFu31i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu31ll  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu1s_B_BFu31ll) C1{ Fs:1 Fc FL:31}



static void Test_BFu1s_B_BFu31ll()
{
  {
    init_simple_test("BFu1s_B_BFu31ll");
    static BFu1s_B_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu1s_B_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu1s_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu31ll(Test_BFu1s_B_BFu31ll, "BFu1s_B_BFu31ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu32i  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu1s_B_BFu32i) C1{ Fs:1 Fc Fi:32}



static void Test_BFu1s_B_BFu32i()
{
  {
    init_simple_test("BFu1s_B_BFu32i");
    static BFu1s_B_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu32i");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu1s_B_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu1s_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu32i(Test_BFu1s_B_BFu32i, "BFu1s_B_BFu32i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu32ll  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu1s_B_BFu32ll) C1{ Fs:1 Fc FL:32}



static void Test_BFu1s_B_BFu32ll()
{
  {
    init_simple_test("BFu1s_B_BFu32ll");
    static BFu1s_B_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu1s_B_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu1s_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu32ll(Test_BFu1s_B_BFu32ll, "BFu1s_B_BFu32ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu33  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu1s_B_BFu33) C1{ Fs:1 Fc FL:33}



static void Test_BFu1s_B_BFu33()
{
  {
    init_simple_test("BFu1s_B_BFu33");
    static BFu1s_B_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu33");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu1s_B_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu1s_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu33(Test_BFu1s_B_BFu33, "BFu1s_B_BFu33", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu7c  {
  unsigned short v1:1;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu1s_B_BFu7c) C1{ Fs:1 Fc Fc:7}



static void Test_BFu1s_B_BFu7c()
{
  {
    init_simple_test("BFu1s_B_BFu7c");
    static BFu1s_B_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu7c");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1s_B_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1s_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu7c(Test_BFu1s_B_BFu7c, "BFu1s_B_BFu7c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu7i  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu1s_B_BFu7i) C1{ Fs:1 Fc Fi:7}



static void Test_BFu1s_B_BFu7i()
{
  {
    init_simple_test("BFu1s_B_BFu7i");
    static BFu1s_B_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu7i");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1s_B_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1s_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu7i(Test_BFu1s_B_BFu7i, "BFu1s_B_BFu7i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu7ll  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu1s_B_BFu7ll) C1{ Fs:1 Fc FL:7}



static void Test_BFu1s_B_BFu7ll()
{
  {
    init_simple_test("BFu1s_B_BFu7ll");
    static BFu1s_B_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1s_B_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1s_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu7ll(Test_BFu1s_B_BFu7ll, "BFu1s_B_BFu7ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu7s  {
  unsigned short v1:1;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu1s_B_BFu7s) C1{ Fs:1 Fc Fs:7}



static void Test_BFu1s_B_BFu7s()
{
  {
    init_simple_test("BFu1s_B_BFu7s");
    static BFu1s_B_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu7s");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu1s_B_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu1s_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu7s(Test_BFu1s_B_BFu7s, "BFu1s_B_BFu7s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu8c  {
  unsigned short v1:1;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu1s_B_BFu8c) C1{ Fs:1 Fc Fc:8}



static void Test_BFu1s_B_BFu8c()
{
  {
    init_simple_test("BFu1s_B_BFu8c");
    static BFu1s_B_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu8c");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1s_B_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1s_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu8c(Test_BFu1s_B_BFu8c, "BFu1s_B_BFu8c", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu8i  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu1s_B_BFu8i) C1{ Fs:1 Fc Fi:8}



static void Test_BFu1s_B_BFu8i()
{
  {
    init_simple_test("BFu1s_B_BFu8i");
    static BFu1s_B_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu8i");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1s_B_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1s_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu8i(Test_BFu1s_B_BFu8i, "BFu1s_B_BFu8i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu8ll  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu1s_B_BFu8ll) C1{ Fs:1 Fc FL:8}



static void Test_BFu1s_B_BFu8ll()
{
  {
    init_simple_test("BFu1s_B_BFu8ll");
    static BFu1s_B_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1s_B_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1s_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu8ll(Test_BFu1s_B_BFu8ll, "BFu1s_B_BFu8ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu8s  {
  unsigned short v1:1;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu1s_B_BFu8s) C1{ Fs:1 Fc Fs:8}



static void Test_BFu1s_B_BFu8s()
{
  {
    init_simple_test("BFu1s_B_BFu8s");
    static BFu1s_B_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu8s");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu1s_B_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu1s_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu8s(Test_BFu1s_B_BFu8s, "BFu1s_B_BFu8s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu9i  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu1s_B_BFu9i) C1{ Fs:1 Fc Fi:9}



static void Test_BFu1s_B_BFu9i()
{
  {
    init_simple_test("BFu1s_B_BFu9i");
    static BFu1s_B_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu9i");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1s_B_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1s_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu9i(Test_BFu1s_B_BFu9i, "BFu1s_B_BFu9i", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu9ll  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu1s_B_BFu9ll) C1{ Fs:1 Fc FL:9}



static void Test_BFu1s_B_BFu9ll()
{
  {
    init_simple_test("BFu1s_B_BFu9ll");
    static BFu1s_B_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1s_B_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1s_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu9ll(Test_BFu1s_B_BFu9ll, "BFu1s_B_BFu9ll", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_BFu9s  {
  unsigned short v1:1;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu1s_B_BFu9s) C1{ Fs:1 Fc Fs:9}



static void Test_BFu1s_B_BFu9s()
{
  {
    init_simple_test("BFu1s_B_BFu9s");
    static BFu1s_B_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_BFu9s");
    check_field_offset(lv, v2, 1, "BFu1s_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu1s_B_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu1s_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu1s_B_BFu9s(Test_BFu1s_B_BFu9s, "BFu1s_B_BFu9s", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_C  {
  unsigned short v1:1;
  bool v2;
  char v3;
};
//SIG(1 BFu1s_B_C) C1{ Fs:1 Fc[2]}



static void Test_BFu1s_B_C()
{
  {
    init_simple_test("BFu1s_B_C");
    static BFu1s_B_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_C");
    check_field_offset(lv, v2, 1, "BFu1s_B_C.v2");
    check_field_offset(lv, v3, 2, "BFu1s_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_C(Test_BFu1s_B_C, "BFu1s_B_C", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_D  {
  unsigned short v1:1;
  bool v2;
  double v3;
};
//SIG(1 BFu1s_B_D) C1{ Fs:1 Fc FL}



static void Test_BFu1s_B_D()
{
  {
    init_simple_test("BFu1s_B_D");
    static BFu1s_B_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1s_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_D");
    check_field_offset(lv, v2, 1, "BFu1s_B_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1s_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_D(Test_BFu1s_B_D, "BFu1s_B_D", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_F  {
  unsigned short v1:1;
  bool v2;
  float v3;
};
//SIG(1 BFu1s_B_F) C1{ Fs:1 Fc Fi}



static void Test_BFu1s_B_F()
{
  {
    init_simple_test("BFu1s_B_F");
    static BFu1s_B_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_F");
    check_field_offset(lv, v2, 1, "BFu1s_B_F.v2");
    check_field_offset(lv, v3, 4, "BFu1s_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_F(Test_BFu1s_B_F, "BFu1s_B_F", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_I  {
  unsigned short v1:1;
  bool v2;
  int v3;
};
//SIG(1 BFu1s_B_I) C1{ Fs:1 Fc Fi}



static void Test_BFu1s_B_I()
{
  {
    init_simple_test("BFu1s_B_I");
    static BFu1s_B_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_I");
    check_field_offset(lv, v2, 1, "BFu1s_B_I.v2");
    check_field_offset(lv, v3, 4, "BFu1s_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_I(Test_BFu1s_B_I, "BFu1s_B_I", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_Ip  {
  unsigned short v1:1;
  bool v2;
  int *v3;
};
//SIG(1 BFu1s_B_Ip) C1{ Fs:1 Fc Fp}



static void Test_BFu1s_B_Ip()
{
  {
    init_simple_test("BFu1s_B_Ip");
    static BFu1s_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1s_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_Ip");
    check_field_offset(lv, v2, 1, "BFu1s_B_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1s_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_Ip(Test_BFu1s_B_Ip, "BFu1s_B_Ip", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_L  {
  unsigned short v1:1;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu1s_B_L) C1{ Fs:1 Fc FL}



static void Test_BFu1s_B_L()
{
  {
    init_simple_test("BFu1s_B_L");
    static BFu1s_B_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1s_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_L");
    check_field_offset(lv, v2, 1, "BFu1s_B_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1s_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_L(Test_BFu1s_B_L, "BFu1s_B_L", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_S  {
  unsigned short v1:1;
  bool v2;
  short v3;
};
//SIG(1 BFu1s_B_S) C1{ Fs:1 Fc Fs}



static void Test_BFu1s_B_S()
{
  {
    init_simple_test("BFu1s_B_S");
    static BFu1s_B_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_S");
    check_field_offset(lv, v2, 1, "BFu1s_B_S.v2");
    check_field_offset(lv, v3, 2, "BFu1s_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_S(Test_BFu1s_B_S, "BFu1s_B_S", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_Uc  {
  unsigned short v1:1;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu1s_B_Uc) C1{ Fs:1 Fc[2]}



static void Test_BFu1s_B_Uc()
{
  {
    init_simple_test("BFu1s_B_Uc");
    static BFu1s_B_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_Uc");
    check_field_offset(lv, v2, 1, "BFu1s_B_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu1s_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_Uc(Test_BFu1s_B_Uc, "BFu1s_B_Uc", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_Ui  {
  unsigned short v1:1;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu1s_B_Ui) C1{ Fs:1 Fc Fi}



static void Test_BFu1s_B_Ui()
{
  {
    init_simple_test("BFu1s_B_Ui");
    static BFu1s_B_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_Ui");
    check_field_offset(lv, v2, 1, "BFu1s_B_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu1s_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_Ui(Test_BFu1s_B_Ui, "BFu1s_B_Ui", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_Ul  {
  unsigned short v1:1;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu1s_B_Ul) C1{ Fs:1 Fc FL}



static void Test_BFu1s_B_Ul()
{
  {
    init_simple_test("BFu1s_B_Ul");
    static BFu1s_B_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu1s_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_Ul");
    check_field_offset(lv, v2, 1, "BFu1s_B_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1s_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_Ul(Test_BFu1s_B_Ul, "BFu1s_B_Ul", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_Us  {
  unsigned short v1:1;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu1s_B_Us) C1{ Fs:1 Fc Fs}



static void Test_BFu1s_B_Us()
{
  {
    init_simple_test("BFu1s_B_Us");
    static BFu1s_B_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_B_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_Us");
    check_field_offset(lv, v2, 1, "BFu1s_B_Us.v2");
    check_field_offset(lv, v3, 2, "BFu1s_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_Us(Test_BFu1s_B_Us, "BFu1s_B_Us", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_B_Vp  {
  unsigned short v1:1;
  bool v2;
  void *v3;
};
//SIG(1 BFu1s_B_Vp) C1{ Fs:1 Fc Fp}



static void Test_BFu1s_B_Vp()
{
  {
    init_simple_test("BFu1s_B_Vp");
    static BFu1s_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu1s_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_B_Vp");
    check_field_offset(lv, v2, 1, "BFu1s_B_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu1s_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_B_Vp(Test_BFu1s_B_Vp, "BFu1s_B_Vp", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu15i_B  {
  unsigned short v1:1;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu1s_BFu15i_B) C1{ Fs:1 Fi:15 Fc}



static void Test_BFu1s_BFu15i_B()
{
  {
    init_simple_test("BFu1s_BFu15i_B");
    static BFu1s_BFu15i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu15i_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1s_BFu15i_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1s_BFu15i_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu15i_B(Test_BFu1s_BFu15i_B, "BFu1s_BFu15i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu15ll_B  {
  unsigned short v1:1;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu1s_BFu15ll_B) C1{ Fs:1 FL:15 Fc}



static void Test_BFu1s_BFu15ll_B()
{
  {
    init_simple_test("BFu1s_BFu15ll_B");
    static BFu1s_BFu15ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu15ll_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1s_BFu15ll_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1s_BFu15ll_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu15ll_B(Test_BFu1s_BFu15ll_B, "BFu1s_BFu15ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu15s_B  {
  unsigned short v1:1;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu1s_BFu15s_B) C1{ Fs:1 Fs:15 Fc}



static void Test_BFu1s_BFu15s_B()
{
  {
    init_simple_test("BFu1s_BFu15s_B");
    static BFu1s_BFu15s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu15s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu15s_B");
    set_bf_and_test(lv, v2, 0, 1, 15, 1, "BFu1s_BFu15s_B");
    set_bf_and_test(lv, v2, 0, 1, 15, hide_ull(1LL<<14), "BFu1s_BFu15s_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu15s_B(Test_BFu1s_BFu15s_B, "BFu1s_BFu15s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu16i_B  {
  unsigned short v1:1;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu1s_BFu16i_B) C1{ Fs:1 Fi:16 Fc}



static void Test_BFu1s_BFu16i_B()
{
  {
    init_simple_test("BFu1s_BFu16i_B");
    static BFu1s_BFu16i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu16i_B");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu1s_BFu16i_B");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu1s_BFu16i_B");
    check_field_offset(lv, v3, 3, "BFu1s_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu16i_B(Test_BFu1s_BFu16i_B, "BFu1s_BFu16i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu16ll_B  {
  unsigned short v1:1;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu1s_BFu16ll_B) C1{ Fs:1 FL:16 Fc}



static void Test_BFu1s_BFu16ll_B()
{
  {
    init_simple_test("BFu1s_BFu16ll_B");
    static BFu1s_BFu16ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu16ll_B");
    set_bf_and_test(lv, v2, 0, 1, 16, 1, "BFu1s_BFu16ll_B");
    set_bf_and_test(lv, v2, 0, 1, 16, hide_ull(1LL<<15), "BFu1s_BFu16ll_B");
    check_field_offset(lv, v3, 3, "BFu1s_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu16ll_B(Test_BFu1s_BFu16ll_B, "BFu1s_BFu16ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu16s_B  {
  unsigned short v1:1;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu1s_BFu16s_B) C1{ Fs:1 Fs:16 Fc}



static void Test_BFu1s_BFu16s_B()
{
  {
    init_simple_test("BFu1s_BFu16s_B");
    static BFu1s_BFu16s_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu1s_BFu16s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu1s_BFu16s_B");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu1s_BFu16s_B");
    check_field_offset(lv, v3, 4, "BFu1s_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu16s_B(Test_BFu1s_BFu16s_B, "BFu1s_BFu16s_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu17i_B  {
  unsigned short v1:1;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu1s_BFu17i_B) C1{ Fs:1 Fi:17 Fc}



static void Test_BFu1s_BFu17i_B()
{
  {
    init_simple_test("BFu1s_BFu17i_B");
    static BFu1s_BFu17i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu17i_B");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu1s_BFu17i_B");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu1s_BFu17i_B");
    check_field_offset(lv, v3, 3, "BFu1s_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu17i_B(Test_BFu1s_BFu17i_B, "BFu1s_BFu17i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu17ll_B  {
  unsigned short v1:1;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu1s_BFu17ll_B) C1{ Fs:1 FL:17 Fc}



static void Test_BFu1s_BFu17ll_B()
{
  {
    init_simple_test("BFu1s_BFu17ll_B");
    static BFu1s_BFu17ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu17ll_B");
    set_bf_and_test(lv, v2, 0, 1, 17, 1, "BFu1s_BFu17ll_B");
    set_bf_and_test(lv, v2, 0, 1, 17, hide_ull(1LL<<16), "BFu1s_BFu17ll_B");
    check_field_offset(lv, v3, 3, "BFu1s_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu17ll_B(Test_BFu1s_BFu17ll_B, "BFu1s_BFu17ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu1c_B  {
  unsigned short v1:1;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu1s_BFu1c_B) C1{ Fs:1 Fc:1 Fc}



static void Test_BFu1s_BFu1c_B()
{
  {
    init_simple_test("BFu1s_BFu1c_B");
    static BFu1s_BFu1c_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1s_BFu1c_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu1c_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1s_BFu1c_B");
    check_field_offset(lv, v3, 1, "BFu1s_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu1c_B(Test_BFu1s_BFu1c_B, "BFu1s_BFu1c_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu1i_B  {
  unsigned short v1:1;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu1s_BFu1i_B) C1{ Fs:1 Fi:1 Fc}



static void Test_BFu1s_BFu1i_B()
{
  {
    init_simple_test("BFu1s_BFu1i_B");
    static BFu1s_BFu1i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu1i_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1s_BFu1i_B");
    check_field_offset(lv, v3, 1, "BFu1s_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu1i_B(Test_BFu1s_BFu1i_B, "BFu1s_BFu1i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu1ll_B  {
  unsigned short v1:1;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu1s_BFu1ll_B) C1{ Fs:1 FL:1 Fc}



static void Test_BFu1s_BFu1ll_B()
{
  {
    init_simple_test("BFu1s_BFu1ll_B");
    static BFu1s_BFu1ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu1ll_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1s_BFu1ll_B");
    check_field_offset(lv, v3, 1, "BFu1s_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu1ll_B(Test_BFu1s_BFu1ll_B, "BFu1s_BFu1ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu1s_B  {
  unsigned short v1:1;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu1s_BFu1s_B) C1{ Fs:1 Fs:1 Fc}



static void Test_BFu1s_BFu1s_B()
{
  {
    init_simple_test("BFu1s_BFu1s_B");
    static BFu1s_BFu1s_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1s_BFu1s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu1s_B");
    set_bf_and_test(lv, v2, 0, 1, 1, 1, "BFu1s_BFu1s_B");
    check_field_offset(lv, v3, 1, "BFu1s_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu1s_B(Test_BFu1s_BFu1s_B, "BFu1s_BFu1s_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu31i_B  {
  unsigned short v1:1;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu1s_BFu31i_B) C1{ Fs:1 Fi:31 Fc}



static void Test_BFu1s_BFu31i_B()
{
  {
    init_simple_test("BFu1s_BFu31i_B");
    static BFu1s_BFu31i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu31i_B");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu1s_BFu31i_B");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu1s_BFu31i_B");
    check_field_offset(lv, v3, 4, "BFu1s_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu31i_B(Test_BFu1s_BFu31i_B, "BFu1s_BFu31i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu31ll_B  {
  unsigned short v1:1;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu1s_BFu31ll_B) C1{ Fs:1 FL:31 Fc}



static void Test_BFu1s_BFu31ll_B()
{
  {
    init_simple_test("BFu1s_BFu31ll_B");
    static BFu1s_BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu31ll_B");
    set_bf_and_test(lv, v2, 0, 1, 31, 1, "BFu1s_BFu31ll_B");
    set_bf_and_test(lv, v2, 0, 1, 31, hide_ull(1LL<<30), "BFu1s_BFu31ll_B");
    check_field_offset(lv, v3, 4, "BFu1s_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu31ll_B(Test_BFu1s_BFu31ll_B, "BFu1s_BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu32i_B  {
  unsigned short v1:1;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu1s_BFu32i_B) C1{ Fs:1 Fi:32 Fc}



static void Test_BFu1s_BFu32i_B()
{
  {
    init_simple_test("BFu1s_BFu32i_B");
    static BFu1s_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1s_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu1s_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu1s_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu1s_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu32i_B(Test_BFu1s_BFu32i_B, "BFu1s_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu32ll_B  {
  unsigned short v1:1;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu1s_BFu32ll_B) C1{ Fs:1 FL:32 Fc}



static void Test_BFu1s_BFu32ll_B()
{
  {
    init_simple_test("BFu1s_BFu32ll_B");
    static BFu1s_BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu32ll_B");
    set_bf_and_test(lv, v2, 0, 1, 32, 1, "BFu1s_BFu32ll_B");
    set_bf_and_test(lv, v2, 0, 1, 32, hide_ull(1LL<<31), "BFu1s_BFu32ll_B");
    check_field_offset(lv, v3, 5, "BFu1s_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu32ll_B(Test_BFu1s_BFu32ll_B, "BFu1s_BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu33_B  {
  unsigned short v1:1;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu1s_BFu33_B) C1{ Fs:1 FL:33 Fc}



static void Test_BFu1s_BFu33_B()
{
  {
    init_simple_test("BFu1s_BFu33_B");
    static BFu1s_BFu33_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu1s_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu33_B");
    set_bf_and_test(lv, v2, 0, 1, 33, 1, "BFu1s_BFu33_B");
    set_bf_and_test(lv, v2, 0, 1, 33, hide_ull(1LL<<32), "BFu1s_BFu33_B");
    check_field_offset(lv, v3, 5, "BFu1s_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu33_B(Test_BFu1s_BFu33_B, "BFu1s_BFu33_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu7c_B  {
  unsigned short v1:1;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu1s_BFu7c_B) C1{ Fs:1 Fc:7 Fc}



static void Test_BFu1s_BFu7c_B()
{
  {
    init_simple_test("BFu1s_BFu7c_B");
    static BFu1s_BFu7c_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1s_BFu7c_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu7c_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1s_BFu7c_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1s_BFu7c_B");
    check_field_offset(lv, v3, 1, "BFu1s_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu7c_B(Test_BFu1s_BFu7c_B, "BFu1s_BFu7c_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu7i_B  {
  unsigned short v1:1;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu1s_BFu7i_B) C1{ Fs:1 Fi:7 Fc}



static void Test_BFu1s_BFu7i_B()
{
  {
    init_simple_test("BFu1s_BFu7i_B");
    static BFu1s_BFu7i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu7i_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1s_BFu7i_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1s_BFu7i_B");
    check_field_offset(lv, v3, 1, "BFu1s_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu7i_B(Test_BFu1s_BFu7i_B, "BFu1s_BFu7i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu7ll_B  {
  unsigned short v1:1;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu1s_BFu7ll_B) C1{ Fs:1 FL:7 Fc}



static void Test_BFu1s_BFu7ll_B()
{
  {
    init_simple_test("BFu1s_BFu7ll_B");
    static BFu1s_BFu7ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu7ll_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1s_BFu7ll_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1s_BFu7ll_B");
    check_field_offset(lv, v3, 1, "BFu1s_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu7ll_B(Test_BFu1s_BFu7ll_B, "BFu1s_BFu7ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu7s_B  {
  unsigned short v1:1;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu1s_BFu7s_B) C1{ Fs:1 Fs:7 Fc}



static void Test_BFu1s_BFu7s_B()
{
  {
    init_simple_test("BFu1s_BFu7s_B");
    static BFu1s_BFu7s_B lv;
    check2(sizeof(lv), 2, "sizeof(BFu1s_BFu7s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu7s_B");
    set_bf_and_test(lv, v2, 0, 1, 7, 1, "BFu1s_BFu7s_B");
    set_bf_and_test(lv, v2, 0, 1, 7, hide_ull(1LL<<6), "BFu1s_BFu7s_B");
    check_field_offset(lv, v3, 1, "BFu1s_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu7s_B(Test_BFu1s_BFu7s_B, "BFu1s_BFu7s_B", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu8c_B  {
  unsigned short v1:1;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu1s_BFu8c_B) C1{ Fs:1 Fc:8 Fc}



static void Test_BFu1s_BFu8c_B()
{
  {
    init_simple_test("BFu1s_BFu8c_B");
    static BFu1s_BFu8c_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu8c_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu8c_B");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu1s_BFu8c_B");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu1s_BFu8c_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu8c_B(Test_BFu1s_BFu8c_B, "BFu1s_BFu8c_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu8i_B  {
  unsigned short v1:1;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu1s_BFu8i_B) C1{ Fs:1 Fi:8 Fc}



static void Test_BFu1s_BFu8i_B()
{
  {
    init_simple_test("BFu1s_BFu8i_B");
    static BFu1s_BFu8i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu8i_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1s_BFu8i_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1s_BFu8i_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu8i_B(Test_BFu1s_BFu8i_B, "BFu1s_BFu8i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu8ll_B  {
  unsigned short v1:1;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu1s_BFu8ll_B) C1{ Fs:1 FL:8 Fc}



static void Test_BFu1s_BFu8ll_B()
{
  {
    init_simple_test("BFu1s_BFu8ll_B");
    static BFu1s_BFu8ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu8ll_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1s_BFu8ll_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1s_BFu8ll_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu8ll_B(Test_BFu1s_BFu8ll_B, "BFu1s_BFu8ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu8s_B  {
  unsigned short v1:1;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu1s_BFu8s_B) C1{ Fs:1 Fs:8 Fc}



static void Test_BFu1s_BFu8s_B()
{
  {
    init_simple_test("BFu1s_BFu8s_B");
    static BFu1s_BFu8s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu8s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu8s_B");
    set_bf_and_test(lv, v2, 0, 1, 8, 1, "BFu1s_BFu8s_B");
    set_bf_and_test(lv, v2, 0, 1, 8, hide_ull(1LL<<7), "BFu1s_BFu8s_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu8s_B(Test_BFu1s_BFu8s_B, "BFu1s_BFu8s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu9i_B  {
  unsigned short v1:1;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu1s_BFu9i_B) C1{ Fs:1 Fi:9 Fc}



static void Test_BFu1s_BFu9i_B()
{
  {
    init_simple_test("BFu1s_BFu9i_B");
    static BFu1s_BFu9i_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu9i_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1s_BFu9i_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1s_BFu9i_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu9i_B(Test_BFu1s_BFu9i_B, "BFu1s_BFu9i_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu9ll_B  {
  unsigned short v1:1;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu1s_BFu9ll_B) C1{ Fs:1 FL:9 Fc}



static void Test_BFu1s_BFu9ll_B()
{
  {
    init_simple_test("BFu1s_BFu9ll_B");
    static BFu1s_BFu9ll_B lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu1s_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu9ll_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1s_BFu9ll_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1s_BFu9ll_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu9ll_B(Test_BFu1s_BFu9ll_B, "BFu1s_BFu9ll_B", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_BFu9s_B  {
  unsigned short v1:1;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu1s_BFu9s_B) C1{ Fs:1 Fs:9 Fc}



static void Test_BFu1s_BFu9s_B()
{
  {
    init_simple_test("BFu1s_BFu9s_B");
    static BFu1s_BFu9s_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_BFu9s_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_BFu9s_B");
    set_bf_and_test(lv, v2, 0, 1, 9, 1, "BFu1s_BFu9s_B");
    set_bf_and_test(lv, v2, 0, 1, 9, hide_ull(1LL<<8), "BFu1s_BFu9s_B");
    check_field_offset(lv, v3, 2, "BFu1s_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_BFu9s_B(Test_BFu1s_BFu9s_B, "BFu1s_BFu9s_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_C_B  {
  unsigned short v1:1;
  char v2;
  bool v3;
};
//SIG(1 BFu1s_C_B) C1{ Fs:1 Fc[2]}



static void Test_BFu1s_C_B()
{
  {
    init_simple_test("BFu1s_C_B");
    static BFu1s_C_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_C_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_C_B");
    check_field_offset(lv, v2, 1, "BFu1s_C_B.v2");
    check_field_offset(lv, v3, 2, "BFu1s_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_C_B(Test_BFu1s_C_B, "BFu1s_C_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_D_B  {
  unsigned short v1:1;
  double v2;
  bool v3;
};
//SIG(1 BFu1s_D_B) C1{ Fs:1 FL Fc}



static void Test_BFu1s_D_B()
{
  {
    init_simple_test("BFu1s_D_B");
    static BFu1s_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1s_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1s_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_D_B(Test_BFu1s_D_B, "BFu1s_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_F_B  {
  unsigned short v1:1;
  float v2;
  bool v3;
};
//SIG(1 BFu1s_F_B) C1{ Fs:1 Fi Fc}



static void Test_BFu1s_F_B()
{
  {
    init_simple_test("BFu1s_F_B");
    static BFu1s_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1s_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_F_B");
    check_field_offset(lv, v2, 4, "BFu1s_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu1s_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_F_B(Test_BFu1s_F_B, "BFu1s_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_I_B  {
  unsigned short v1:1;
  int v2;
  bool v3;
};
//SIG(1 BFu1s_I_B) C1{ Fs:1 Fi Fc}



static void Test_BFu1s_I_B()
{
  {
    init_simple_test("BFu1s_I_B");
    static BFu1s_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1s_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_I_B");
    check_field_offset(lv, v2, 4, "BFu1s_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu1s_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_I_B(Test_BFu1s_I_B, "BFu1s_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_Ip_B  {
  unsigned short v1:1;
  int *v2;
  bool v3;
};
//SIG(1 BFu1s_Ip_B) C1{ Fs:1 Fp Fc}



static void Test_BFu1s_Ip_B()
{
  {
    init_simple_test("BFu1s_Ip_B");
    static BFu1s_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_Ip_B(Test_BFu1s_Ip_B, "BFu1s_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_L_B  {
  unsigned short v1:1;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu1s_L_B) C1{ Fs:1 FL Fc}



static void Test_BFu1s_L_B()
{
  {
    init_simple_test("BFu1s_L_B");
    static BFu1s_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1s_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1s_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_L_B(Test_BFu1s_L_B, "BFu1s_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_S_B  {
  unsigned short v1:1;
  short v2;
  bool v3;
};
//SIG(1 BFu1s_S_B) C1{ Fs:1 Fs Fc}



static void Test_BFu1s_S_B()
{
  {
    init_simple_test("BFu1s_S_B");
    static BFu1s_S_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu1s_S_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_S_B");
    check_field_offset(lv, v2, 2, "BFu1s_S_B.v2");
    check_field_offset(lv, v3, 4, "BFu1s_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_S_B(Test_BFu1s_S_B, "BFu1s_S_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_Uc_B  {
  unsigned short v1:1;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu1s_Uc_B) C1{ Fs:1 Fc[2]}



static void Test_BFu1s_Uc_B()
{
  {
    init_simple_test("BFu1s_Uc_B");
    static BFu1s_Uc_B lv;
    check2(sizeof(lv), 4, "sizeof(BFu1s_Uc_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Uc_B");
    check_field_offset(lv, v2, 1, "BFu1s_Uc_B.v2");
    check_field_offset(lv, v3, 2, "BFu1s_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_Uc_B(Test_BFu1s_Uc_B, "BFu1s_Uc_B", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_Ui_B  {
  unsigned short v1:1;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu1s_Ui_B) C1{ Fs:1 Fi Fc}



static void Test_BFu1s_Ui_B()
{
  {
    init_simple_test("BFu1s_Ui_B");
    static BFu1s_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu1s_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu1s_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Ui_B");
    check_field_offset(lv, v2, 4, "BFu1s_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu1s_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_Ui_B(Test_BFu1s_Ui_B, "BFu1s_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_Ul_B  {
  unsigned short v1:1;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu1s_Ul_B) C1{ Fs:1 FL Fc}



static void Test_BFu1s_Ul_B()
{
  {
    init_simple_test("BFu1s_Ul_B");
    static BFu1s_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu1s_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu1s_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_Ul_B(Test_BFu1s_Ul_B, "BFu1s_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_Us_B  {
  unsigned short v1:1;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu1s_Us_B) C1{ Fs:1 Fs Fc}



static void Test_BFu1s_Us_B()
{
  {
    init_simple_test("BFu1s_Us_B");
    static BFu1s_Us_B lv;
    check2(sizeof(lv), 6, "sizeof(BFu1s_Us_B)");
    check2(__alignof__(lv), 2, "__alignof__(BFu1s_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Us_B");
    check_field_offset(lv, v2, 2, "BFu1s_Us_B.v2");
    check_field_offset(lv, v3, 4, "BFu1s_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_Us_B(Test_BFu1s_Us_B, "BFu1s_Us_B", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu1s_Vp_B  {
  unsigned short v1:1;
  void *v2;
  bool v3;
};
//SIG(1 BFu1s_Vp_B) C1{ Fs:1 Fp Fc}



static void Test_BFu1s_Vp_B()
{
  {
    init_simple_test("BFu1s_Vp_B");
    static BFu1s_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu1s_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu1s_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 1, 1, "BFu1s_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu1s_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu1s_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu1s_Vp_B(Test_BFu1s_Vp_B, "BFu1s_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B  {
  unsigned int v1:31;
  bool v2;
};
//SIG(1 BFu31i_B) C1{ Fi:31 Fc}



static void Test_BFu31i_B()
{
  {
    init_simple_test("BFu31i_B");
    static BFu31i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B");
    check_field_offset(lv, v2, 4, "BFu31i_B.v2");
  }
}
static Arrange_To_Call_Me vBFu31i_B(Test_BFu31i_B, "BFu31i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_B  {
  unsigned int v1:31;
  bool v2;
  bool v3;
};
//SIG(1 BFu31i_B_B) C1{ Fi:31 Fc[2]}



static void Test_BFu31i_B_B()
{
  {
    init_simple_test("BFu31i_B_B");
    static BFu31i_B_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_B");
    check_field_offset(lv, v2, 4, "BFu31i_B_B.v2");
    check_field_offset(lv, v3, 5, "BFu31i_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_B(Test_BFu31i_B_B, "BFu31i_B_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu15i  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu31i_B_BFu15i) C1{ Fi:31 Fc Fi:15}



static void Test_BFu31i_B_BFu15i()
{
  {
    init_simple_test("BFu31i_B_BFu15i");
    static BFu31i_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu15i");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_B_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu15i(Test_BFu31i_B_BFu15i, "BFu31i_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu15ll  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31i_B_BFu15ll) C1{ Fi:31 Fc FL:15}



static void Test_BFu31i_B_BFu15ll()
{
  {
    init_simple_test("BFu31i_B_BFu15ll");
    static BFu31i_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31i_B_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31i_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu15ll(Test_BFu31i_B_BFu15ll, "BFu31i_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu15s  {
  unsigned int v1:31;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu31i_B_BFu15s) C1{ Fi:31 Fc Fs:15}



static void Test_BFu31i_B_BFu15s()
{
  {
    init_simple_test("BFu31i_B_BFu15s");
    static BFu31i_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu15s");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31i_B_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31i_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu15s(Test_BFu31i_B_BFu15s, "BFu31i_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu16i  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu31i_B_BFu16i) C1{ Fi:31 Fc Fi:16}



static void Test_BFu31i_B_BFu16i()
{
  {
    init_simple_test("BFu31i_B_BFu16i");
    static BFu31i_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu16i");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_B_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu16i(Test_BFu31i_B_BFu16i, "BFu31i_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu16ll  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31i_B_BFu16ll) C1{ Fi:31 Fc FL:16}



static void Test_BFu31i_B_BFu16ll()
{
  {
    init_simple_test("BFu31i_B_BFu16ll");
    static BFu31i_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31i_B_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31i_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu16ll(Test_BFu31i_B_BFu16ll, "BFu31i_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu16s  {
  unsigned int v1:31;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu31i_B_BFu16s) C1{ Fi:31 Fc Fs:16}



static void Test_BFu31i_B_BFu16s()
{
  {
    init_simple_test("BFu31i_B_BFu16s");
    static BFu31i_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu16s");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31i_B_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31i_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu16s(Test_BFu31i_B_BFu16s, "BFu31i_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu17i  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu31i_B_BFu17i) C1{ Fi:31 Fc Fi:17}



static void Test_BFu31i_B_BFu17i()
{
  {
    init_simple_test("BFu31i_B_BFu17i");
    static BFu31i_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu17i");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_B_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu17i(Test_BFu31i_B_BFu17i, "BFu31i_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu17ll  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31i_B_BFu17ll) C1{ Fi:31 Fc FL:17}



static void Test_BFu31i_B_BFu17ll()
{
  {
    init_simple_test("BFu31i_B_BFu17ll");
    static BFu31i_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31i_B_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31i_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu17ll(Test_BFu31i_B_BFu17ll, "BFu31i_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu1c  {
  unsigned int v1:31;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu31i_B_BFu1c) C1{ Fi:31 Fc Fc:1}



static void Test_BFu31i_B_BFu1c()
{
  {
    init_simple_test("BFu31i_B_BFu1c");
    static BFu31i_B_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu1c");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu1c(Test_BFu31i_B_BFu1c, "BFu31i_B_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu1i  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu31i_B_BFu1i) C1{ Fi:31 Fc Fi:1}



static void Test_BFu31i_B_BFu1i()
{
  {
    init_simple_test("BFu31i_B_BFu1i");
    static BFu31i_B_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu1i");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu1i(Test_BFu31i_B_BFu1i, "BFu31i_B_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu1ll  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31i_B_BFu1ll) C1{ Fi:31 Fc FL:1}



static void Test_BFu31i_B_BFu1ll()
{
  {
    init_simple_test("BFu31i_B_BFu1ll");
    static BFu31i_B_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu1ll(Test_BFu31i_B_BFu1ll, "BFu31i_B_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu1s  {
  unsigned int v1:31;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu31i_B_BFu1s) C1{ Fi:31 Fc Fs:1}



static void Test_BFu31i_B_BFu1s()
{
  {
    init_simple_test("BFu31i_B_BFu1s");
    static BFu31i_B_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu1s");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31i_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu1s(Test_BFu31i_B_BFu1s, "BFu31i_B_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu31i  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu31i_B_BFu31i) C1{ Fi:31 Fc Fi:31}



static void Test_BFu31i_B_BFu31i()
{
  {
    init_simple_test("BFu31i_B_BFu31i");
    static BFu31i_B_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu31i");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31i_B_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu31i(Test_BFu31i_B_BFu31i, "BFu31i_B_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu31ll  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31i_B_BFu31ll) C1{ Fi:31 Fc FL:31}



static void Test_BFu31i_B_BFu31ll()
{
  {
    init_simple_test("BFu31i_B_BFu31ll");
    static BFu31i_B_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu31i_B_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu31ll(Test_BFu31i_B_BFu31ll, "BFu31i_B_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu32i  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu31i_B_BFu32i) C1{ Fi:31 Fc Fi:32}



static void Test_BFu31i_B_BFu32i()
{
  {
    init_simple_test("BFu31i_B_BFu32i");
    static BFu31i_B_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu32i");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31i_B_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31i_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu32i(Test_BFu31i_B_BFu32i, "BFu31i_B_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu32ll  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31i_B_BFu32ll) C1{ Fi:31 Fc FL:32}



static void Test_BFu31i_B_BFu32ll()
{
  {
    init_simple_test("BFu31i_B_BFu32ll");
    static BFu31i_B_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu31i_B_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu31i_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu32ll(Test_BFu31i_B_BFu32ll, "BFu31i_B_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu33  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31i_B_BFu33) C1{ Fi:31 Fc FL:33}



static void Test_BFu31i_B_BFu33()
{
  {
    init_simple_test("BFu31i_B_BFu33");
    static BFu31i_B_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu33");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu31i_B_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu31i_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu33(Test_BFu31i_B_BFu33, "BFu31i_B_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu7c  {
  unsigned int v1:31;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu31i_B_BFu7c) C1{ Fi:31 Fc Fc:7}



static void Test_BFu31i_B_BFu7c()
{
  {
    init_simple_test("BFu31i_B_BFu7c");
    static BFu31i_B_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu7c");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_B_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu7c(Test_BFu31i_B_BFu7c, "BFu31i_B_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu7i  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu31i_B_BFu7i) C1{ Fi:31 Fc Fi:7}



static void Test_BFu31i_B_BFu7i()
{
  {
    init_simple_test("BFu31i_B_BFu7i");
    static BFu31i_B_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu7i");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_B_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu7i(Test_BFu31i_B_BFu7i, "BFu31i_B_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu7ll  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31i_B_BFu7ll) C1{ Fi:31 Fc FL:7}



static void Test_BFu31i_B_BFu7ll()
{
  {
    init_simple_test("BFu31i_B_BFu7ll");
    static BFu31i_B_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_B_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu7ll(Test_BFu31i_B_BFu7ll, "BFu31i_B_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu7s  {
  unsigned int v1:31;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu31i_B_BFu7s) C1{ Fi:31 Fc Fs:7}



static void Test_BFu31i_B_BFu7s()
{
  {
    init_simple_test("BFu31i_B_BFu7s");
    static BFu31i_B_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu7s");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31i_B_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31i_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu7s(Test_BFu31i_B_BFu7s, "BFu31i_B_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu8c  {
  unsigned int v1:31;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu31i_B_BFu8c) C1{ Fi:31 Fc Fc:8}



static void Test_BFu31i_B_BFu8c()
{
  {
    init_simple_test("BFu31i_B_BFu8c");
    static BFu31i_B_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu8c");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_B_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu8c(Test_BFu31i_B_BFu8c, "BFu31i_B_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu8i  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu31i_B_BFu8i) C1{ Fi:31 Fc Fi:8}



static void Test_BFu31i_B_BFu8i()
{
  {
    init_simple_test("BFu31i_B_BFu8i");
    static BFu31i_B_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu8i");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_B_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu8i(Test_BFu31i_B_BFu8i, "BFu31i_B_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu8ll  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31i_B_BFu8ll) C1{ Fi:31 Fc FL:8}



static void Test_BFu31i_B_BFu8ll()
{
  {
    init_simple_test("BFu31i_B_BFu8ll");
    static BFu31i_B_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_B_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu8ll(Test_BFu31i_B_BFu8ll, "BFu31i_B_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu8s  {
  unsigned int v1:31;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu31i_B_BFu8s) C1{ Fi:31 Fc Fs:8}



static void Test_BFu31i_B_BFu8s()
{
  {
    init_simple_test("BFu31i_B_BFu8s");
    static BFu31i_B_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu8s");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31i_B_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31i_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu8s(Test_BFu31i_B_BFu8s, "BFu31i_B_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu9i  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu31i_B_BFu9i) C1{ Fi:31 Fc Fi:9}



static void Test_BFu31i_B_BFu9i()
{
  {
    init_simple_test("BFu31i_B_BFu9i");
    static BFu31i_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu9i");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_B_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu9i(Test_BFu31i_B_BFu9i, "BFu31i_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu9ll  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31i_B_BFu9ll) C1{ Fi:31 Fc FL:9}



static void Test_BFu31i_B_BFu9ll()
{
  {
    init_simple_test("BFu31i_B_BFu9ll");
    static BFu31i_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31i_B_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31i_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu9ll(Test_BFu31i_B_BFu9ll, "BFu31i_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_BFu9s  {
  unsigned int v1:31;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu31i_B_BFu9s) C1{ Fi:31 Fc Fs:9}



static void Test_BFu31i_B_BFu9s()
{
  {
    init_simple_test("BFu31i_B_BFu9s");
    static BFu31i_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_BFu9s");
    check_field_offset(lv, v2, 4, "BFu31i_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31i_B_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31i_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu31i_B_BFu9s(Test_BFu31i_B_BFu9s, "BFu31i_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_C  {
  unsigned int v1:31;
  bool v2;
  char v3;
};
//SIG(1 BFu31i_B_C) C1{ Fi:31 Fc[2]}



static void Test_BFu31i_B_C()
{
  {
    init_simple_test("BFu31i_B_C");
    static BFu31i_B_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_C");
    check_field_offset(lv, v2, 4, "BFu31i_B_C.v2");
    check_field_offset(lv, v3, 5, "BFu31i_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_C(Test_BFu31i_B_C, "BFu31i_B_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_D  {
  unsigned int v1:31;
  bool v2;
  double v3;
};
//SIG(1 BFu31i_B_D) C1{ Fi:31 Fc FL}



static void Test_BFu31i_B_D()
{
  {
    init_simple_test("BFu31i_B_D");
    static BFu31i_B_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_D");
    check_field_offset(lv, v2, 4, "BFu31i_B_D.v2");
    check_field_offset(lv, v3, 8, "BFu31i_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_D(Test_BFu31i_B_D, "BFu31i_B_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_F  {
  unsigned int v1:31;
  bool v2;
  float v3;
};
//SIG(1 BFu31i_B_F) C1{ Fi:31 Fc Fi}



static void Test_BFu31i_B_F()
{
  {
    init_simple_test("BFu31i_B_F");
    static BFu31i_B_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_F");
    check_field_offset(lv, v2, 4, "BFu31i_B_F.v2");
    check_field_offset(lv, v3, 8, "BFu31i_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_F(Test_BFu31i_B_F, "BFu31i_B_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_I  {
  unsigned int v1:31;
  bool v2;
  int v3;
};
//SIG(1 BFu31i_B_I) C1{ Fi:31 Fc Fi}



static void Test_BFu31i_B_I()
{
  {
    init_simple_test("BFu31i_B_I");
    static BFu31i_B_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_I");
    check_field_offset(lv, v2, 4, "BFu31i_B_I.v2");
    check_field_offset(lv, v3, 8, "BFu31i_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_I(Test_BFu31i_B_I, "BFu31i_B_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_Ip  {
  unsigned int v1:31;
  bool v2;
  int *v3;
};
//SIG(1 BFu31i_B_Ip) C1{ Fi:31 Fc Fp}



static void Test_BFu31i_B_Ip()
{
  {
    init_simple_test("BFu31i_B_Ip");
    static BFu31i_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_Ip");
    check_field_offset(lv, v2, 4, "BFu31i_B_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu31i_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_Ip(Test_BFu31i_B_Ip, "BFu31i_B_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_L  {
  unsigned int v1:31;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu31i_B_L) C1{ Fi:31 Fc FL}



static void Test_BFu31i_B_L()
{
  {
    init_simple_test("BFu31i_B_L");
    static BFu31i_B_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_L");
    check_field_offset(lv, v2, 4, "BFu31i_B_L.v2");
    check_field_offset(lv, v3, 8, "BFu31i_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_L(Test_BFu31i_B_L, "BFu31i_B_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_S  {
  unsigned int v1:31;
  bool v2;
  short v3;
};
//SIG(1 BFu31i_B_S) C1{ Fi:31 Fc Fs}



static void Test_BFu31i_B_S()
{
  {
    init_simple_test("BFu31i_B_S");
    static BFu31i_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_S");
    check_field_offset(lv, v2, 4, "BFu31i_B_S.v2");
    check_field_offset(lv, v3, 6, "BFu31i_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_S(Test_BFu31i_B_S, "BFu31i_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_Uc  {
  unsigned int v1:31;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu31i_B_Uc) C1{ Fi:31 Fc[2]}



static void Test_BFu31i_B_Uc()
{
  {
    init_simple_test("BFu31i_B_Uc");
    static BFu31i_B_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_Uc");
    check_field_offset(lv, v2, 4, "BFu31i_B_Uc.v2");
    check_field_offset(lv, v3, 5, "BFu31i_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_Uc(Test_BFu31i_B_Uc, "BFu31i_B_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_Ui  {
  unsigned int v1:31;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu31i_B_Ui) C1{ Fi:31 Fc Fi}



static void Test_BFu31i_B_Ui()
{
  {
    init_simple_test("BFu31i_B_Ui");
    static BFu31i_B_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_Ui");
    check_field_offset(lv, v2, 4, "BFu31i_B_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu31i_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_Ui(Test_BFu31i_B_Ui, "BFu31i_B_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_Ul  {
  unsigned int v1:31;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu31i_B_Ul) C1{ Fi:31 Fc FL}



static void Test_BFu31i_B_Ul()
{
  {
    init_simple_test("BFu31i_B_Ul");
    static BFu31i_B_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31i_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_Ul");
    check_field_offset(lv, v2, 4, "BFu31i_B_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu31i_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_Ul(Test_BFu31i_B_Ul, "BFu31i_B_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_Us  {
  unsigned int v1:31;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu31i_B_Us) C1{ Fi:31 Fc Fs}



static void Test_BFu31i_B_Us()
{
  {
    init_simple_test("BFu31i_B_Us");
    static BFu31i_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_B_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_Us");
    check_field_offset(lv, v2, 4, "BFu31i_B_Us.v2");
    check_field_offset(lv, v3, 6, "BFu31i_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_Us(Test_BFu31i_B_Us, "BFu31i_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_B_Vp  {
  unsigned int v1:31;
  bool v2;
  void *v3;
};
//SIG(1 BFu31i_B_Vp) C1{ Fi:31 Fc Fp}



static void Test_BFu31i_B_Vp()
{
  {
    init_simple_test("BFu31i_B_Vp");
    static BFu31i_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_B_Vp");
    check_field_offset(lv, v2, 4, "BFu31i_B_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu31i_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_B_Vp(Test_BFu31i_B_Vp, "BFu31i_B_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu15i_B  {
  unsigned int v1:31;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu31i_BFu15i_B) C1{ Fi:31 Fi:15 Fc}



static void Test_BFu31i_BFu15i_B()
{
  {
    init_simple_test("BFu31i_BFu15i_B");
    static BFu31i_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15i_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15i_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15i_B");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu15i_B(Test_BFu31i_BFu15i_B, "BFu31i_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu15ll_B  {
  unsigned int v1:31;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu31i_BFu15ll_B) C1{ Fi:31 FL:15 Fc}



static void Test_BFu31i_BFu15ll_B()
{
  {
    init_simple_test("BFu31i_BFu15ll_B");
    static BFu31i_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15ll_B");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31i_BFu15ll_B");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31i_BFu15ll_B");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu15ll_B(Test_BFu31i_BFu15ll_B, "BFu31i_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu15s_B  {
  unsigned int v1:31;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu31i_BFu15s_B) C1{ Fi:31 Fs:15 Fc}



static void Test_BFu31i_BFu15s_B()
{
  {
    init_simple_test("BFu31i_BFu15s_B");
    static BFu31i_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu15s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu15s_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31i_BFu15s_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31i_BFu15s_B");
    check_field_offset(lv, v3, 6, "BFu31i_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu15s_B(Test_BFu31i_BFu15s_B, "BFu31i_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu16i_B  {
  unsigned int v1:31;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu31i_BFu16i_B) C1{ Fi:31 Fi:16 Fc}



static void Test_BFu31i_BFu16i_B()
{
  {
    init_simple_test("BFu31i_BFu16i_B");
    static BFu31i_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16i_B");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu16i_B(Test_BFu31i_BFu16i_B, "BFu31i_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu16ll_B  {
  unsigned int v1:31;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu31i_BFu16ll_B) C1{ Fi:31 FL:16 Fc}



static void Test_BFu31i_BFu16ll_B()
{
  {
    init_simple_test("BFu31i_BFu16ll_B");
    static BFu31i_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16ll_B");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31i_BFu16ll_B");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31i_BFu16ll_B");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu16ll_B(Test_BFu31i_BFu16ll_B, "BFu31i_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu16s_B  {
  unsigned int v1:31;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu31i_BFu16s_B) C1{ Fi:31 Fs:16 Fc}



static void Test_BFu31i_BFu16s_B()
{
  {
    init_simple_test("BFu31i_BFu16s_B");
    static BFu31i_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu16s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31i_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31i_BFu16s_B");
    check_field_offset(lv, v3, 6, "BFu31i_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu16s_B(Test_BFu31i_BFu16s_B, "BFu31i_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu17i_B  {
  unsigned int v1:31;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu31i_BFu17i_B) C1{ Fi:31 Fi:17 Fc}



static void Test_BFu31i_BFu17i_B()
{
  {
    init_simple_test("BFu31i_BFu17i_B");
    static BFu31i_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31i_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31i_BFu17i_B");
    check_field_offset(lv, v3, 7, "BFu31i_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu17i_B(Test_BFu31i_BFu17i_B, "BFu31i_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu17ll_B  {
  unsigned int v1:31;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu31i_BFu17ll_B) C1{ Fi:31 FL:17 Fc}



static void Test_BFu31i_BFu17ll_B()
{
  {
    init_simple_test("BFu31i_BFu17ll_B");
    static BFu31i_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu17ll_B");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31i_BFu17ll_B");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31i_BFu17ll_B");
    check_field_offset(lv, v3, 6, "BFu31i_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu17ll_B(Test_BFu31i_BFu17ll_B, "BFu31i_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu1c_B  {
  unsigned int v1:31;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu31i_BFu1c_B) C1{ Fi:31 Fc:1 Fc}



static void Test_BFu31i_BFu1c_B()
{
  {
    init_simple_test("BFu31i_BFu1c_B");
    static BFu31i_BFu1c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1c_B");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1c_B");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu1c_B(Test_BFu31i_BFu1c_B, "BFu31i_BFu1c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu1i_B  {
  unsigned int v1:31;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu31i_BFu1i_B) C1{ Fi:31 Fi:1 Fc}



static void Test_BFu31i_BFu1i_B()
{
  {
    init_simple_test("BFu31i_BFu1i_B");
    static BFu31i_BFu1i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1i_B");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1i_B");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu1i_B(Test_BFu31i_BFu1i_B, "BFu31i_BFu1i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu1ll_B  {
  unsigned int v1:31;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu31i_BFu1ll_B) C1{ Fi:31 FL:1 Fc}



static void Test_BFu31i_BFu1ll_B()
{
  {
    init_simple_test("BFu31i_BFu1ll_B");
    static BFu31i_BFu1ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1ll_B");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1ll_B");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu1ll_B(Test_BFu31i_BFu1ll_B, "BFu31i_BFu1ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu1s_B  {
  unsigned int v1:31;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu31i_BFu1s_B) C1{ Fi:31 Fs:1 Fc}



static void Test_BFu31i_BFu1s_B()
{
  {
    init_simple_test("BFu31i_BFu1s_B");
    static BFu31i_BFu1s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu1s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu1s_B");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31i_BFu1s_B");
    check_field_offset(lv, v3, 4, "BFu31i_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu1s_B(Test_BFu31i_BFu1s_B, "BFu31i_BFu1s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu31i_B  {
  unsigned int v1:31;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu31i_BFu31i_B) C1{ Fi:31 Fi:31 Fc}



static void Test_BFu31i_BFu31i_B()
{
  {
    init_simple_test("BFu31i_BFu31i_B");
    static BFu31i_BFu31i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu31i_B(Test_BFu31i_BFu31i_B, "BFu31i_BFu31i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu31ll_B  {
  unsigned int v1:31;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu31i_BFu31ll_B) C1{ Fi:31 FL:31 Fc}



static void Test_BFu31i_BFu31ll_B()
{
  {
    init_simple_test("BFu31i_BFu31ll_B");
    static BFu31i_BFu31ll_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_B");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31i_BFu31ll_B");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31i_BFu31ll_B");
    check_field_offset(lv, v3, 8, "BFu31i_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu31ll_B(Test_BFu31i_BFu31ll_B, "BFu31i_BFu31ll_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu32i_B  {
  unsigned int v1:31;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu31i_BFu32i_B) C1{ Fi:31 Fi:32 Fc}



static void Test_BFu31i_BFu32i_B()
{
  {
    init_simple_test("BFu31i_BFu32i_B");
    static BFu31i_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31i_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu32i_B(Test_BFu31i_BFu32i_B, "BFu31i_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu32ll_B  {
  unsigned int v1:31;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu31i_BFu32ll_B) C1{ Fi:31 FL:32 Fc}



static void Test_BFu31i_BFu32ll_B()
{
  {
    init_simple_test("BFu31i_BFu32ll_B");
    static BFu31i_BFu32ll_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu32ll_B");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31i_BFu32ll_B");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31i_BFu32ll_B");
    check_field_offset(lv, v3, 8, "BFu31i_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu32ll_B(Test_BFu31i_BFu32ll_B, "BFu31i_BFu32ll_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu33_B  {
  unsigned int v1:31;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu31i_BFu33_B) C1{ Fi:31 FL:33 Fc}



static void Test_BFu31i_BFu33_B()
{
  {
    init_simple_test("BFu31i_BFu33_B");
    static BFu31i_BFu33_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31i_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu33_B");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31i_BFu33_B");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31i_BFu33_B");
    check_field_offset(lv, v3, 8, "BFu31i_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu33_B(Test_BFu31i_BFu33_B, "BFu31i_BFu33_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu7c_B  {
  unsigned int v1:31;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu31i_BFu7c_B) C1{ Fi:31 Fc:7 Fc}



static void Test_BFu31i_BFu7c_B()
{
  {
    init_simple_test("BFu31i_BFu7c_B");
    static BFu31i_BFu7c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7c_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7c_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7c_B");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu7c_B(Test_BFu31i_BFu7c_B, "BFu31i_BFu7c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu7i_B  {
  unsigned int v1:31;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu31i_BFu7i_B) C1{ Fi:31 Fi:7 Fc}



static void Test_BFu31i_BFu7i_B()
{
  {
    init_simple_test("BFu31i_BFu7i_B");
    static BFu31i_BFu7i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7i_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7i_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7i_B");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu7i_B(Test_BFu31i_BFu7i_B, "BFu31i_BFu7i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu7ll_B  {
  unsigned int v1:31;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu31i_BFu7ll_B) C1{ Fi:31 FL:7 Fc}



static void Test_BFu31i_BFu7ll_B()
{
  {
    init_simple_test("BFu31i_BFu7ll_B");
    static BFu31i_BFu7ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7ll_B");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31i_BFu7ll_B");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31i_BFu7ll_B");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu7ll_B(Test_BFu31i_BFu7ll_B, "BFu31i_BFu7ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu7s_B  {
  unsigned int v1:31;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu31i_BFu7s_B) C1{ Fi:31 Fs:7 Fc}



static void Test_BFu31i_BFu7s_B()
{
  {
    init_simple_test("BFu31i_BFu7s_B");
    static BFu31i_BFu7s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu7s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu7s_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31i_BFu7s_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31i_BFu7s_B");
    check_field_offset(lv, v3, 5, "BFu31i_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu7s_B(Test_BFu31i_BFu7s_B, "BFu31i_BFu7s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu8c_B  {
  unsigned int v1:31;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu31i_BFu8c_B) C1{ Fi:31 Fc:8 Fc}



static void Test_BFu31i_BFu8c_B()
{
  {
    init_simple_test("BFu31i_BFu8c_B");
    static BFu31i_BFu8c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8c_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8c_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8c_B");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu8c_B(Test_BFu31i_BFu8c_B, "BFu31i_BFu8c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu8i_B  {
  unsigned int v1:31;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu31i_BFu8i_B) C1{ Fi:31 Fi:8 Fc}



static void Test_BFu31i_BFu8i_B()
{
  {
    init_simple_test("BFu31i_BFu8i_B");
    static BFu31i_BFu8i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8i_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8i_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8i_B");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu8i_B(Test_BFu31i_BFu8i_B, "BFu31i_BFu8i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu8ll_B  {
  unsigned int v1:31;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu31i_BFu8ll_B) C1{ Fi:31 FL:8 Fc}



static void Test_BFu31i_BFu8ll_B()
{
  {
    init_simple_test("BFu31i_BFu8ll_B");
    static BFu31i_BFu8ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8ll_B");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31i_BFu8ll_B");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31i_BFu8ll_B");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu8ll_B(Test_BFu31i_BFu8ll_B, "BFu31i_BFu8ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu8s_B  {
  unsigned int v1:31;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu31i_BFu8s_B) C1{ Fi:31 Fs:8 Fc}



static void Test_BFu31i_BFu8s_B()
{
  {
    init_simple_test("BFu31i_BFu8s_B");
    static BFu31i_BFu8s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu8s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu8s_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31i_BFu8s_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31i_BFu8s_B");
    check_field_offset(lv, v3, 5, "BFu31i_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu8s_B(Test_BFu31i_BFu8s_B, "BFu31i_BFu8s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu9i_B  {
  unsigned int v1:31;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu31i_BFu9i_B) C1{ Fi:31 Fi:9 Fc}



static void Test_BFu31i_BFu9i_B()
{
  {
    init_simple_test("BFu31i_BFu9i_B");
    static BFu31i_BFu9i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9i_B");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9i_B");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9i_B");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu9i_B(Test_BFu31i_BFu9i_B, "BFu31i_BFu9i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu9ll_B  {
  unsigned int v1:31;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu31i_BFu9ll_B) C1{ Fi:31 FL:9 Fc}



static void Test_BFu31i_BFu9ll_B()
{
  {
    init_simple_test("BFu31i_BFu9ll_B");
    static BFu31i_BFu9ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9ll_B");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31i_BFu9ll_B");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31i_BFu9ll_B");
    check_field_offset(lv, v3, 5, "BFu31i_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu9ll_B(Test_BFu31i_BFu9ll_B, "BFu31i_BFu9ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_BFu9s_B  {
  unsigned int v1:31;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu31i_BFu9s_B) C1{ Fi:31 Fs:9 Fc}



static void Test_BFu31i_BFu9s_B()
{
  {
    init_simple_test("BFu31i_BFu9s_B");
    static BFu31i_BFu9s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_BFu9s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_BFu9s_B");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31i_BFu9s_B");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31i_BFu9s_B");
    check_field_offset(lv, v3, 6, "BFu31i_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_BFu9s_B(Test_BFu31i_BFu9s_B, "BFu31i_BFu9s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_C_B  {
  unsigned int v1:31;
  char v2;
  bool v3;
};
//SIG(1 BFu31i_C_B) C1{ Fi:31 Fc[2]}



static void Test_BFu31i_C_B()
{
  {
    init_simple_test("BFu31i_C_B");
    static BFu31i_C_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_C_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_C_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_C_B");
    check_field_offset(lv, v2, 4, "BFu31i_C_B.v2");
    check_field_offset(lv, v3, 5, "BFu31i_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_C_B(Test_BFu31i_C_B, "BFu31i_C_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_D_B  {
  unsigned int v1:31;
  double v2;
  bool v3;
};
//SIG(1 BFu31i_D_B) C1{ Fi:31 FL Fc}



static void Test_BFu31i_D_B()
{
  {
    init_simple_test("BFu31i_D_B");
    static BFu31i_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_D_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_D_B(Test_BFu31i_D_B, "BFu31i_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_F_B  {
  unsigned int v1:31;
  float v2;
  bool v3;
};
//SIG(1 BFu31i_F_B) C1{ Fi:31 Fi Fc}



static void Test_BFu31i_F_B()
{
  {
    init_simple_test("BFu31i_F_B");
    static BFu31i_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_F_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_F_B");
    check_field_offset(lv, v2, 4, "BFu31i_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu31i_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_F_B(Test_BFu31i_F_B, "BFu31i_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_I_B  {
  unsigned int v1:31;
  int v2;
  bool v3;
};
//SIG(1 BFu31i_I_B) C1{ Fi:31 Fi Fc}



static void Test_BFu31i_I_B()
{
  {
    init_simple_test("BFu31i_I_B");
    static BFu31i_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_I_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_I_B");
    check_field_offset(lv, v2, 4, "BFu31i_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu31i_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_I_B(Test_BFu31i_I_B, "BFu31i_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_Ip_B  {
  unsigned int v1:31;
  int *v2;
  bool v3;
};
//SIG(1 BFu31i_Ip_B) C1{ Fi:31 Fp Fc}



static void Test_BFu31i_Ip_B()
{
  {
    init_simple_test("BFu31i_Ip_B");
    static BFu31i_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_Ip_B(Test_BFu31i_Ip_B, "BFu31i_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_L_B  {
  unsigned int v1:31;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu31i_L_B) C1{ Fi:31 FL Fc}



static void Test_BFu31i_L_B()
{
  {
    init_simple_test("BFu31i_L_B");
    static BFu31i_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_L_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_L_B(Test_BFu31i_L_B, "BFu31i_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_S_B  {
  unsigned int v1:31;
  short v2;
  bool v3;
};
//SIG(1 BFu31i_S_B) C1{ Fi:31 Fs Fc}



static void Test_BFu31i_S_B()
{
  {
    init_simple_test("BFu31i_S_B");
    static BFu31i_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_S_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_S_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_S_B");
    check_field_offset(lv, v2, 4, "BFu31i_S_B.v2");
    check_field_offset(lv, v3, 6, "BFu31i_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_S_B(Test_BFu31i_S_B, "BFu31i_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_Uc_B  {
  unsigned int v1:31;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu31i_Uc_B) C1{ Fi:31 Fc[2]}



static void Test_BFu31i_Uc_B()
{
  {
    init_simple_test("BFu31i_Uc_B");
    static BFu31i_Uc_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Uc_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Uc_B");
    check_field_offset(lv, v2, 4, "BFu31i_Uc_B.v2");
    check_field_offset(lv, v3, 5, "BFu31i_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_Uc_B(Test_BFu31i_Uc_B, "BFu31i_Uc_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_Ui_B  {
  unsigned int v1:31;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu31i_Ui_B) C1{ Fi:31 Fi Fc}



static void Test_BFu31i_Ui_B()
{
  {
    init_simple_test("BFu31i_Ui_B");
    static BFu31i_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu31i_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ui_B");
    check_field_offset(lv, v2, 4, "BFu31i_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu31i_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_Ui_B(Test_BFu31i_Ui_B, "BFu31i_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_Ul_B  {
  unsigned int v1:31;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu31i_Ul_B) C1{ Fi:31 FL Fc}



static void Test_BFu31i_Ul_B()
{
  {
    init_simple_test("BFu31i_Ul_B");
    static BFu31i_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31i_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31i_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_Ul_B(Test_BFu31i_Ul_B, "BFu31i_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_Us_B  {
  unsigned int v1:31;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu31i_Us_B) C1{ Fi:31 Fs Fc}



static void Test_BFu31i_Us_B()
{
  {
    init_simple_test("BFu31i_Us_B");
    static BFu31i_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31i_Us_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu31i_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Us_B");
    check_field_offset(lv, v2, 4, "BFu31i_Us_B.v2");
    check_field_offset(lv, v3, 6, "BFu31i_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_Us_B(Test_BFu31i_Us_B, "BFu31i_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31i_Vp_B  {
  unsigned int v1:31;
  void *v2;
  bool v3;
};
//SIG(1 BFu31i_Vp_B) C1{ Fi:31 Fp Fc}



static void Test_BFu31i_Vp_B()
{
  {
    init_simple_test("BFu31i_Vp_B");
    static BFu31i_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31i_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31i_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31i_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31i_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31i_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31i_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31i_Vp_B(Test_BFu31i_Vp_B, "BFu31i_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B  {
  __tsu64 v1:31;
  bool v2;
};
//SIG(1 BFu31ll_B) C1{ FL:31 Fc}



static void Test_BFu31ll_B()
{
  {
    init_simple_test("BFu31ll_B");
    static BFu31ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B");
    check_field_offset(lv, v2, 4, "BFu31ll_B.v2");
  }
}
static Arrange_To_Call_Me vBFu31ll_B(Test_BFu31ll_B, "BFu31ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_B  {
  __tsu64 v1:31;
  bool v2;
  bool v3;
};
//SIG(1 BFu31ll_B_B) C1{ FL:31 Fc[2]}



static void Test_BFu31ll_B_B()
{
  {
    init_simple_test("BFu31ll_B_B");
    static BFu31ll_B_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_B");
    check_field_offset(lv, v2, 4, "BFu31ll_B_B.v2");
    check_field_offset(lv, v3, 5, "BFu31ll_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_B(Test_BFu31ll_B_B, "BFu31ll_B_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu15i  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu31ll_B_BFu15i) C1{ FL:31 Fc Fi:15}



static void Test_BFu31ll_B_BFu15i()
{
  {
    init_simple_test("BFu31ll_B_BFu15i");
    static BFu31ll_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu15i");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31ll_B_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31ll_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu15i(Test_BFu31ll_B_BFu15i, "BFu31ll_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu15ll  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu31ll_B_BFu15ll) C1{ FL:31 Fc FL:15}



static void Test_BFu31ll_B_BFu15ll()
{
  {
    init_simple_test("BFu31ll_B_BFu15ll");
    static BFu31ll_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu31ll_B_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu31ll_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu15ll(Test_BFu31ll_B_BFu15ll, "BFu31ll_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu15s  {
  __tsu64 v1:31;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu31ll_B_BFu15s) C1{ FL:31 Fc Fs:15}



static void Test_BFu31ll_B_BFu15s()
{
  {
    init_simple_test("BFu31ll_B_BFu15s");
    static BFu31ll_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu15s");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu31ll_B_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu31ll_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu15s(Test_BFu31ll_B_BFu15s, "BFu31ll_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu16i  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu31ll_B_BFu16i) C1{ FL:31 Fc Fi:16}



static void Test_BFu31ll_B_BFu16i()
{
  {
    init_simple_test("BFu31ll_B_BFu16i");
    static BFu31ll_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu16i");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31ll_B_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31ll_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu16i(Test_BFu31ll_B_BFu16i, "BFu31ll_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu16ll  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu31ll_B_BFu16ll) C1{ FL:31 Fc FL:16}



static void Test_BFu31ll_B_BFu16ll()
{
  {
    init_simple_test("BFu31ll_B_BFu16ll");
    static BFu31ll_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu31ll_B_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu31ll_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu16ll(Test_BFu31ll_B_BFu16ll, "BFu31ll_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu16s  {
  __tsu64 v1:31;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu31ll_B_BFu16s) C1{ FL:31 Fc Fs:16}



static void Test_BFu31ll_B_BFu16s()
{
  {
    init_simple_test("BFu31ll_B_BFu16s");
    static BFu31ll_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu16s");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu31ll_B_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu31ll_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu16s(Test_BFu31ll_B_BFu16s, "BFu31ll_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu17i  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu31ll_B_BFu17i) C1{ FL:31 Fc Fi:17}



static void Test_BFu31ll_B_BFu17i()
{
  {
    init_simple_test("BFu31ll_B_BFu17i");
    static BFu31ll_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu17i");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31ll_B_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31ll_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu17i(Test_BFu31ll_B_BFu17i, "BFu31ll_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu17ll  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu31ll_B_BFu17ll) C1{ FL:31 Fc FL:17}



static void Test_BFu31ll_B_BFu17ll()
{
  {
    init_simple_test("BFu31ll_B_BFu17ll");
    static BFu31ll_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu31ll_B_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu31ll_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu17ll(Test_BFu31ll_B_BFu17ll, "BFu31ll_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu1c  {
  __tsu64 v1:31;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu31ll_B_BFu1c) C1{ FL:31 Fc Fc:1}



static void Test_BFu31ll_B_BFu1c()
{
  {
    init_simple_test("BFu31ll_B_BFu1c");
    static BFu31ll_B_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu1c");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31ll_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu1c(Test_BFu31ll_B_BFu1c, "BFu31ll_B_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu1i  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu31ll_B_BFu1i) C1{ FL:31 Fc Fi:1}



static void Test_BFu31ll_B_BFu1i()
{
  {
    init_simple_test("BFu31ll_B_BFu1i");
    static BFu31ll_B_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu1i");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31ll_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu1i(Test_BFu31ll_B_BFu1i, "BFu31ll_B_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu1ll  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu31ll_B_BFu1ll) C1{ FL:31 Fc FL:1}



static void Test_BFu31ll_B_BFu1ll()
{
  {
    init_simple_test("BFu31ll_B_BFu1ll");
    static BFu31ll_B_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31ll_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu1ll(Test_BFu31ll_B_BFu1ll, "BFu31ll_B_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu1s  {
  __tsu64 v1:31;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu31ll_B_BFu1s) C1{ FL:31 Fc Fs:1}



static void Test_BFu31ll_B_BFu1s()
{
  {
    init_simple_test("BFu31ll_B_BFu1s");
    static BFu31ll_B_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu1s");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu31ll_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu1s(Test_BFu31ll_B_BFu1s, "BFu31ll_B_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu31i  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu31ll_B_BFu31i) C1{ FL:31 Fc Fi:31}



static void Test_BFu31ll_B_BFu31i()
{
  {
    init_simple_test("BFu31ll_B_BFu31i");
    static BFu31ll_B_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu31i");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu31ll_B_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu31i(Test_BFu31ll_B_BFu31i, "BFu31ll_B_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu31ll  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu31ll_B_BFu31ll) C1{ FL:31 Fc FL:31}



static void Test_BFu31ll_B_BFu31ll()
{
  {
    init_simple_test("BFu31ll_B_BFu31ll");
    static BFu31ll_B_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu31ll_B_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu31ll(Test_BFu31ll_B_BFu31ll, "BFu31ll_B_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu32i  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu31ll_B_BFu32i) C1{ FL:31 Fc Fi:32}



static void Test_BFu31ll_B_BFu32i()
{
  {
    init_simple_test("BFu31ll_B_BFu32i");
    static BFu31ll_B_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu32i");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu31ll_B_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu31ll_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu32i(Test_BFu31ll_B_BFu32i, "BFu31ll_B_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu32ll  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu31ll_B_BFu32ll) C1{ FL:31 Fc FL:32}



static void Test_BFu31ll_B_BFu32ll()
{
  {
    init_simple_test("BFu31ll_B_BFu32ll");
    static BFu31ll_B_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu31ll_B_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu31ll_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu32ll(Test_BFu31ll_B_BFu32ll, "BFu31ll_B_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu33  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu31ll_B_BFu33) C1{ FL:31 Fc FL:33}



static void Test_BFu31ll_B_BFu33()
{
  {
    init_simple_test("BFu31ll_B_BFu33");
    static BFu31ll_B_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu33");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu31ll_B_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu31ll_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu33(Test_BFu31ll_B_BFu33, "BFu31ll_B_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu7c  {
  __tsu64 v1:31;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu31ll_B_BFu7c) C1{ FL:31 Fc Fc:7}



static void Test_BFu31ll_B_BFu7c()
{
  {
    init_simple_test("BFu31ll_B_BFu7c");
    static BFu31ll_B_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu7c");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31ll_B_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31ll_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu7c(Test_BFu31ll_B_BFu7c, "BFu31ll_B_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu7i  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu31ll_B_BFu7i) C1{ FL:31 Fc Fi:7}



static void Test_BFu31ll_B_BFu7i()
{
  {
    init_simple_test("BFu31ll_B_BFu7i");
    static BFu31ll_B_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu7i");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31ll_B_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31ll_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu7i(Test_BFu31ll_B_BFu7i, "BFu31ll_B_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu7ll  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu31ll_B_BFu7ll) C1{ FL:31 Fc FL:7}



static void Test_BFu31ll_B_BFu7ll()
{
  {
    init_simple_test("BFu31ll_B_BFu7ll");
    static BFu31ll_B_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31ll_B_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31ll_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu7ll(Test_BFu31ll_B_BFu7ll, "BFu31ll_B_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu7s  {
  __tsu64 v1:31;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu31ll_B_BFu7s) C1{ FL:31 Fc Fs:7}



static void Test_BFu31ll_B_BFu7s()
{
  {
    init_simple_test("BFu31ll_B_BFu7s");
    static BFu31ll_B_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu7s");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu31ll_B_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu31ll_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu7s(Test_BFu31ll_B_BFu7s, "BFu31ll_B_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu8c  {
  __tsu64 v1:31;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu31ll_B_BFu8c) C1{ FL:31 Fc Fc:8}



static void Test_BFu31ll_B_BFu8c()
{
  {
    init_simple_test("BFu31ll_B_BFu8c");
    static BFu31ll_B_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu8c");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31ll_B_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31ll_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu8c(Test_BFu31ll_B_BFu8c, "BFu31ll_B_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu8i  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu31ll_B_BFu8i) C1{ FL:31 Fc Fi:8}



static void Test_BFu31ll_B_BFu8i()
{
  {
    init_simple_test("BFu31ll_B_BFu8i");
    static BFu31ll_B_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu8i");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31ll_B_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31ll_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu8i(Test_BFu31ll_B_BFu8i, "BFu31ll_B_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu8ll  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu31ll_B_BFu8ll) C1{ FL:31 Fc FL:8}



static void Test_BFu31ll_B_BFu8ll()
{
  {
    init_simple_test("BFu31ll_B_BFu8ll");
    static BFu31ll_B_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31ll_B_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31ll_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu8ll(Test_BFu31ll_B_BFu8ll, "BFu31ll_B_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu8s  {
  __tsu64 v1:31;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu31ll_B_BFu8s) C1{ FL:31 Fc Fs:8}



static void Test_BFu31ll_B_BFu8s()
{
  {
    init_simple_test("BFu31ll_B_BFu8s");
    static BFu31ll_B_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu8s");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu31ll_B_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu31ll_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu8s(Test_BFu31ll_B_BFu8s, "BFu31ll_B_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu9i  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu31ll_B_BFu9i) C1{ FL:31 Fc Fi:9}



static void Test_BFu31ll_B_BFu9i()
{
  {
    init_simple_test("BFu31ll_B_BFu9i");
    static BFu31ll_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu9i");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31ll_B_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31ll_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu9i(Test_BFu31ll_B_BFu9i, "BFu31ll_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu9ll  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu31ll_B_BFu9ll) C1{ FL:31 Fc FL:9}



static void Test_BFu31ll_B_BFu9ll()
{
  {
    init_simple_test("BFu31ll_B_BFu9ll");
    static BFu31ll_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu31ll_B_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu31ll_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu9ll(Test_BFu31ll_B_BFu9ll, "BFu31ll_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_BFu9s  {
  __tsu64 v1:31;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu31ll_B_BFu9s) C1{ FL:31 Fc Fs:9}



static void Test_BFu31ll_B_BFu9s()
{
  {
    init_simple_test("BFu31ll_B_BFu9s");
    static BFu31ll_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_BFu9s");
    check_field_offset(lv, v2, 4, "BFu31ll_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu31ll_B_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu31ll_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_BFu9s(Test_BFu31ll_B_BFu9s, "BFu31ll_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_C  {
  __tsu64 v1:31;
  bool v2;
  char v3;
};
//SIG(1 BFu31ll_B_C) C1{ FL:31 Fc[2]}



static void Test_BFu31ll_B_C()
{
  {
    init_simple_test("BFu31ll_B_C");
    static BFu31ll_B_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_C");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_C");
    check_field_offset(lv, v2, 4, "BFu31ll_B_C.v2");
    check_field_offset(lv, v3, 5, "BFu31ll_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_C(Test_BFu31ll_B_C, "BFu31ll_B_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_D  {
  __tsu64 v1:31;
  bool v2;
  double v3;
};
//SIG(1 BFu31ll_B_D) C1{ FL:31 Fc FL}



static void Test_BFu31ll_B_D()
{
  {
    init_simple_test("BFu31ll_B_D");
    static BFu31ll_B_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_D");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_D");
    check_field_offset(lv, v2, 4, "BFu31ll_B_D.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_D(Test_BFu31ll_B_D, "BFu31ll_B_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_F  {
  __tsu64 v1:31;
  bool v2;
  float v3;
};
//SIG(1 BFu31ll_B_F) C1{ FL:31 Fc Fi}



static void Test_BFu31ll_B_F()
{
  {
    init_simple_test("BFu31ll_B_F");
    static BFu31ll_B_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_F");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_F");
    check_field_offset(lv, v2, 4, "BFu31ll_B_F.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_F(Test_BFu31ll_B_F, "BFu31ll_B_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_I  {
  __tsu64 v1:31;
  bool v2;
  int v3;
};
//SIG(1 BFu31ll_B_I) C1{ FL:31 Fc Fi}



static void Test_BFu31ll_B_I()
{
  {
    init_simple_test("BFu31ll_B_I");
    static BFu31ll_B_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_I");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_I");
    check_field_offset(lv, v2, 4, "BFu31ll_B_I.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_I(Test_BFu31ll_B_I, "BFu31ll_B_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_Ip  {
  __tsu64 v1:31;
  bool v2;
  int *v3;
};
//SIG(1 BFu31ll_B_Ip) C1{ FL:31 Fc Fp}



static void Test_BFu31ll_B_Ip()
{
  {
    init_simple_test("BFu31ll_B_Ip");
    static BFu31ll_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_Ip");
    check_field_offset(lv, v2, 4, "BFu31ll_B_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_Ip(Test_BFu31ll_B_Ip, "BFu31ll_B_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_L  {
  __tsu64 v1:31;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu31ll_B_L) C1{ FL:31 Fc FL}



static void Test_BFu31ll_B_L()
{
  {
    init_simple_test("BFu31ll_B_L");
    static BFu31ll_B_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_L");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_L");
    check_field_offset(lv, v2, 4, "BFu31ll_B_L.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_L(Test_BFu31ll_B_L, "BFu31ll_B_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_S  {
  __tsu64 v1:31;
  bool v2;
  short v3;
};
//SIG(1 BFu31ll_B_S) C1{ FL:31 Fc Fs}



static void Test_BFu31ll_B_S()
{
  {
    init_simple_test("BFu31ll_B_S");
    static BFu31ll_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_S");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_S");
    check_field_offset(lv, v2, 4, "BFu31ll_B_S.v2");
    check_field_offset(lv, v3, 6, "BFu31ll_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_S(Test_BFu31ll_B_S, "BFu31ll_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_Uc  {
  __tsu64 v1:31;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu31ll_B_Uc) C1{ FL:31 Fc[2]}



static void Test_BFu31ll_B_Uc()
{
  {
    init_simple_test("BFu31ll_B_Uc");
    static BFu31ll_B_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_Uc");
    check_field_offset(lv, v2, 4, "BFu31ll_B_Uc.v2");
    check_field_offset(lv, v3, 5, "BFu31ll_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_Uc(Test_BFu31ll_B_Uc, "BFu31ll_B_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_Ui  {
  __tsu64 v1:31;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu31ll_B_Ui) C1{ FL:31 Fc Fi}



static void Test_BFu31ll_B_Ui()
{
  {
    init_simple_test("BFu31ll_B_Ui");
    static BFu31ll_B_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_Ui");
    check_field_offset(lv, v2, 4, "BFu31ll_B_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_Ui(Test_BFu31ll_B_Ui, "BFu31ll_B_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_Ul  {
  __tsu64 v1:31;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu31ll_B_Ul) C1{ FL:31 Fc FL}



static void Test_BFu31ll_B_Ul()
{
  {
    init_simple_test("BFu31ll_B_Ul");
    static BFu31ll_B_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu31ll_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_Ul");
    check_field_offset(lv, v2, 4, "BFu31ll_B_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_Ul(Test_BFu31ll_B_Ul, "BFu31ll_B_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_Us  {
  __tsu64 v1:31;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu31ll_B_Us) C1{ FL:31 Fc Fs}



static void Test_BFu31ll_B_Us()
{
  {
    init_simple_test("BFu31ll_B_Us");
    static BFu31ll_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_B_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_Us");
    check_field_offset(lv, v2, 4, "BFu31ll_B_Us.v2");
    check_field_offset(lv, v3, 6, "BFu31ll_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_Us(Test_BFu31ll_B_Us, "BFu31ll_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_B_Vp  {
  __tsu64 v1:31;
  bool v2;
  void *v3;
};
//SIG(1 BFu31ll_B_Vp) C1{ FL:31 Fc Fp}



static void Test_BFu31ll_B_Vp()
{
  {
    init_simple_test("BFu31ll_B_Vp");
    static BFu31ll_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_B_Vp");
    check_field_offset(lv, v2, 4, "BFu31ll_B_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_B_Vp(Test_BFu31ll_B_Vp, "BFu31ll_B_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu15i_B  {
  __tsu64 v1:31;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu31ll_BFu15i_B) C1{ FL:31 Fi:15 Fc}



static void Test_BFu31ll_BFu15i_B()
{
  {
    init_simple_test("BFu31ll_BFu15i_B");
    static BFu31ll_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15i_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15i_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15i_B");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu15i_B(Test_BFu31ll_BFu15i_B, "BFu31ll_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu15ll_B  {
  __tsu64 v1:31;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu31ll_BFu15ll_B) C1{ FL:31 FL:15 Fc}



static void Test_BFu31ll_BFu15ll_B()
{
  {
    init_simple_test("BFu31ll_BFu15ll_B");
    static BFu31ll_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 3, 7, 15, 1, "BFu31ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 3, 7, 15, hide_ull(1LL<<14), "BFu31ll_BFu15ll_B");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu15ll_B(Test_BFu31ll_BFu15ll_B, "BFu31ll_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu15s_B  {
  __tsu64 v1:31;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu31ll_BFu15s_B) C1{ FL:31 Fs:15 Fc}



static void Test_BFu31ll_BFu15s_B()
{
  {
    init_simple_test("BFu31ll_BFu15s_B");
    static BFu31ll_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu15s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu15s_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu31ll_BFu15s_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu31ll_BFu15s_B");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu15s_B(Test_BFu31ll_BFu15s_B, "BFu31ll_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu16i_B  {
  __tsu64 v1:31;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu31ll_BFu16i_B) C1{ FL:31 Fi:16 Fc}



static void Test_BFu31ll_BFu16i_B()
{
  {
    init_simple_test("BFu31ll_BFu16i_B");
    static BFu31ll_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16i_B");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu16i_B(Test_BFu31ll_BFu16i_B, "BFu31ll_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu16ll_B  {
  __tsu64 v1:31;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu31ll_BFu16ll_B) C1{ FL:31 FL:16 Fc}



static void Test_BFu31ll_BFu16ll_B()
{
  {
    init_simple_test("BFu31ll_BFu16ll_B");
    static BFu31ll_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 3, 7, 16, 1, "BFu31ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 3, 7, 16, hide_ull(1LL<<15), "BFu31ll_BFu16ll_B");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu16ll_B(Test_BFu31ll_BFu16ll_B, "BFu31ll_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu16s_B  {
  __tsu64 v1:31;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu31ll_BFu16s_B) C1{ FL:31 Fs:16 Fc}



static void Test_BFu31ll_BFu16s_B()
{
  {
    init_simple_test("BFu31ll_BFu16s_B");
    static BFu31ll_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu16s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu31ll_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu31ll_BFu16s_B");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu16s_B(Test_BFu31ll_BFu16s_B, "BFu31ll_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu17i_B  {
  __tsu64 v1:31;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu31ll_BFu17i_B) C1{ FL:31 Fi:17 Fc}



static void Test_BFu31ll_BFu17i_B()
{
  {
    init_simple_test("BFu31ll_BFu17i_B");
    static BFu31ll_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu31ll_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu31ll_BFu17i_B");
    check_field_offset(lv, v3, 7, "BFu31ll_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu17i_B(Test_BFu31ll_BFu17i_B, "BFu31ll_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu17ll_B  {
  __tsu64 v1:31;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu31ll_BFu17ll_B) C1{ FL:31 FL:17 Fc}



static void Test_BFu31ll_BFu17ll_B()
{
  {
    init_simple_test("BFu31ll_BFu17ll_B");
    static BFu31ll_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 3, 7, 17, 1, "BFu31ll_BFu17ll_B");
    set_bf_and_test(lv, v2, 3, 7, 17, hide_ull(1LL<<16), "BFu31ll_BFu17ll_B");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu17ll_B(Test_BFu31ll_BFu17ll_B, "BFu31ll_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu1c_B  {
  __tsu64 v1:31;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu31ll_BFu1c_B) C1{ FL:31 Fc:1 Fc}



static void Test_BFu31ll_BFu1c_B()
{
  {
    init_simple_test("BFu31ll_BFu1c_B");
    static BFu31ll_BFu1c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1c_B");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1c_B");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu1c_B(Test_BFu31ll_BFu1c_B, "BFu31ll_BFu1c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu1i_B  {
  __tsu64 v1:31;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu31ll_BFu1i_B) C1{ FL:31 Fi:1 Fc}



static void Test_BFu31ll_BFu1i_B()
{
  {
    init_simple_test("BFu31ll_BFu1i_B");
    static BFu31ll_BFu1i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1i_B");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1i_B");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu1i_B(Test_BFu31ll_BFu1i_B, "BFu31ll_BFu1i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu1ll_B  {
  __tsu64 v1:31;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu31ll_BFu1ll_B) C1{ FL:31 FL:1 Fc}



static void Test_BFu31ll_BFu1ll_B()
{
  {
    init_simple_test("BFu31ll_BFu1ll_B");
    static BFu31ll_BFu1ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1ll_B");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1ll_B");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu1ll_B(Test_BFu31ll_BFu1ll_B, "BFu31ll_BFu1ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu1s_B  {
  __tsu64 v1:31;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu31ll_BFu1s_B) C1{ FL:31 Fs:1 Fc}



static void Test_BFu31ll_BFu1s_B()
{
  {
    init_simple_test("BFu31ll_BFu1s_B");
    static BFu31ll_BFu1s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu1s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu1s_B");
    set_bf_and_test(lv, v2, 3, 7, 1, 1, "BFu31ll_BFu1s_B");
    check_field_offset(lv, v3, 4, "BFu31ll_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu1s_B(Test_BFu31ll_BFu1s_B, "BFu31ll_BFu1s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu31i_B  {
  __tsu64 v1:31;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu31ll_BFu31i_B) C1{ FL:31 Fi:31 Fc}



static void Test_BFu31ll_BFu31i_B()
{
  {
    init_simple_test("BFu31ll_BFu31i_B");
    static BFu31ll_BFu31i_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu31ll_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu31i_B(Test_BFu31ll_BFu31i_B, "BFu31ll_BFu31i_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu31ll_B  {
  __tsu64 v1:31;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu31ll_BFu31ll_B) C1{ FL:31 FL:31 Fc}



static void Test_BFu31ll_BFu31ll_B()
{
  {
    init_simple_test("BFu31ll_BFu31ll_B");
    static BFu31ll_BFu31ll_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 3, 7, 31, 1, "BFu31ll_BFu31ll_B");
    set_bf_and_test(lv, v2, 3, 7, 31, hide_ull(1LL<<30), "BFu31ll_BFu31ll_B");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu31ll_B(Test_BFu31ll_BFu31ll_B, "BFu31ll_BFu31ll_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu32i_B  {
  __tsu64 v1:31;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu31ll_BFu32i_B) C1{ FL:31 Fi:32 Fc}



static void Test_BFu31ll_BFu32i_B()
{
  {
    init_simple_test("BFu31ll_BFu32i_B");
    static BFu31ll_BFu32i_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu31ll_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu31ll_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu32i_B(Test_BFu31ll_BFu32i_B, "BFu31ll_BFu32i_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu32ll_B  {
  __tsu64 v1:31;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu31ll_BFu32ll_B) C1{ FL:31 FL:32 Fc}



static void Test_BFu31ll_BFu32ll_B()
{
  {
    init_simple_test("BFu31ll_BFu32ll_B");
    static BFu31ll_BFu32ll_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 3, 7, 32, 1, "BFu31ll_BFu32ll_B");
    set_bf_and_test(lv, v2, 3, 7, 32, hide_ull(1LL<<31), "BFu31ll_BFu32ll_B");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu32ll_B(Test_BFu31ll_BFu32ll_B, "BFu31ll_BFu32ll_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu33_B  {
  __tsu64 v1:31;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu31ll_BFu33_B) C1{ FL:31 FL:33 Fc}



static void Test_BFu31ll_BFu33_B()
{
  {
    init_simple_test("BFu31ll_BFu33_B");
    static BFu31ll_BFu33_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu33_B");
    set_bf_and_test(lv, v2, 3, 7, 33, 1, "BFu31ll_BFu33_B");
    set_bf_and_test(lv, v2, 3, 7, 33, hide_ull(1LL<<32), "BFu31ll_BFu33_B");
    check_field_offset(lv, v3, 8, "BFu31ll_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu33_B(Test_BFu31ll_BFu33_B, "BFu31ll_BFu33_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu7c_B  {
  __tsu64 v1:31;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu31ll_BFu7c_B) C1{ FL:31 Fc:7 Fc}



static void Test_BFu31ll_BFu7c_B()
{
  {
    init_simple_test("BFu31ll_BFu7c_B");
    static BFu31ll_BFu7c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7c_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7c_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7c_B");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu7c_B(Test_BFu31ll_BFu7c_B, "BFu31ll_BFu7c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu7i_B  {
  __tsu64 v1:31;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu31ll_BFu7i_B) C1{ FL:31 Fi:7 Fc}



static void Test_BFu31ll_BFu7i_B()
{
  {
    init_simple_test("BFu31ll_BFu7i_B");
    static BFu31ll_BFu7i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7i_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7i_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7i_B");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu7i_B(Test_BFu31ll_BFu7i_B, "BFu31ll_BFu7i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu7ll_B  {
  __tsu64 v1:31;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu31ll_BFu7ll_B) C1{ FL:31 FL:7 Fc}



static void Test_BFu31ll_BFu7ll_B()
{
  {
    init_simple_test("BFu31ll_BFu7ll_B");
    static BFu31ll_BFu7ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 3, 7, 7, 1, "BFu31ll_BFu7ll_B");
    set_bf_and_test(lv, v2, 3, 7, 7, hide_ull(1LL<<6), "BFu31ll_BFu7ll_B");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu7ll_B(Test_BFu31ll_BFu7ll_B, "BFu31ll_BFu7ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu7s_B  {
  __tsu64 v1:31;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu31ll_BFu7s_B) C1{ FL:31 Fs:7 Fc}



static void Test_BFu31ll_BFu7s_B()
{
  {
    init_simple_test("BFu31ll_BFu7s_B");
    static BFu31ll_BFu7s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu7s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu7s_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu31ll_BFu7s_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu31ll_BFu7s_B");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu7s_B(Test_BFu31ll_BFu7s_B, "BFu31ll_BFu7s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu8c_B  {
  __tsu64 v1:31;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu31ll_BFu8c_B) C1{ FL:31 Fc:8 Fc}



static void Test_BFu31ll_BFu8c_B()
{
  {
    init_simple_test("BFu31ll_BFu8c_B");
    static BFu31ll_BFu8c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu8c_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu8c_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31ll_BFu8c_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu8c_B");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu8c_B(Test_BFu31ll_BFu8c_B, "BFu31ll_BFu8c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu8i_B  {
  __tsu64 v1:31;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu31ll_BFu8i_B) C1{ FL:31 Fi:8 Fc}



static void Test_BFu31ll_BFu8i_B()
{
  {
    init_simple_test("BFu31ll_BFu8i_B");
    static BFu31ll_BFu8i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu8i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu8i_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31ll_BFu8i_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu8i_B");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu8i_B(Test_BFu31ll_BFu8i_B, "BFu31ll_BFu8i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu8ll_B  {
  __tsu64 v1:31;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu31ll_BFu8ll_B) C1{ FL:31 FL:8 Fc}



static void Test_BFu31ll_BFu8ll_B()
{
  {
    init_simple_test("BFu31ll_BFu8ll_B");
    static BFu31ll_BFu8ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 3, 7, 8, 1, "BFu31ll_BFu8ll_B");
    set_bf_and_test(lv, v2, 3, 7, 8, hide_ull(1LL<<7), "BFu31ll_BFu8ll_B");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu8ll_B(Test_BFu31ll_BFu8ll_B, "BFu31ll_BFu8ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu8s_B  {
  __tsu64 v1:31;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu31ll_BFu8s_B) C1{ FL:31 Fs:8 Fc}



static void Test_BFu31ll_BFu8s_B()
{
  {
    init_simple_test("BFu31ll_BFu8s_B");
    static BFu31ll_BFu8s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu8s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu8s_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu31ll_BFu8s_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu31ll_BFu8s_B");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu8s_B(Test_BFu31ll_BFu8s_B, "BFu31ll_BFu8s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu9i_B  {
  __tsu64 v1:31;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu31ll_BFu9i_B) C1{ FL:31 Fi:9 Fc}



static void Test_BFu31ll_BFu9i_B()
{
  {
    init_simple_test("BFu31ll_BFu9i_B");
    static BFu31ll_BFu9i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu9i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu9i_B");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31ll_BFu9i_B");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu9i_B");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu9i_B(Test_BFu31ll_BFu9i_B, "BFu31ll_BFu9i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu9ll_B  {
  __tsu64 v1:31;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu31ll_BFu9ll_B) C1{ FL:31 FL:9 Fc}



static void Test_BFu31ll_BFu9ll_B()
{
  {
    init_simple_test("BFu31ll_BFu9ll_B");
    static BFu31ll_BFu9ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 3, 7, 9, 1, "BFu31ll_BFu9ll_B");
    set_bf_and_test(lv, v2, 3, 7, 9, hide_ull(1LL<<8), "BFu31ll_BFu9ll_B");
    check_field_offset(lv, v3, 5, "BFu31ll_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu9ll_B(Test_BFu31ll_BFu9ll_B, "BFu31ll_BFu9ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_BFu9s_B  {
  __tsu64 v1:31;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu31ll_BFu9s_B) C1{ FL:31 Fs:9 Fc}



static void Test_BFu31ll_BFu9s_B()
{
  {
    init_simple_test("BFu31ll_BFu9s_B");
    static BFu31ll_BFu9s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_BFu9s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_BFu9s_B");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu31ll_BFu9s_B");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu31ll_BFu9s_B");
    check_field_offset(lv, v3, 6, "BFu31ll_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_BFu9s_B(Test_BFu31ll_BFu9s_B, "BFu31ll_BFu9s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_C_B  {
  __tsu64 v1:31;
  char v2;
  bool v3;
};
//SIG(1 BFu31ll_C_B) C1{ FL:31 Fc[2]}



static void Test_BFu31ll_C_B()
{
  {
    init_simple_test("BFu31ll_C_B");
    static BFu31ll_C_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_C_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_C_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_C_B");
    check_field_offset(lv, v2, 4, "BFu31ll_C_B.v2");
    check_field_offset(lv, v3, 5, "BFu31ll_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_C_B(Test_BFu31ll_C_B, "BFu31ll_C_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_D_B  {
  __tsu64 v1:31;
  double v2;
  bool v3;
};
//SIG(1 BFu31ll_D_B) C1{ FL:31 FL Fc}



static void Test_BFu31ll_D_B()
{
  {
    init_simple_test("BFu31ll_D_B");
    static BFu31ll_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31ll_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_D_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31ll_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31ll_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_D_B(Test_BFu31ll_D_B, "BFu31ll_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_F_B  {
  __tsu64 v1:31;
  float v2;
  bool v3;
};
//SIG(1 BFu31ll_F_B) C1{ FL:31 Fi Fc}



static void Test_BFu31ll_F_B()
{
  {
    init_simple_test("BFu31ll_F_B");
    static BFu31ll_F_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_F_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_F_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_F_B");
    check_field_offset(lv, v2, 4, "BFu31ll_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_F_B(Test_BFu31ll_F_B, "BFu31ll_F_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_I_B  {
  __tsu64 v1:31;
  int v2;
  bool v3;
};
//SIG(1 BFu31ll_I_B) C1{ FL:31 Fi Fc}



static void Test_BFu31ll_I_B()
{
  {
    init_simple_test("BFu31ll_I_B");
    static BFu31ll_I_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_I_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_I_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_I_B");
    check_field_offset(lv, v2, 4, "BFu31ll_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_I_B(Test_BFu31ll_I_B, "BFu31ll_I_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_Ip_B  {
  __tsu64 v1:31;
  int *v2;
  bool v3;
};
//SIG(1 BFu31ll_Ip_B) C1{ FL:31 Fp Fc}



static void Test_BFu31ll_Ip_B()
{
  {
    init_simple_test("BFu31ll_Ip_B");
    static BFu31ll_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31ll_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31ll_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31ll_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_Ip_B(Test_BFu31ll_Ip_B, "BFu31ll_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_L_B  {
  __tsu64 v1:31;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu31ll_L_B) C1{ FL:31 FL Fc}



static void Test_BFu31ll_L_B()
{
  {
    init_simple_test("BFu31ll_L_B");
    static BFu31ll_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31ll_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_L_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31ll_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31ll_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_L_B(Test_BFu31ll_L_B, "BFu31ll_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_S_B  {
  __tsu64 v1:31;
  short v2;
  bool v3;
};
//SIG(1 BFu31ll_S_B) C1{ FL:31 Fs Fc}



static void Test_BFu31ll_S_B()
{
  {
    init_simple_test("BFu31ll_S_B");
    static BFu31ll_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_S_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_S_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_S_B");
    check_field_offset(lv, v2, 4, "BFu31ll_S_B.v2");
    check_field_offset(lv, v3, 6, "BFu31ll_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_S_B(Test_BFu31ll_S_B, "BFu31ll_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_Uc_B  {
  __tsu64 v1:31;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu31ll_Uc_B) C1{ FL:31 Fc[2]}



static void Test_BFu31ll_Uc_B()
{
  {
    init_simple_test("BFu31ll_Uc_B");
    static BFu31ll_Uc_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_Uc_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_Uc_B");
    check_field_offset(lv, v2, 4, "BFu31ll_Uc_B.v2");
    check_field_offset(lv, v3, 5, "BFu31ll_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_Uc_B(Test_BFu31ll_Uc_B, "BFu31ll_Uc_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_Ui_B  {
  __tsu64 v1:31;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu31ll_Ui_B) C1{ FL:31 Fi Fc}



static void Test_BFu31ll_Ui_B()
{
  {
    init_simple_test("BFu31ll_Ui_B");
    static BFu31ll_Ui_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu31ll_Ui_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_Ui_B");
    check_field_offset(lv, v2, 4, "BFu31ll_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu31ll_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_Ui_B(Test_BFu31ll_Ui_B, "BFu31ll_Ui_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_Ul_B  {
  __tsu64 v1:31;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu31ll_Ul_B) C1{ FL:31 FL Fc}



static void Test_BFu31ll_Ul_B()
{
  {
    init_simple_test("BFu31ll_Ul_B");
    static BFu31ll_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu31ll_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31ll_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu31ll_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_Ul_B(Test_BFu31ll_Ul_B, "BFu31ll_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_Us_B  {
  __tsu64 v1:31;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu31ll_Us_B) C1{ FL:31 Fs Fc}



static void Test_BFu31ll_Us_B()
{
  {
    init_simple_test("BFu31ll_Us_B");
    static BFu31ll_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu31ll_Us_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_Us_B");
    check_field_offset(lv, v2, 4, "BFu31ll_Us_B.v2");
    check_field_offset(lv, v3, 6, "BFu31ll_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_Us_B(Test_BFu31ll_Us_B, "BFu31ll_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu31ll_Vp_B  {
  __tsu64 v1:31;
  void *v2;
  bool v3;
};
//SIG(1 BFu31ll_Vp_B) C1{ FL:31 Fp Fc}



static void Test_BFu31ll_Vp_B()
{
  {
    init_simple_test("BFu31ll_Vp_B");
    static BFu31ll_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu31ll_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu31ll_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 31, 1, "BFu31ll_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 31, hide_ull(1LL<<30), "BFu31ll_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu31ll_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu31ll_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu31ll_Vp_B(Test_BFu31ll_Vp_B, "BFu31ll_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B  {
  unsigned int v1:32;
  bool v2;
};
//SIG(1 BFu32i_B) C1{ Fi:32 Fc}



static void Test_BFu32i_B()
{
  {
    init_simple_test("BFu32i_B");
    static BFu32i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B");
    check_field_offset(lv, v2, 4, "BFu32i_B.v2");
  }
}
static Arrange_To_Call_Me vBFu32i_B(Test_BFu32i_B, "BFu32i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_B  {
  unsigned int v1:32;
  bool v2;
  bool v3;
};
//SIG(1 BFu32i_B_B) C1{ Fi:32 Fc[2]}



static void Test_BFu32i_B_B()
{
  {
    init_simple_test("BFu32i_B_B");
    static BFu32i_B_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_B");
    check_field_offset(lv, v2, 4, "BFu32i_B_B.v2");
    check_field_offset(lv, v3, 5, "BFu32i_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_B(Test_BFu32i_B_B, "BFu32i_B_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu15i  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu32i_B_BFu15i) C1{ Fi:32 Fc Fi:15}



static void Test_BFu32i_B_BFu15i()
{
  {
    init_simple_test("BFu32i_B_BFu15i");
    static BFu32i_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu15i");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu32i_B_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu32i_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu15i(Test_BFu32i_B_BFu15i, "BFu32i_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu15ll  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu32i_B_BFu15ll) C1{ Fi:32 Fc FL:15}



static void Test_BFu32i_B_BFu15ll()
{
  {
    init_simple_test("BFu32i_B_BFu15ll");
    static BFu32i_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu32i_B_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu32i_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu15ll(Test_BFu32i_B_BFu15ll, "BFu32i_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu15s  {
  unsigned int v1:32;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu32i_B_BFu15s) C1{ Fi:32 Fc Fs:15}



static void Test_BFu32i_B_BFu15s()
{
  {
    init_simple_test("BFu32i_B_BFu15s");
    static BFu32i_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu15s");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu32i_B_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu32i_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu15s(Test_BFu32i_B_BFu15s, "BFu32i_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu16i  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu32i_B_BFu16i) C1{ Fi:32 Fc Fi:16}



static void Test_BFu32i_B_BFu16i()
{
  {
    init_simple_test("BFu32i_B_BFu16i");
    static BFu32i_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu16i");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu32i_B_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu32i_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu16i(Test_BFu32i_B_BFu16i, "BFu32i_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu16ll  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu32i_B_BFu16ll) C1{ Fi:32 Fc FL:16}



static void Test_BFu32i_B_BFu16ll()
{
  {
    init_simple_test("BFu32i_B_BFu16ll");
    static BFu32i_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu32i_B_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu32i_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu16ll(Test_BFu32i_B_BFu16ll, "BFu32i_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu16s  {
  unsigned int v1:32;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu32i_B_BFu16s) C1{ Fi:32 Fc Fs:16}



static void Test_BFu32i_B_BFu16s()
{
  {
    init_simple_test("BFu32i_B_BFu16s");
    static BFu32i_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu16s");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu32i_B_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu32i_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu16s(Test_BFu32i_B_BFu16s, "BFu32i_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu17i  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu32i_B_BFu17i) C1{ Fi:32 Fc Fi:17}



static void Test_BFu32i_B_BFu17i()
{
  {
    init_simple_test("BFu32i_B_BFu17i");
    static BFu32i_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu17i");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu32i_B_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu32i_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu17i(Test_BFu32i_B_BFu17i, "BFu32i_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu17ll  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu32i_B_BFu17ll) C1{ Fi:32 Fc FL:17}



static void Test_BFu32i_B_BFu17ll()
{
  {
    init_simple_test("BFu32i_B_BFu17ll");
    static BFu32i_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu32i_B_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu32i_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu17ll(Test_BFu32i_B_BFu17ll, "BFu32i_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu1c  {
  unsigned int v1:32;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu32i_B_BFu1c) C1{ Fi:32 Fc Fc:1}



static void Test_BFu32i_B_BFu1c()
{
  {
    init_simple_test("BFu32i_B_BFu1c");
    static BFu32i_B_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu1c");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu32i_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu1c(Test_BFu32i_B_BFu1c, "BFu32i_B_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu1i  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu32i_B_BFu1i) C1{ Fi:32 Fc Fi:1}



static void Test_BFu32i_B_BFu1i()
{
  {
    init_simple_test("BFu32i_B_BFu1i");
    static BFu32i_B_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu1i");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu32i_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu1i(Test_BFu32i_B_BFu1i, "BFu32i_B_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu1ll  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu32i_B_BFu1ll) C1{ Fi:32 Fc FL:1}



static void Test_BFu32i_B_BFu1ll()
{
  {
    init_simple_test("BFu32i_B_BFu1ll");
    static BFu32i_B_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu32i_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu1ll(Test_BFu32i_B_BFu1ll, "BFu32i_B_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu1s  {
  unsigned int v1:32;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu32i_B_BFu1s) C1{ Fi:32 Fc Fs:1}



static void Test_BFu32i_B_BFu1s()
{
  {
    init_simple_test("BFu32i_B_BFu1s");
    static BFu32i_B_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu1s");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu32i_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu1s(Test_BFu32i_B_BFu1s, "BFu32i_B_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu31i  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu32i_B_BFu31i) C1{ Fi:32 Fc Fi:31}



static void Test_BFu32i_B_BFu31i()
{
  {
    init_simple_test("BFu32i_B_BFu31i");
    static BFu32i_B_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_B_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu31i");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu32i_B_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu32i_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu31i(Test_BFu32i_B_BFu31i, "BFu32i_B_BFu31i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu31ll  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu32i_B_BFu31ll) C1{ Fi:32 Fc FL:31}



static void Test_BFu32i_B_BFu31ll()
{
  {
    init_simple_test("BFu32i_B_BFu31ll");
    static BFu32i_B_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32i_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu32i_B_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu32i_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu31ll(Test_BFu32i_B_BFu31ll, "BFu32i_B_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu32i  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu32i_B_BFu32i) C1{ Fi:32 Fc Fi:32}



static void Test_BFu32i_B_BFu32i()
{
  {
    init_simple_test("BFu32i_B_BFu32i");
    static BFu32i_B_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_B_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu32i");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu32i_B_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu32i(Test_BFu32i_B_BFu32i, "BFu32i_B_BFu32i", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu32ll  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu32i_B_BFu32ll) C1{ Fi:32 Fc FL:32}



static void Test_BFu32i_B_BFu32ll()
{
  {
    init_simple_test("BFu32i_B_BFu32ll");
    static BFu32i_B_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32i_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu32i_B_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu32ll(Test_BFu32i_B_BFu32ll, "BFu32i_B_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu33  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu32i_B_BFu33) C1{ Fi:32 Fc FL:33}



static void Test_BFu32i_B_BFu33()
{
  {
    init_simple_test("BFu32i_B_BFu33");
    static BFu32i_B_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32i_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu33");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu32i_B_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu32i_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu33(Test_BFu32i_B_BFu33, "BFu32i_B_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu7c  {
  unsigned int v1:32;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu32i_B_BFu7c) C1{ Fi:32 Fc Fc:7}



static void Test_BFu32i_B_BFu7c()
{
  {
    init_simple_test("BFu32i_B_BFu7c");
    static BFu32i_B_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu7c");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu32i_B_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu32i_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu7c(Test_BFu32i_B_BFu7c, "BFu32i_B_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu7i  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu32i_B_BFu7i) C1{ Fi:32 Fc Fi:7}



static void Test_BFu32i_B_BFu7i()
{
  {
    init_simple_test("BFu32i_B_BFu7i");
    static BFu32i_B_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu7i");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu32i_B_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu32i_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu7i(Test_BFu32i_B_BFu7i, "BFu32i_B_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu7ll  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu32i_B_BFu7ll) C1{ Fi:32 Fc FL:7}



static void Test_BFu32i_B_BFu7ll()
{
  {
    init_simple_test("BFu32i_B_BFu7ll");
    static BFu32i_B_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu32i_B_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu32i_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu7ll(Test_BFu32i_B_BFu7ll, "BFu32i_B_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu7s  {
  unsigned int v1:32;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu32i_B_BFu7s) C1{ Fi:32 Fc Fs:7}



static void Test_BFu32i_B_BFu7s()
{
  {
    init_simple_test("BFu32i_B_BFu7s");
    static BFu32i_B_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu7s");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu32i_B_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu32i_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu7s(Test_BFu32i_B_BFu7s, "BFu32i_B_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu8c  {
  unsigned int v1:32;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu32i_B_BFu8c) C1{ Fi:32 Fc Fc:8}



static void Test_BFu32i_B_BFu8c()
{
  {
    init_simple_test("BFu32i_B_BFu8c");
    static BFu32i_B_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu8c");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu32i_B_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu32i_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu8c(Test_BFu32i_B_BFu8c, "BFu32i_B_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu8i  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu32i_B_BFu8i) C1{ Fi:32 Fc Fi:8}



static void Test_BFu32i_B_BFu8i()
{
  {
    init_simple_test("BFu32i_B_BFu8i");
    static BFu32i_B_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu8i");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu32i_B_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu32i_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu8i(Test_BFu32i_B_BFu8i, "BFu32i_B_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu8ll  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu32i_B_BFu8ll) C1{ Fi:32 Fc FL:8}



static void Test_BFu32i_B_BFu8ll()
{
  {
    init_simple_test("BFu32i_B_BFu8ll");
    static BFu32i_B_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu32i_B_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu32i_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu8ll(Test_BFu32i_B_BFu8ll, "BFu32i_B_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu8s  {
  unsigned int v1:32;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu32i_B_BFu8s) C1{ Fi:32 Fc Fs:8}



static void Test_BFu32i_B_BFu8s()
{
  {
    init_simple_test("BFu32i_B_BFu8s");
    static BFu32i_B_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu8s");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu32i_B_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu32i_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu8s(Test_BFu32i_B_BFu8s, "BFu32i_B_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu9i  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu32i_B_BFu9i) C1{ Fi:32 Fc Fi:9}



static void Test_BFu32i_B_BFu9i()
{
  {
    init_simple_test("BFu32i_B_BFu9i");
    static BFu32i_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu9i");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu32i_B_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu32i_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu9i(Test_BFu32i_B_BFu9i, "BFu32i_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu9ll  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu32i_B_BFu9ll) C1{ Fi:32 Fc FL:9}



static void Test_BFu32i_B_BFu9ll()
{
  {
    init_simple_test("BFu32i_B_BFu9ll");
    static BFu32i_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu32i_B_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu32i_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu9ll(Test_BFu32i_B_BFu9ll, "BFu32i_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_BFu9s  {
  unsigned int v1:32;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu32i_B_BFu9s) C1{ Fi:32 Fc Fs:9}



static void Test_BFu32i_B_BFu9s()
{
  {
    init_simple_test("BFu32i_B_BFu9s");
    static BFu32i_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_BFu9s");
    check_field_offset(lv, v2, 4, "BFu32i_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu32i_B_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu32i_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu32i_B_BFu9s(Test_BFu32i_B_BFu9s, "BFu32i_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_C  {
  unsigned int v1:32;
  bool v2;
  char v3;
};
//SIG(1 BFu32i_B_C) C1{ Fi:32 Fc[2]}



static void Test_BFu32i_B_C()
{
  {
    init_simple_test("BFu32i_B_C");
    static BFu32i_B_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_C");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_C");
    check_field_offset(lv, v2, 4, "BFu32i_B_C.v2");
    check_field_offset(lv, v3, 5, "BFu32i_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_C(Test_BFu32i_B_C, "BFu32i_B_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_D  {
  unsigned int v1:32;
  bool v2;
  double v3;
};
//SIG(1 BFu32i_B_D) C1{ Fi:32 Fc FL}



static void Test_BFu32i_B_D()
{
  {
    init_simple_test("BFu32i_B_D");
    static BFu32i_B_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu32i_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_D");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_D");
    check_field_offset(lv, v2, 4, "BFu32i_B_D.v2");
    check_field_offset(lv, v3, 8, "BFu32i_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_D(Test_BFu32i_B_D, "BFu32i_B_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_F  {
  unsigned int v1:32;
  bool v2;
  float v3;
};
//SIG(1 BFu32i_B_F) C1{ Fi:32 Fc Fi}



static void Test_BFu32i_B_F()
{
  {
    init_simple_test("BFu32i_B_F");
    static BFu32i_B_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_B_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_F");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_F");
    check_field_offset(lv, v2, 4, "BFu32i_B_F.v2");
    check_field_offset(lv, v3, 8, "BFu32i_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_F(Test_BFu32i_B_F, "BFu32i_B_F", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_I  {
  unsigned int v1:32;
  bool v2;
  int v3;
};
//SIG(1 BFu32i_B_I) C1{ Fi:32 Fc Fi}



static void Test_BFu32i_B_I()
{
  {
    init_simple_test("BFu32i_B_I");
    static BFu32i_B_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_B_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_I");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_I");
    check_field_offset(lv, v2, 4, "BFu32i_B_I.v2");
    check_field_offset(lv, v3, 8, "BFu32i_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_I(Test_BFu32i_B_I, "BFu32i_B_I", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_Ip  {
  unsigned int v1:32;
  bool v2;
  int *v3;
};
//SIG(1 BFu32i_B_Ip) C1{ Fi:32 Fc Fp}



static void Test_BFu32i_B_Ip()
{
  {
    init_simple_test("BFu32i_B_Ip");
    static BFu32i_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32i_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_Ip");
    check_field_offset(lv, v2, 4, "BFu32i_B_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu32i_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_Ip(Test_BFu32i_B_Ip, "BFu32i_B_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_L  {
  unsigned int v1:32;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu32i_B_L) C1{ Fi:32 Fc FL}



static void Test_BFu32i_B_L()
{
  {
    init_simple_test("BFu32i_B_L");
    static BFu32i_B_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu32i_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_L");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_L");
    check_field_offset(lv, v2, 4, "BFu32i_B_L.v2");
    check_field_offset(lv, v3, 8, "BFu32i_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_L(Test_BFu32i_B_L, "BFu32i_B_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_S  {
  unsigned int v1:32;
  bool v2;
  short v3;
};
//SIG(1 BFu32i_B_S) C1{ Fi:32 Fc Fs}



static void Test_BFu32i_B_S()
{
  {
    init_simple_test("BFu32i_B_S");
    static BFu32i_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_S");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_S");
    check_field_offset(lv, v2, 4, "BFu32i_B_S.v2");
    check_field_offset(lv, v3, 6, "BFu32i_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_S(Test_BFu32i_B_S, "BFu32i_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_Uc  {
  unsigned int v1:32;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu32i_B_Uc) C1{ Fi:32 Fc[2]}



static void Test_BFu32i_B_Uc()
{
  {
    init_simple_test("BFu32i_B_Uc");
    static BFu32i_B_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_Uc");
    check_field_offset(lv, v2, 4, "BFu32i_B_Uc.v2");
    check_field_offset(lv, v3, 5, "BFu32i_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_Uc(Test_BFu32i_B_Uc, "BFu32i_B_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_Ui  {
  unsigned int v1:32;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu32i_B_Ui) C1{ Fi:32 Fc Fi}



static void Test_BFu32i_B_Ui()
{
  {
    init_simple_test("BFu32i_B_Ui");
    static BFu32i_B_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_B_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_Ui");
    check_field_offset(lv, v2, 4, "BFu32i_B_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu32i_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_Ui(Test_BFu32i_B_Ui, "BFu32i_B_Ui", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_Ul  {
  unsigned int v1:32;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu32i_B_Ul) C1{ Fi:32 Fc FL}



static void Test_BFu32i_B_Ul()
{
  {
    init_simple_test("BFu32i_B_Ul");
    static BFu32i_B_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu32i_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_Ul");
    check_field_offset(lv, v2, 4, "BFu32i_B_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu32i_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_Ul(Test_BFu32i_B_Ul, "BFu32i_B_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_Us  {
  unsigned int v1:32;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu32i_B_Us) C1{ Fi:32 Fc Fs}



static void Test_BFu32i_B_Us()
{
  {
    init_simple_test("BFu32i_B_Us");
    static BFu32i_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_B_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_Us");
    check_field_offset(lv, v2, 4, "BFu32i_B_Us.v2");
    check_field_offset(lv, v3, 6, "BFu32i_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_Us(Test_BFu32i_B_Us, "BFu32i_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_B_Vp  {
  unsigned int v1:32;
  bool v2;
  void *v3;
};
//SIG(1 BFu32i_B_Vp) C1{ Fi:32 Fc Fp}



static void Test_BFu32i_B_Vp()
{
  {
    init_simple_test("BFu32i_B_Vp");
    static BFu32i_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32i_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_B_Vp");
    check_field_offset(lv, v2, 4, "BFu32i_B_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu32i_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_B_Vp(Test_BFu32i_B_Vp, "BFu32i_B_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu15i_B  {
  unsigned int v1:32;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu32i_BFu15i_B) C1{ Fi:32 Fi:15 Fc}



static void Test_BFu32i_BFu15i_B()
{
  {
    init_simple_test("BFu32i_BFu15i_B");
    static BFu32i_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu15i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu15i_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu32i_BFu15i_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu32i_BFu15i_B");
    check_field_offset(lv, v3, 6, "BFu32i_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu15i_B(Test_BFu32i_BFu15i_B, "BFu32i_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu15ll_B  {
  unsigned int v1:32;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu32i_BFu15ll_B) C1{ Fi:32 FL:15 Fc}



static void Test_BFu32i_BFu15ll_B()
{
  {
    init_simple_test("BFu32i_BFu15ll_B");
    static BFu32i_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu15ll_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu32i_BFu15ll_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu32i_BFu15ll_B");
    check_field_offset(lv, v3, 6, "BFu32i_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu15ll_B(Test_BFu32i_BFu15ll_B, "BFu32i_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu15s_B  {
  unsigned int v1:32;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu32i_BFu15s_B) C1{ Fi:32 Fs:15 Fc}



static void Test_BFu32i_BFu15s_B()
{
  {
    init_simple_test("BFu32i_BFu15s_B");
    static BFu32i_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu15s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu15s_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu32i_BFu15s_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu32i_BFu15s_B");
    check_field_offset(lv, v3, 6, "BFu32i_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu15s_B(Test_BFu32i_BFu15s_B, "BFu32i_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu16i_B  {
  unsigned int v1:32;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu32i_BFu16i_B) C1{ Fi:32 Fi:16 Fc}



static void Test_BFu32i_BFu16i_B()
{
  {
    init_simple_test("BFu32i_BFu16i_B");
    static BFu32i_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu16i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu32i_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu32i_BFu16i_B");
    check_field_offset(lv, v3, 6, "BFu32i_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu16i_B(Test_BFu32i_BFu16i_B, "BFu32i_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu16ll_B  {
  unsigned int v1:32;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu32i_BFu16ll_B) C1{ Fi:32 FL:16 Fc}



static void Test_BFu32i_BFu16ll_B()
{
  {
    init_simple_test("BFu32i_BFu16ll_B");
    static BFu32i_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu16ll_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu32i_BFu16ll_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu32i_BFu16ll_B");
    check_field_offset(lv, v3, 6, "BFu32i_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu16ll_B(Test_BFu32i_BFu16ll_B, "BFu32i_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu16s_B  {
  unsigned int v1:32;
  unsigned short v2:16;
  bool v3;
};
//SIG(1 BFu32i_BFu16s_B) C1{ Fi:32 Fs:16 Fc}



static void Test_BFu32i_BFu16s_B()
{
  {
    init_simple_test("BFu32i_BFu16s_B");
    static BFu32i_BFu16s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu16s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu16s_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu16s_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu32i_BFu16s_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu32i_BFu16s_B");
    check_field_offset(lv, v3, 6, "BFu32i_BFu16s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu16s_B(Test_BFu32i_BFu16s_B, "BFu32i_BFu16s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu17i_B  {
  unsigned int v1:32;
  unsigned int v2:17;
  bool v3;
};
//SIG(1 BFu32i_BFu17i_B) C1{ Fi:32 Fi:17 Fc}



static void Test_BFu32i_BFu17i_B()
{
  {
    init_simple_test("BFu32i_BFu17i_B");
    static BFu32i_BFu17i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu17i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu17i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu17i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu32i_BFu17i_B");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu32i_BFu17i_B");
    check_field_offset(lv, v3, 7, "BFu32i_BFu17i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu17i_B(Test_BFu32i_BFu17i_B, "BFu32i_BFu17i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu17ll_B  {
  unsigned int v1:32;
  __tsu64 v2:17;
  bool v3;
};
//SIG(1 BFu32i_BFu17ll_B) C1{ Fi:32 FL:17 Fc}



static void Test_BFu32i_BFu17ll_B()
{
  {
    init_simple_test("BFu32i_BFu17ll_B");
    static BFu32i_BFu17ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu17ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu17ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu17ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu17ll_B");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu32i_BFu17ll_B");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu32i_BFu17ll_B");
    check_field_offset(lv, v3, 7, "BFu32i_BFu17ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu17ll_B(Test_BFu32i_BFu17ll_B, "BFu32i_BFu17ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu1c_B  {
  unsigned int v1:32;
  unsigned char v2:1;
  bool v3;
};
//SIG(1 BFu32i_BFu1c_B) C1{ Fi:32 Fc:1 Fc}



static void Test_BFu32i_BFu1c_B()
{
  {
    init_simple_test("BFu32i_BFu1c_B");
    static BFu32i_BFu1c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu1c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu1c_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu1c_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu1c_B");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu32i_BFu1c_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu1c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu1c_B(Test_BFu32i_BFu1c_B, "BFu32i_BFu1c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu1i_B  {
  unsigned int v1:32;
  unsigned int v2:1;
  bool v3;
};
//SIG(1 BFu32i_BFu1i_B) C1{ Fi:32 Fi:1 Fc}



static void Test_BFu32i_BFu1i_B()
{
  {
    init_simple_test("BFu32i_BFu1i_B");
    static BFu32i_BFu1i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu1i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu1i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu1i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu1i_B");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu32i_BFu1i_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu1i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu1i_B(Test_BFu32i_BFu1i_B, "BFu32i_BFu1i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu1ll_B  {
  unsigned int v1:32;
  __tsu64 v2:1;
  bool v3;
};
//SIG(1 BFu32i_BFu1ll_B) C1{ Fi:32 FL:1 Fc}



static void Test_BFu32i_BFu1ll_B()
{
  {
    init_simple_test("BFu32i_BFu1ll_B");
    static BFu32i_BFu1ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu1ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu1ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu1ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu1ll_B");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu32i_BFu1ll_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu1ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu1ll_B(Test_BFu32i_BFu1ll_B, "BFu32i_BFu1ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu1s_B  {
  unsigned int v1:32;
  unsigned short v2:1;
  bool v3;
};
//SIG(1 BFu32i_BFu1s_B) C1{ Fi:32 Fs:1 Fc}



static void Test_BFu32i_BFu1s_B()
{
  {
    init_simple_test("BFu32i_BFu1s_B");
    static BFu32i_BFu1s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu1s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu1s_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu1s_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu1s_B");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu32i_BFu1s_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu1s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu1s_B(Test_BFu32i_BFu1s_B, "BFu32i_BFu1s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu31i_B  {
  unsigned int v1:32;
  unsigned int v2:31;
  bool v3;
};
//SIG(1 BFu32i_BFu31i_B) C1{ Fi:32 Fi:31 Fc}



static void Test_BFu32i_BFu31i_B()
{
  {
    init_simple_test("BFu32i_BFu31i_B");
    static BFu32i_BFu31i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_BFu31i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu31i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu31i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu32i_BFu31i_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu32i_BFu31i_B");
    check_field_offset(lv, v3, 8, "BFu32i_BFu31i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu31i_B(Test_BFu32i_BFu31i_B, "BFu32i_BFu31i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu31ll_B  {
  unsigned int v1:32;
  __tsu64 v2:31;
  bool v3;
};
//SIG(1 BFu32i_BFu31ll_B) C1{ Fi:32 FL:31 Fc}



static void Test_BFu32i_BFu31ll_B()
{
  {
    init_simple_test("BFu32i_BFu31ll_B");
    static BFu32i_BFu31ll_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32i_BFu31ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu31ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu31ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu31ll_B");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu32i_BFu31ll_B");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu32i_BFu31ll_B");
    check_field_offset(lv, v3, 8, "BFu32i_BFu31ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu31ll_B(Test_BFu32i_BFu31ll_B, "BFu32i_BFu31ll_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu32i_B  {
  unsigned int v1:32;
  unsigned int v2:32;
  bool v3;
};
//SIG(1 BFu32i_BFu32i_B) C1{ Fi:32 Fi:32 Fc}



static void Test_BFu32i_BFu32i_B()
{
  {
    init_simple_test("BFu32i_BFu32i_B");
    static BFu32i_BFu32i_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_BFu32i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu32i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu32i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu32i_BFu32i_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu32i_B");
    check_field_offset(lv, v3, 8, "BFu32i_BFu32i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu32i_B(Test_BFu32i_BFu32i_B, "BFu32i_BFu32i_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu32ll_B  {
  unsigned int v1:32;
  __tsu64 v2:32;
  bool v3;
};
//SIG(1 BFu32i_BFu32ll_B) C1{ Fi:32 FL:32 Fc}



static void Test_BFu32i_BFu32ll_B()
{
  {
    init_simple_test("BFu32i_BFu32ll_B");
    static BFu32i_BFu32ll_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32i_BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu32ll_B");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu32i_BFu32ll_B");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu32ll_B");
    check_field_offset(lv, v3, 8, "BFu32i_BFu32ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu32ll_B(Test_BFu32i_BFu32ll_B, "BFu32i_BFu32ll_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu33_B  {
  unsigned int v1:32;
  __tsu64 v2:33;
  bool v3;
};
//SIG(1 BFu32i_BFu33_B) C1{ Fi:32 FL:33 Fc}



static void Test_BFu32i_BFu33_B()
{
  {
    init_simple_test("BFu32i_BFu33_B");
    static BFu32i_BFu33_B lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32i_BFu33_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu33_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu33_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu33_B");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu32i_BFu33_B");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu32i_BFu33_B");
    check_field_offset(lv, v3, ABISELECT(13,9), "BFu32i_BFu33_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu33_B(Test_BFu32i_BFu33_B, "BFu32i_BFu33_B", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu7c_B  {
  unsigned int v1:32;
  unsigned char v2:7;
  bool v3;
};
//SIG(1 BFu32i_BFu7c_B) C1{ Fi:32 Fc:7 Fc}



static void Test_BFu32i_BFu7c_B()
{
  {
    init_simple_test("BFu32i_BFu7c_B");
    static BFu32i_BFu7c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu7c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu7c_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu7c_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu7c_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu32i_BFu7c_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu32i_BFu7c_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu7c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu7c_B(Test_BFu32i_BFu7c_B, "BFu32i_BFu7c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu7i_B  {
  unsigned int v1:32;
  unsigned int v2:7;
  bool v3;
};
//SIG(1 BFu32i_BFu7i_B) C1{ Fi:32 Fi:7 Fc}



static void Test_BFu32i_BFu7i_B()
{
  {
    init_simple_test("BFu32i_BFu7i_B");
    static BFu32i_BFu7i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu7i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu7i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu7i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu7i_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu32i_BFu7i_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu32i_BFu7i_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu7i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu7i_B(Test_BFu32i_BFu7i_B, "BFu32i_BFu7i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu7ll_B  {
  unsigned int v1:32;
  __tsu64 v2:7;
  bool v3;
};
//SIG(1 BFu32i_BFu7ll_B) C1{ Fi:32 FL:7 Fc}



static void Test_BFu32i_BFu7ll_B()
{
  {
    init_simple_test("BFu32i_BFu7ll_B");
    static BFu32i_BFu7ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu7ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu7ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu7ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu7ll_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu32i_BFu7ll_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu32i_BFu7ll_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu7ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu7ll_B(Test_BFu32i_BFu7ll_B, "BFu32i_BFu7ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu7s_B  {
  unsigned int v1:32;
  unsigned short v2:7;
  bool v3;
};
//SIG(1 BFu32i_BFu7s_B) C1{ Fi:32 Fs:7 Fc}



static void Test_BFu32i_BFu7s_B()
{
  {
    init_simple_test("BFu32i_BFu7s_B");
    static BFu32i_BFu7s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu7s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu7s_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu7s_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu7s_B");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu32i_BFu7s_B");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu32i_BFu7s_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu7s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu7s_B(Test_BFu32i_BFu7s_B, "BFu32i_BFu7s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu8c_B  {
  unsigned int v1:32;
  unsigned char v2:8;
  bool v3;
};
//SIG(1 BFu32i_BFu8c_B) C1{ Fi:32 Fc:8 Fc}



static void Test_BFu32i_BFu8c_B()
{
  {
    init_simple_test("BFu32i_BFu8c_B");
    static BFu32i_BFu8c_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu8c_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu8c_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu8c_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu8c_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu32i_BFu8c_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu32i_BFu8c_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu8c_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu8c_B(Test_BFu32i_BFu8c_B, "BFu32i_BFu8c_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu8i_B  {
  unsigned int v1:32;
  unsigned int v2:8;
  bool v3;
};
//SIG(1 BFu32i_BFu8i_B) C1{ Fi:32 Fi:8 Fc}



static void Test_BFu32i_BFu8i_B()
{
  {
    init_simple_test("BFu32i_BFu8i_B");
    static BFu32i_BFu8i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu8i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu8i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu8i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu8i_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu32i_BFu8i_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu32i_BFu8i_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu8i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu8i_B(Test_BFu32i_BFu8i_B, "BFu32i_BFu8i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu8ll_B  {
  unsigned int v1:32;
  __tsu64 v2:8;
  bool v3;
};
//SIG(1 BFu32i_BFu8ll_B) C1{ Fi:32 FL:8 Fc}



static void Test_BFu32i_BFu8ll_B()
{
  {
    init_simple_test("BFu32i_BFu8ll_B");
    static BFu32i_BFu8ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu8ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu8ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu8ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu8ll_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu32i_BFu8ll_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu32i_BFu8ll_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu8ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu8ll_B(Test_BFu32i_BFu8ll_B, "BFu32i_BFu8ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu8s_B  {
  unsigned int v1:32;
  unsigned short v2:8;
  bool v3;
};
//SIG(1 BFu32i_BFu8s_B) C1{ Fi:32 Fs:8 Fc}



static void Test_BFu32i_BFu8s_B()
{
  {
    init_simple_test("BFu32i_BFu8s_B");
    static BFu32i_BFu8s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu8s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu8s_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu8s_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu8s_B");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu32i_BFu8s_B");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu32i_BFu8s_B");
    check_field_offset(lv, v3, 5, "BFu32i_BFu8s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu8s_B(Test_BFu32i_BFu8s_B, "BFu32i_BFu8s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu9i_B  {
  unsigned int v1:32;
  unsigned int v2:9;
  bool v3;
};
//SIG(1 BFu32i_BFu9i_B) C1{ Fi:32 Fi:9 Fc}



static void Test_BFu32i_BFu9i_B()
{
  {
    init_simple_test("BFu32i_BFu9i_B");
    static BFu32i_BFu9i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu9i_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu9i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu9i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu9i_B");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu32i_BFu9i_B");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu32i_BFu9i_B");
    check_field_offset(lv, v3, 6, "BFu32i_BFu9i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu9i_B(Test_BFu32i_BFu9i_B, "BFu32i_BFu9i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu9ll_B  {
  unsigned int v1:32;
  __tsu64 v2:9;
  bool v3;
};
//SIG(1 BFu32i_BFu9ll_B) C1{ Fi:32 FL:9 Fc}



static void Test_BFu32i_BFu9ll_B()
{
  {
    init_simple_test("BFu32i_BFu9ll_B");
    static BFu32i_BFu9ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu9ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_BFu9ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu9ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu9ll_B");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu32i_BFu9ll_B");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu32i_BFu9ll_B");
    check_field_offset(lv, v3, 6, "BFu32i_BFu9ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu9ll_B(Test_BFu32i_BFu9ll_B, "BFu32i_BFu9ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_BFu9s_B  {
  unsigned int v1:32;
  unsigned short v2:9;
  bool v3;
};
//SIG(1 BFu32i_BFu9s_B) C1{ Fi:32 Fs:9 Fc}



static void Test_BFu32i_BFu9s_B()
{
  {
    init_simple_test("BFu32i_BFu9s_B");
    static BFu32i_BFu9s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_BFu9s_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_BFu9s_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_BFu9s_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_BFu9s_B");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu32i_BFu9s_B");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu32i_BFu9s_B");
    check_field_offset(lv, v3, 6, "BFu32i_BFu9s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_BFu9s_B(Test_BFu32i_BFu9s_B, "BFu32i_BFu9s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_C_B  {
  unsigned int v1:32;
  char v2;
  bool v3;
};
//SIG(1 BFu32i_C_B) C1{ Fi:32 Fc[2]}



static void Test_BFu32i_C_B()
{
  {
    init_simple_test("BFu32i_C_B");
    static BFu32i_C_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_C_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_C_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_C_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_C_B");
    check_field_offset(lv, v2, 4, "BFu32i_C_B.v2");
    check_field_offset(lv, v3, 5, "BFu32i_C_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_C_B(Test_BFu32i_C_B, "BFu32i_C_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_D_B  {
  unsigned int v1:32;
  double v2;
  bool v3;
};
//SIG(1 BFu32i_D_B) C1{ Fi:32 FL Fc}



static void Test_BFu32i_D_B()
{
  {
    init_simple_test("BFu32i_D_B");
    static BFu32i_D_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu32i_D_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_D_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_D_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_D_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu32i_D_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu32i_D_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_D_B(Test_BFu32i_D_B, "BFu32i_D_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_F_B  {
  unsigned int v1:32;
  float v2;
  bool v3;
};
//SIG(1 BFu32i_F_B) C1{ Fi:32 Fi Fc}



static void Test_BFu32i_F_B()
{
  {
    init_simple_test("BFu32i_F_B");
    static BFu32i_F_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_F_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_F_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_F_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_F_B");
    check_field_offset(lv, v2, 4, "BFu32i_F_B.v2");
    check_field_offset(lv, v3, 8, "BFu32i_F_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_F_B(Test_BFu32i_F_B, "BFu32i_F_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_I_B  {
  unsigned int v1:32;
  int v2;
  bool v3;
};
//SIG(1 BFu32i_I_B) C1{ Fi:32 Fi Fc}



static void Test_BFu32i_I_B()
{
  {
    init_simple_test("BFu32i_I_B");
    static BFu32i_I_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_I_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_I_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_I_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_I_B");
    check_field_offset(lv, v2, 4, "BFu32i_I_B.v2");
    check_field_offset(lv, v3, 8, "BFu32i_I_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_I_B(Test_BFu32i_I_B, "BFu32i_I_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_Ip_B  {
  unsigned int v1:32;
  int *v2;
  bool v3;
};
//SIG(1 BFu32i_Ip_B) C1{ Fi:32 Fp Fc}



static void Test_BFu32i_Ip_B()
{
  {
    init_simple_test("BFu32i_Ip_B");
    static BFu32i_Ip_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu32i_Ip_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_Ip_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_Ip_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_Ip_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu32i_Ip_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu32i_Ip_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_Ip_B(Test_BFu32i_Ip_B, "BFu32i_Ip_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_L_B  {
  unsigned int v1:32;
  __tsi64 v2;
  bool v3;
};
//SIG(1 BFu32i_L_B) C1{ Fi:32 FL Fc}



static void Test_BFu32i_L_B()
{
  {
    init_simple_test("BFu32i_L_B");
    static BFu32i_L_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu32i_L_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_L_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_L_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_L_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu32i_L_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu32i_L_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_L_B(Test_BFu32i_L_B, "BFu32i_L_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_S_B  {
  unsigned int v1:32;
  short v2;
  bool v3;
};
//SIG(1 BFu32i_S_B) C1{ Fi:32 Fs Fc}



static void Test_BFu32i_S_B()
{
  {
    init_simple_test("BFu32i_S_B");
    static BFu32i_S_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_S_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_S_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_S_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_S_B");
    check_field_offset(lv, v2, 4, "BFu32i_S_B.v2");
    check_field_offset(lv, v3, 6, "BFu32i_S_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_S_B(Test_BFu32i_S_B, "BFu32i_S_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_Uc_B  {
  unsigned int v1:32;
  unsigned char v2;
  bool v3;
};
//SIG(1 BFu32i_Uc_B) C1{ Fi:32 Fc[2]}



static void Test_BFu32i_Uc_B()
{
  {
    init_simple_test("BFu32i_Uc_B");
    static BFu32i_Uc_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_Uc_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_Uc_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_Uc_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_Uc_B");
    check_field_offset(lv, v2, 4, "BFu32i_Uc_B.v2");
    check_field_offset(lv, v3, 5, "BFu32i_Uc_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_Uc_B(Test_BFu32i_Uc_B, "BFu32i_Uc_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_Ui_B  {
  unsigned int v1:32;
  unsigned int v2;
  bool v3;
};
//SIG(1 BFu32i_Ui_B) C1{ Fi:32 Fi Fc}



static void Test_BFu32i_Ui_B()
{
  {
    init_simple_test("BFu32i_Ui_B");
    static BFu32i_Ui_B lv;
    check2(sizeof(lv), 12, "sizeof(BFu32i_Ui_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_Ui_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_Ui_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_Ui_B");
    check_field_offset(lv, v2, 4, "BFu32i_Ui_B.v2");
    check_field_offset(lv, v3, 8, "BFu32i_Ui_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_Ui_B(Test_BFu32i_Ui_B, "BFu32i_Ui_B", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_Ul_B  {
  unsigned int v1:32;
  __tsu64 v2;
  bool v3;
};
//SIG(1 BFu32i_Ul_B) C1{ Fi:32 FL Fc}



static void Test_BFu32i_Ul_B()
{
  {
    init_simple_test("BFu32i_Ul_B");
    static BFu32i_Ul_B lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu32i_Ul_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_Ul_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_Ul_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_Ul_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu32i_Ul_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu32i_Ul_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_Ul_B(Test_BFu32i_Ul_B, "BFu32i_Ul_B", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_Us_B  {
  unsigned int v1:32;
  unsigned short v2;
  bool v3;
};
//SIG(1 BFu32i_Us_B) C1{ Fi:32 Fs Fc}



static void Test_BFu32i_Us_B()
{
  {
    init_simple_test("BFu32i_Us_B");
    static BFu32i_Us_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32i_Us_B)");
    check2(__alignof__(lv), 4, "__alignof__(BFu32i_Us_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_Us_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_Us_B");
    check_field_offset(lv, v2, 4, "BFu32i_Us_B.v2");
    check_field_offset(lv, v3, 6, "BFu32i_Us_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_Us_B(Test_BFu32i_Us_B, "BFu32i_Us_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32i_Vp_B  {
  unsigned int v1:32;
  void *v2;
  bool v3;
};
//SIG(1 BFu32i_Vp_B) C1{ Fi:32 Fp Fc}



static void Test_BFu32i_Vp_B()
{
  {
    init_simple_test("BFu32i_Vp_B");
    static BFu32i_Vp_B lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu32i_Vp_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32i_Vp_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32i_Vp_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32i_Vp_B");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu32i_Vp_B.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu32i_Vp_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32i_Vp_B(Test_BFu32i_Vp_B, "BFu32i_Vp_B", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B  {
  __tsu64 v1:32;
  bool v2;
};
//SIG(1 BFu32ll_B) C1{ FL:32 Fc}



static void Test_BFu32ll_B()
{
  {
    init_simple_test("BFu32ll_B");
    static BFu32ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B");
    check_field_offset(lv, v2, 4, "BFu32ll_B.v2");
  }
}
static Arrange_To_Call_Me vBFu32ll_B(Test_BFu32ll_B, "BFu32ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_B  {
  __tsu64 v1:32;
  bool v2;
  bool v3;
};
//SIG(1 BFu32ll_B_B) C1{ FL:32 Fc[2]}



static void Test_BFu32ll_B_B()
{
  {
    init_simple_test("BFu32ll_B_B");
    static BFu32ll_B_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_B");
    check_field_offset(lv, v2, 4, "BFu32ll_B_B.v2");
    check_field_offset(lv, v3, 5, "BFu32ll_B_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_B(Test_BFu32ll_B_B, "BFu32ll_B_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu15i  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3:15;
};
//SIG(1 BFu32ll_B_BFu15i) C1{ FL:32 Fc Fi:15}



static void Test_BFu32ll_B_BFu15i()
{
  {
    init_simple_test("BFu32ll_B_BFu15i");
    static BFu32ll_B_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu15i");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu15i.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu32ll_B_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu32ll_B_BFu15i");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu15i(Test_BFu32ll_B_BFu15i, "BFu32ll_B_BFu15i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu15ll  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:15;
};
//SIG(1 BFu32ll_B_BFu15ll) C1{ FL:32 Fc FL:15}



static void Test_BFu32ll_B_BFu15ll()
{
  {
    init_simple_test("BFu32ll_B_BFu15ll");
    static BFu32ll_B_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu15ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu32ll_B_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu32ll_B_BFu15ll");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu15ll(Test_BFu32ll_B_BFu15ll, "BFu32ll_B_BFu15ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu15s  {
  __tsu64 v1:32;
  bool v2;
  unsigned short v3:15;
};
//SIG(1 BFu32ll_B_BFu15s) C1{ FL:32 Fc Fs:15}



static void Test_BFu32ll_B_BFu15s()
{
  {
    init_simple_test("BFu32ll_B_BFu15s");
    static BFu32ll_B_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu15s");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu15s.v2");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu32ll_B_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu32ll_B_BFu15s");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu15s(Test_BFu32ll_B_BFu15s, "BFu32ll_B_BFu15s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu16i  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3:16;
};
//SIG(1 BFu32ll_B_BFu16i) C1{ FL:32 Fc Fi:16}



static void Test_BFu32ll_B_BFu16i()
{
  {
    init_simple_test("BFu32ll_B_BFu16i");
    static BFu32ll_B_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu16i");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu16i.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu32ll_B_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu32ll_B_BFu16i");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu16i(Test_BFu32ll_B_BFu16i, "BFu32ll_B_BFu16i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu16ll  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:16;
};
//SIG(1 BFu32ll_B_BFu16ll) C1{ FL:32 Fc FL:16}



static void Test_BFu32ll_B_BFu16ll()
{
  {
    init_simple_test("BFu32ll_B_BFu16ll");
    static BFu32ll_B_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu16ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu32ll_B_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu32ll_B_BFu16ll");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu16ll(Test_BFu32ll_B_BFu16ll, "BFu32ll_B_BFu16ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu16s  {
  __tsu64 v1:32;
  bool v2;
  unsigned short v3:16;
};
//SIG(1 BFu32ll_B_BFu16s) C1{ FL:32 Fc Fs:16}



static void Test_BFu32ll_B_BFu16s()
{
  {
    init_simple_test("BFu32ll_B_BFu16s");
    static BFu32ll_B_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu16s");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu16s.v2");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu32ll_B_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu32ll_B_BFu16s");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu16s(Test_BFu32ll_B_BFu16s, "BFu32ll_B_BFu16s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu17i  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3:17;
};
//SIG(1 BFu32ll_B_BFu17i) C1{ FL:32 Fc Fi:17}



static void Test_BFu32ll_B_BFu17i()
{
  {
    init_simple_test("BFu32ll_B_BFu17i");
    static BFu32ll_B_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu17i");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu17i.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu32ll_B_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu32ll_B_BFu17i");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu17i(Test_BFu32ll_B_BFu17i, "BFu32ll_B_BFu17i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu17ll  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:17;
};
//SIG(1 BFu32ll_B_BFu17ll) C1{ FL:32 Fc FL:17}



static void Test_BFu32ll_B_BFu17ll()
{
  {
    init_simple_test("BFu32ll_B_BFu17ll");
    static BFu32ll_B_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu17ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu32ll_B_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu32ll_B_BFu17ll");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu17ll(Test_BFu32ll_B_BFu17ll, "BFu32ll_B_BFu17ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu1c  {
  __tsu64 v1:32;
  bool v2;
  unsigned char v3:1;
};
//SIG(1 BFu32ll_B_BFu1c) C1{ FL:32 Fc Fc:1}



static void Test_BFu32ll_B_BFu1c()
{
  {
    init_simple_test("BFu32ll_B_BFu1c");
    static BFu32ll_B_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu1c");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu1c.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu32ll_B_BFu1c");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu1c(Test_BFu32ll_B_BFu1c, "BFu32ll_B_BFu1c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu1i  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3:1;
};
//SIG(1 BFu32ll_B_BFu1i) C1{ FL:32 Fc Fi:1}



static void Test_BFu32ll_B_BFu1i()
{
  {
    init_simple_test("BFu32ll_B_BFu1i");
    static BFu32ll_B_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu1i");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu1i.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu32ll_B_BFu1i");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu1i(Test_BFu32ll_B_BFu1i, "BFu32ll_B_BFu1i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu1ll  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:1;
};
//SIG(1 BFu32ll_B_BFu1ll) C1{ FL:32 Fc FL:1}



static void Test_BFu32ll_B_BFu1ll()
{
  {
    init_simple_test("BFu32ll_B_BFu1ll");
    static BFu32ll_B_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu1ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu32ll_B_BFu1ll");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu1ll(Test_BFu32ll_B_BFu1ll, "BFu32ll_B_BFu1ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu1s  {
  __tsu64 v1:32;
  bool v2;
  unsigned short v3:1;
};
//SIG(1 BFu32ll_B_BFu1s) C1{ FL:32 Fc Fs:1}



static void Test_BFu32ll_B_BFu1s()
{
  {
    init_simple_test("BFu32ll_B_BFu1s");
    static BFu32ll_B_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu1s");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu1s.v2");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu32ll_B_BFu1s");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu1s(Test_BFu32ll_B_BFu1s, "BFu32ll_B_BFu1s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu31i  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3:31;
};
//SIG(1 BFu32ll_B_BFu31i) C1{ FL:32 Fc Fi:31}



static void Test_BFu32ll_B_BFu31i()
{
  {
    init_simple_test("BFu32ll_B_BFu31i");
    static BFu32ll_B_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu31i");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu32ll_B_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu32ll_B_BFu31i");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu31i(Test_BFu32ll_B_BFu31i, "BFu32ll_B_BFu31i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu31ll  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:31;
};
//SIG(1 BFu32ll_B_BFu31ll) C1{ FL:32 Fc FL:31}



static void Test_BFu32ll_B_BFu31ll()
{
  {
    init_simple_test("BFu32ll_B_BFu31ll");
    static BFu32ll_B_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu32ll_B_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu32ll_B_BFu31ll");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu31ll(Test_BFu32ll_B_BFu31ll, "BFu32ll_B_BFu31ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu32i  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3:32;
};
//SIG(1 BFu32ll_B_BFu32i) C1{ FL:32 Fc Fi:32}



static void Test_BFu32ll_B_BFu32i()
{
  {
    init_simple_test("BFu32ll_B_BFu32i");
    static BFu32ll_B_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu32i");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu32ll_B_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu32i");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu32i(Test_BFu32ll_B_BFu32i, "BFu32ll_B_BFu32i", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu32ll  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:32;
};
//SIG(1 BFu32ll_B_BFu32ll) C1{ FL:32 Fc FL:32}



static void Test_BFu32ll_B_BFu32ll()
{
  {
    init_simple_test("BFu32ll_B_BFu32ll");
    static BFu32ll_B_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu32ll_B_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu32ll");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu32ll(Test_BFu32ll_B_BFu32ll, "BFu32ll_B_BFu32ll", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu33  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:33;
};
//SIG(1 BFu32ll_B_BFu33) C1{ FL:32 Fc FL:33}



static void Test_BFu32ll_B_BFu33()
{
  {
    init_simple_test("BFu32ll_B_BFu33");
    static BFu32ll_B_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu33");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu32ll_B_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu32ll_B_BFu33");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu33(Test_BFu32ll_B_BFu33, "BFu32ll_B_BFu33", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu7c  {
  __tsu64 v1:32;
  bool v2;
  unsigned char v3:7;
};
//SIG(1 BFu32ll_B_BFu7c) C1{ FL:32 Fc Fc:7}



static void Test_BFu32ll_B_BFu7c()
{
  {
    init_simple_test("BFu32ll_B_BFu7c");
    static BFu32ll_B_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu7c");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu7c.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu32ll_B_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu32ll_B_BFu7c");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu7c(Test_BFu32ll_B_BFu7c, "BFu32ll_B_BFu7c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu7i  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3:7;
};
//SIG(1 BFu32ll_B_BFu7i) C1{ FL:32 Fc Fi:7}



static void Test_BFu32ll_B_BFu7i()
{
  {
    init_simple_test("BFu32ll_B_BFu7i");
    static BFu32ll_B_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu7i");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu7i.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu32ll_B_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu32ll_B_BFu7i");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu7i(Test_BFu32ll_B_BFu7i, "BFu32ll_B_BFu7i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu7ll  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:7;
};
//SIG(1 BFu32ll_B_BFu7ll) C1{ FL:32 Fc FL:7}



static void Test_BFu32ll_B_BFu7ll()
{
  {
    init_simple_test("BFu32ll_B_BFu7ll");
    static BFu32ll_B_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu7ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu32ll_B_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu32ll_B_BFu7ll");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu7ll(Test_BFu32ll_B_BFu7ll, "BFu32ll_B_BFu7ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu7s  {
  __tsu64 v1:32;
  bool v2;
  unsigned short v3:7;
};
//SIG(1 BFu32ll_B_BFu7s) C1{ FL:32 Fc Fs:7}



static void Test_BFu32ll_B_BFu7s()
{
  {
    init_simple_test("BFu32ll_B_BFu7s");
    static BFu32ll_B_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu7s");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu7s.v2");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu32ll_B_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu32ll_B_BFu7s");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu7s(Test_BFu32ll_B_BFu7s, "BFu32ll_B_BFu7s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu8c  {
  __tsu64 v1:32;
  bool v2;
  unsigned char v3:8;
};
//SIG(1 BFu32ll_B_BFu8c) C1{ FL:32 Fc Fc:8}



static void Test_BFu32ll_B_BFu8c()
{
  {
    init_simple_test("BFu32ll_B_BFu8c");
    static BFu32ll_B_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu8c");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu8c.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu32ll_B_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu32ll_B_BFu8c");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu8c(Test_BFu32ll_B_BFu8c, "BFu32ll_B_BFu8c", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu8i  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3:8;
};
//SIG(1 BFu32ll_B_BFu8i) C1{ FL:32 Fc Fi:8}



static void Test_BFu32ll_B_BFu8i()
{
  {
    init_simple_test("BFu32ll_B_BFu8i");
    static BFu32ll_B_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu8i");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu8i.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu32ll_B_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu32ll_B_BFu8i");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu8i(Test_BFu32ll_B_BFu8i, "BFu32ll_B_BFu8i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu8ll  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:8;
};
//SIG(1 BFu32ll_B_BFu8ll) C1{ FL:32 Fc FL:8}



static void Test_BFu32ll_B_BFu8ll()
{
  {
    init_simple_test("BFu32ll_B_BFu8ll");
    static BFu32ll_B_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu8ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu32ll_B_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu32ll_B_BFu8ll");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu8ll(Test_BFu32ll_B_BFu8ll, "BFu32ll_B_BFu8ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu8s  {
  __tsu64 v1:32;
  bool v2;
  unsigned short v3:8;
};
//SIG(1 BFu32ll_B_BFu8s) C1{ FL:32 Fc Fs:8}



static void Test_BFu32ll_B_BFu8s()
{
  {
    init_simple_test("BFu32ll_B_BFu8s");
    static BFu32ll_B_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu8s");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu8s.v2");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu32ll_B_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu32ll_B_BFu8s");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu8s(Test_BFu32ll_B_BFu8s, "BFu32ll_B_BFu8s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu9i  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3:9;
};
//SIG(1 BFu32ll_B_BFu9i) C1{ FL:32 Fc Fi:9}



static void Test_BFu32ll_B_BFu9i()
{
  {
    init_simple_test("BFu32ll_B_BFu9i");
    static BFu32ll_B_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu9i");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu9i.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu32ll_B_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu32ll_B_BFu9i");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu9i(Test_BFu32ll_B_BFu9i, "BFu32ll_B_BFu9i", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu9ll  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3:9;
};
//SIG(1 BFu32ll_B_BFu9ll) C1{ FL:32 Fc FL:9}



static void Test_BFu32ll_B_BFu9ll()
{
  {
    init_simple_test("BFu32ll_B_BFu9ll");
    static BFu32ll_B_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu9ll.v2");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu32ll_B_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu32ll_B_BFu9ll");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu9ll(Test_BFu32ll_B_BFu9ll, "BFu32ll_B_BFu9ll", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_BFu9s  {
  __tsu64 v1:32;
  bool v2;
  unsigned short v3:9;
};
//SIG(1 BFu32ll_B_BFu9s) C1{ FL:32 Fc Fs:9}



static void Test_BFu32ll_B_BFu9s()
{
  {
    init_simple_test("BFu32ll_B_BFu9s");
    static BFu32ll_B_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_BFu9s");
    check_field_offset(lv, v2, 4, "BFu32ll_B_BFu9s.v2");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu32ll_B_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu32ll_B_BFu9s");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_BFu9s(Test_BFu32ll_B_BFu9s, "BFu32ll_B_BFu9s", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_C  {
  __tsu64 v1:32;
  bool v2;
  char v3;
};
//SIG(1 BFu32ll_B_C) C1{ FL:32 Fc[2]}



static void Test_BFu32ll_B_C()
{
  {
    init_simple_test("BFu32ll_B_C");
    static BFu32ll_B_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_C)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_C");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_C");
    check_field_offset(lv, v2, 4, "BFu32ll_B_C.v2");
    check_field_offset(lv, v3, 5, "BFu32ll_B_C.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_C(Test_BFu32ll_B_C, "BFu32ll_B_C", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_D  {
  __tsu64 v1:32;
  bool v2;
  double v3;
};
//SIG(1 BFu32ll_B_D) C1{ FL:32 Fc FL}



static void Test_BFu32ll_B_D()
{
  {
    init_simple_test("BFu32ll_B_D");
    static BFu32ll_B_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu32ll_B_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_D)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_D");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_D");
    check_field_offset(lv, v2, 4, "BFu32ll_B_D.v2");
    check_field_offset(lv, v3, 8, "BFu32ll_B_D.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_D(Test_BFu32ll_B_D, "BFu32ll_B_D", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_F  {
  __tsu64 v1:32;
  bool v2;
  float v3;
};
//SIG(1 BFu32ll_B_F) C1{ FL:32 Fc Fi}



static void Test_BFu32ll_B_F()
{
  {
    init_simple_test("BFu32ll_B_F");
    static BFu32ll_B_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_F)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_F");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_F");
    check_field_offset(lv, v2, 4, "BFu32ll_B_F.v2");
    check_field_offset(lv, v3, 8, "BFu32ll_B_F.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_F(Test_BFu32ll_B_F, "BFu32ll_B_F", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_I  {
  __tsu64 v1:32;
  bool v2;
  int v3;
};
//SIG(1 BFu32ll_B_I) C1{ FL:32 Fc Fi}



static void Test_BFu32ll_B_I()
{
  {
    init_simple_test("BFu32ll_B_I");
    static BFu32ll_B_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_I)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_I");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_I");
    check_field_offset(lv, v2, 4, "BFu32ll_B_I.v2");
    check_field_offset(lv, v3, 8, "BFu32ll_B_I.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_I(Test_BFu32ll_B_I, "BFu32ll_B_I", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_Ip  {
  __tsu64 v1:32;
  bool v2;
  int *v3;
};
//SIG(1 BFu32ll_B_Ip) C1{ FL:32 Fc Fp}



static void Test_BFu32ll_B_Ip()
{
  {
    init_simple_test("BFu32ll_B_Ip");
    static BFu32ll_B_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_Ip");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_Ip");
    check_field_offset(lv, v2, 4, "BFu32ll_B_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu32ll_B_Ip.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_Ip(Test_BFu32ll_B_Ip, "BFu32ll_B_Ip", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_L  {
  __tsu64 v1:32;
  bool v2;
  __tsi64 v3;
};
//SIG(1 BFu32ll_B_L) C1{ FL:32 Fc FL}



static void Test_BFu32ll_B_L()
{
  {
    init_simple_test("BFu32ll_B_L");
    static BFu32ll_B_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu32ll_B_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_L)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_L");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_L");
    check_field_offset(lv, v2, 4, "BFu32ll_B_L.v2");
    check_field_offset(lv, v3, 8, "BFu32ll_B_L.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_L(Test_BFu32ll_B_L, "BFu32ll_B_L", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_S  {
  __tsu64 v1:32;
  bool v2;
  short v3;
};
//SIG(1 BFu32ll_B_S) C1{ FL:32 Fc Fs}



static void Test_BFu32ll_B_S()
{
  {
    init_simple_test("BFu32ll_B_S");
    static BFu32ll_B_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_S)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_S");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_S");
    check_field_offset(lv, v2, 4, "BFu32ll_B_S.v2");
    check_field_offset(lv, v3, 6, "BFu32ll_B_S.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_S(Test_BFu32ll_B_S, "BFu32ll_B_S", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_Uc  {
  __tsu64 v1:32;
  bool v2;
  unsigned char v3;
};
//SIG(1 BFu32ll_B_Uc) C1{ FL:32 Fc[2]}



static void Test_BFu32ll_B_Uc()
{
  {
    init_simple_test("BFu32ll_B_Uc");
    static BFu32ll_B_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_Uc");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_Uc");
    check_field_offset(lv, v2, 4, "BFu32ll_B_Uc.v2");
    check_field_offset(lv, v3, 5, "BFu32ll_B_Uc.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_Uc(Test_BFu32ll_B_Uc, "BFu32ll_B_Uc", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_Ui  {
  __tsu64 v1:32;
  bool v2;
  unsigned int v3;
};
//SIG(1 BFu32ll_B_Ui) C1{ FL:32 Fc Fi}



static void Test_BFu32ll_B_Ui()
{
  {
    init_simple_test("BFu32ll_B_Ui");
    static BFu32ll_B_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_Ui");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_Ui");
    check_field_offset(lv, v2, 4, "BFu32ll_B_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu32ll_B_Ui.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_Ui(Test_BFu32ll_B_Ui, "BFu32ll_B_Ui", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_Ul  {
  __tsu64 v1:32;
  bool v2;
  __tsu64 v3;
};
//SIG(1 BFu32ll_B_Ul) C1{ FL:32 Fc FL}



static void Test_BFu32ll_B_Ul()
{
  {
    init_simple_test("BFu32ll_B_Ul");
    static BFu32ll_B_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu32ll_B_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_Ul");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_Ul");
    check_field_offset(lv, v2, 4, "BFu32ll_B_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu32ll_B_Ul.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_Ul(Test_BFu32ll_B_Ul, "BFu32ll_B_Ul", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_Us  {
  __tsu64 v1:32;
  bool v2;
  unsigned short v3;
};
//SIG(1 BFu32ll_B_Us) C1{ FL:32 Fc Fs}



static void Test_BFu32ll_B_Us()
{
  {
    init_simple_test("BFu32ll_B_Us");
    static BFu32ll_B_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_B_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_Us)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_Us");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_Us");
    check_field_offset(lv, v2, 4, "BFu32ll_B_Us.v2");
    check_field_offset(lv, v3, 6, "BFu32ll_B_Us.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_Us(Test_BFu32ll_B_Us, "BFu32ll_B_Us", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_B_Vp  {
  __tsu64 v1:32;
  bool v2;
  void *v3;
};
//SIG(1 BFu32ll_B_Vp) C1{ FL:32 Fc Fp}



static void Test_BFu32ll_B_Vp()
{
  {
    init_simple_test("BFu32ll_B_Vp");
    static BFu32ll_B_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu32ll_B_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_B_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_B_Vp");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_B_Vp");
    check_field_offset(lv, v2, 4, "BFu32ll_B_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu32ll_B_Vp.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_B_Vp(Test_BFu32ll_B_Vp, "BFu32ll_B_Vp", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_BFu15i_B  {
  __tsu64 v1:32;
  unsigned int v2:15;
  bool v3;
};
//SIG(1 BFu32ll_BFu15i_B) C1{ FL:32 Fi:15 Fc}



static void Test_BFu32ll_BFu15i_B()
{
  {
    init_simple_test("BFu32ll_BFu15i_B");
    static BFu32ll_BFu15i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_BFu15i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_BFu15i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_BFu15i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_BFu15i_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu32ll_BFu15i_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu32ll_BFu15i_B");
    check_field_offset(lv, v3, 6, "BFu32ll_BFu15i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_BFu15i_B(Test_BFu32ll_BFu15i_B, "BFu32ll_BFu15i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_BFu15ll_B  {
  __tsu64 v1:32;
  __tsu64 v2:15;
  bool v3;
};
//SIG(1 BFu32ll_BFu15ll_B) C1{ FL:32 FL:15 Fc}



static void Test_BFu32ll_BFu15ll_B()
{
  {
    init_simple_test("BFu32ll_BFu15ll_B");
    static BFu32ll_BFu15ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_BFu15ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_BFu15ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_BFu15ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu32ll_BFu15ll_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu32ll_BFu15ll_B");
    check_field_offset(lv, v3, 6, "BFu32ll_BFu15ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_BFu15ll_B(Test_BFu32ll_BFu15ll_B, "BFu32ll_BFu15ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_BFu15s_B  {
  __tsu64 v1:32;
  unsigned short v2:15;
  bool v3;
};
//SIG(1 BFu32ll_BFu15s_B) C1{ FL:32 Fs:15 Fc}



static void Test_BFu32ll_BFu15s_B()
{
  {
    init_simple_test("BFu32ll_BFu15s_B");
    static BFu32ll_BFu15s_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_BFu15s_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_BFu15s_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_BFu15s_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_BFu15s_B");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu32ll_BFu15s_B");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu32ll_BFu15s_B");
    check_field_offset(lv, v3, 6, "BFu32ll_BFu15s_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_BFu15s_B(Test_BFu32ll_BFu15s_B, "BFu32ll_BFu15s_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_BFu16i_B  {
  __tsu64 v1:32;
  unsigned int v2:16;
  bool v3;
};
//SIG(1 BFu32ll_BFu16i_B) C1{ FL:32 Fi:16 Fc}



static void Test_BFu32ll_BFu16i_B()
{
  {
    init_simple_test("BFu32ll_BFu16i_B");
    static BFu32ll_BFu16i_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_BFu16i_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_BFu16i_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_BFu16i_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu32ll_BFu16i_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu32ll_BFu16i_B");
    check_field_offset(lv, v3, 6, "BFu32ll_BFu16i_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_BFu16i_B(Test_BFu32ll_BFu16i_B, "BFu32ll_BFu16i_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  BFu32ll_BFu16ll_B  {
  __tsu64 v1:32;
  __tsu64 v2:16;
  bool v3;
};
//SIG(1 BFu32ll_BFu16ll_B) C1{ FL:32 FL:16 Fc}



static void Test_BFu32ll_BFu16ll_B()
{
  {
    init_simple_test("BFu32ll_BFu16ll_B");
    static BFu32ll_BFu16ll_B lv;
    check2(sizeof(lv), 8, "sizeof(BFu32ll_BFu16ll_B)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu32ll_BFu16ll_B)");
    set_bf_and_test(lv, v1, 0, 0, 32, 1, "BFu32ll_BFu16ll_B");
    set_bf_and_test(lv, v1, 0, 0, 32, hide_ull(1LL<<31), "BFu32ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu32ll_BFu16ll_B");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu32ll_BFu16ll_B");
    check_field_offset(lv, v3, 6, "BFu32ll_BFu16ll_B.v3");
  }
}
static Arrange_To_Call_Me vBFu32ll_BFu16ll_B(Test_BFu32ll_BFu16ll_B, "BFu32ll_BFu16ll_B", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

